Страница поста от канала Лига сисадминов

Лига сисадминов
28.10.2020 11:10
#ит_статьи #windows #power_shell Как сделать скриншот рабочего стола пользователя через PowerShell В данной статье рассматривается пример написания скрипта на PS для создания скриншотов. При условии того, что сотрудник HelpDesk не должен/не может подключаться к компьютеру пользователя через графические средства удаленной поддержки (SCCM, Remote Assistance, Shadow сессию и т.д.). https://telegra.ph/Kak-sdelat-skrinshot-rabochego-stola-polzovatelya-cherez-PowerShell-10-28

Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме


Как сделать скриншот рабочего стола пользователя через PowerShell

Создаем скриншот средствами PowerShell

Сначала разберемся, как из PowerShell сделать скриншот текущего экрана на локальном компьютере. Для получения изображения рабочего стола мы воспользуемся встроенным классом .NET — System.Windows.Forms. В результате получаем следующий скрипт:

$Path = "C:\ps\screenshots"

# Проверяем, что каталог для хранения скриншотов создан, если нет - создаем его

If (!(test-path $path)) {

New-Item -ItemType Directory -Force -Path $path

}

Add-Type -AssemblyName System.Windows.Forms

$screen = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds

# Получаем разрешение экрана

$image = New-Object System.Drawing.Bitmap($screen.Width, $screen.Height)

# Создаем графический объект

$graphic = [System.Drawing.Graphics]::FromImage($image)

$point = New-Object System.Drawing.Point(0, 0)

$graphic.CopyFromScreen($point, $point, $image.Size);

$cursorBounds = New-Object System.Drawing.Rectangle([System.Windows.Forms.Cursor]::Position, [System.Windows.Forms.Cursor]::Current.Size)

# Получаем скриншот экрана

[System.Windows.Forms.Cursors]::Default.Draw($graphic, $cursorBounds)

$screen_file = "$Path\" + $env:computername + "_" + $env:username + "_" + "$((get-date).tostring('yyyy.MM.dd-HH.mm.ss')).png"

# Сохранить скриншот в png файл

$image.Save($screen_file, [System.Drawing.Imaging.ImageFormat]::Png)

Скрипт PS-Capture-Local-Screen.ps1 доступен в репозитории на GitHub.

Данный скрипт создает каталог для хранения скриншотов, получает текущее разрешение экрана, получает изображения рабочей области и сохраняет его в png файл.

Запустите указанный PowerShell скрипт и проверьте, что в указанном каталоге (можно укажать UNC путь к сетевой папке) появился png файл со скриншотом вашего рабочего стола в момент запуска скрипта. Для удобства имя png файла содержит имя компьютера, пользователя, текущую дату и время.

Если вы хотите использовать вызов данного PS скрипт из сценариев, используйте такую команду:

powershell.exe -executionpolicy bypass -file c:\ps\PS-Capture-Local-Screen.ps1

Через GPO ярлык на этот скрипт можно будет поместить на рабочие столы всех пользователей домена и привязать горячие клавиши для его вызова. Теперь при появлении какой-то проблемы или ошибки в любом приложении пользователю достаточно нажать назначенную комбинацию клавиш. В результате в сетевой папке HelpDesk появляется скриншот рабочего стола пользователя.

Как получить скриншот рабочего стола с удаленного компьютера из PowerShell?

Следующая задача – нужно через PowerShell получить скриншот рабочего стола пользователя на удаленном компьютере/сервере. Это может быть как отдельный компьютер с Windows 10, так и RDS сервер.

Предпочтительный способ графического подключения к рабочему столу пользователей на RDS сервере — Remote Desktop Shadowing.

Если вы хотите получить скриншот рабочего стола с RDS сервера (или десктопной Windows , на которой разрешены множественные RDP подключения), сначала нужно получить ID сессии пользователя на удаленном компьютере. В следующем скрипте нужно указать имя удаленного сервера и учетную запись пользователя.

$ComputerName = "msk-rds1"

$RDUserName = "avivanov"

$quser = (((query user /server:$ComputerName) -replace '^>', '') -replace '\s{2,}', ',' | ConvertFrom-Csv)

$usersess=$quser | where {$_.USERNAME -like $RDUserName -and $_.STATE -eq "Active"}

$usersessID=$usersess.ID

Если вы используете скрипт для получения скриншотов экрана с удаленных компьютеров с одним пользователя, номер его сессии, всегда будет 1. Замените предыдущий блок опроса RDS сервера на $usersessID = 1.

Для удобства нужно сохранить файл с PowerShell скриптом получения скриншота в сетевой каталог. Для этого отредактируйте скрипт PS-Capture-Local-Screen.ps1, измените путь на:

$Path = \\server1\Screen\Log

В этот каталог будут сохранятся скриншоты пользователей. Предоставьте права на запись в этот каталог для доменной группы Authenticated Users.

После того, как вы получили ID сессии пользователя, можно удаленно подключиться в его сессию через PsExec и запустить скрипт:

.\PsExec.exe -s -i $usersessID \\$ComputerName powershell.exe -executionpolicy bypass -WindowStyle Hidden -file "\\server1\Screen\PS-Capture-Local-Screen.ps1"

Теперь, сотрудник техподдержки может запустить этот скрипт со своего компьютера, и в указанном каталоге появится скриншот текущего изображения рабочего стола пользователя удаленного компьютера.

Вы не ввели Email
Вы не ввели текст комментария

Возможно Вас заинтересует еще и это: