Сотрудники службы техподдержки пользователей попросили написать PowerShell скрипт, позволяющий быстро получить скриншот рабочего стола пользователя с удаленного компьютера. При этом сотрудник HelpDesk не должен подключаться к компьютеру пользователя через графические средства удаленной поддержки (SCCM, Remote Assistance, теневую RDP сессию и т.д.).
Получить скриншот экрана пользователя в скрипте PowerShell
Для получения текущего изображения экрана пользователя можно использовать встроенный .NET класс System.Windows.Forms. Следующий PowerShell скрипт создаст локальную папку для хранения снимков экрана, определит текущее разрешение графической среды и сохранит содержимое экрана в PNG файл.
$Path = "C:psscreenshots"
# Проверяем, что каталог для хранения скриншотов создан, если нет - создаем его
If (!(test-path $path)) {
New-Item -ItemType Directory -Force -Path $path
}
Add-Type -AssemblyName System.Windows.Forms
$screen = [Windows.Forms.SystemInformation]::VirtualScreen
# Получаем разрешение экрана
$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)
# Очистка памяти
$graphic.Dispose()
$image.Dispose()
Запустите PowerShell скрипт и проверьте, что в указанном каталоге (можно указать UNC путь к сетевой папке) появился PNG файл со снимком вашего рабочего стола в момент запуска скрипта. Для удобства имя PNG файла содержит имя компьютера, пользователя, текущую дату и время.

Скрипт захватит на скриншоте в том числе положение курсора мыши.
Чтобы создавать скриншоты экрана каждые несколько секунд, нужно поместить код скрипта в цикл while:
while($true){
{ SCRIPT }
sleep(60) # Пауза 60 секунд
}
Для вызова этого PowerShell скрипта из планировщика задач или BAT файла сценария, используйте такую команду (в этом случае не придется изменять настройки PowerShell ExecutionPolicy):
powershell.exe -executionpolicy bypass -file c:psPS-Capture-Local-Screen.ps1
С помощью GPO можно поместить ярлык на этот PowerShell скрипт на рабочие столы пользователей и назначить горячие клавиши для его вызова. Теперь при появлении какой-то проблемы или ошибки в любом приложении пользователю достаточно нажать назначенную комбинацию клавиш. В результате в сетевой папке HelpDesk появится скриншот рабочего стола пользователя.
Как получить скриншот рабочего стола с удаленного компьютера из PowerShell?
Этот PowerShell скрипт можно использовать для получения скриншот рабочего стола пользователя на удаленном рабочей станции или сервере.
Если нужно получить скриншот рабочего стола с RDS сервера (или десктопной Windows , на которой разрешены множественные RDP подключения), сначала нужно получить ID сессии пользователя на удаленном компьютере.
Чтобы получить список сессий пользователей на удаленном компьютере, выполните команду:
qwinsta /server:msk-rds1

В данном случае пользователь выполнил вход на консоль (сессия 1).
Скопируйте файл PS-Capture-Local-Screen.ps1 в сетевой каталог и отредактируйте в нем путь, чтобы он сохранял скриншоты в сетевую папку (предоставьте права записи в эту папку для пользователей):
$Path = \server1ScreenLog
Теперь с помощью утилиты PsExec можно выполнить PowerShell скрипт получения скриншота для пользователя по ID его сессии ( 1 в нашем примере).
.PsExec.exe -s -i 1 \wks333 powershell.exe -executionpolicy bypass -WindowStyle Hidden -file "\s-fs01scriptsPS-Capture-Local-Screen.ps1"

Строка powershell.exe exited on wks333 with error code 0 указывает, что скрипт был выполнен успешно.
Теперь, сотрудники HelpDesk могут запустить эту команду со своего компьютера, и в указанном сетевом каталоге появится скриншот изображения рабочего стола пользователя удаленного компьютера.
PowerShell: сделать скриншот окна активного приложения
Рассмотренный выше скрипт помещает в PNG файл содержимое всех мониторов пользователя. Можно делать снимок только открытого окна приложения, с котороым работает пользователь в данный момент.
В GitHub также загружен обновленный скрипт PS-Capture-Current-App-Screen.ps1, позволяющий сделать в сесии пользователя скриншот только содержимого окна активного приложения.

Добавить комментарий