Скриншот рабочего стола пользователя через PowerShell
Сотрудники службы техподдержки пользователей попросили написать PowerShell скрипт, позволяющий быстро получить скриншот рабочего стола пользователя с удаленного компьютера. При этом сотрудник HelpDesk не должен подключаться к компьютеру пользователя через графические средства удаленной поддержки (SCCM, Remote Assistance, Shadow сессию и т.д.).
Создаем скриншот средствами PowerShell
Сначала разберемся, как из PowerShell сделать скриншот текущего экрана на локальном компьютере. Для получения изображения рабочего стола мы воспользуемся встроенным классом .NET — System.Windows.Forms. У меня получился такой PowerShell скрипт:
$Path = "C:psscreenshots"
# Проверяем, что каталог для хранения скриншотов создан, если нет - создаем его
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)
Данный скрипт создает каталог для хранения скриншотов, получает текущее разрешение экрана, получает изображения рабочей области и сохраняет его в png файл.
Запустите указанный PowerShell скрипт и проверьте, что в указанном каталоге (можно укажать UNC путь к сетевой папке) появился png файл со скриншотом вашего рабочего стола в момент запуска скрипта. Для удобства имя png файла содержит имя компьютера, пользователя, текущую дату и время.
Если вы хотите использовать вызов данного PS скрипт из сценариев, используйте такую команду (в этом случае вам не придется изменять настройки PowerShell ExecutionPolicy):
powershell.exe -executionpolicy bypass -file c:psPS-Capture-Local-Screen.ps1
Ярлык на данный PowerShell скрипт можно через GPO поместить на рабочие столы всех пользователей домена и привязать горячие клавиши для его вызова. Теперь при появлении какой-то проблемы или ошибки в любом приложении пользователю достаточно нажать назначенную комбинацию клавиш. В результате в сетевой папке HelpDesk появляется скриншот рабочего стола пользователя.
Как получить скриншот рабочего стола с удаленного компьютера из PowerShell?
Следующая задача – нужно через PowerShell получить скриншот рабочего стола пользователя на удаленном компьютере/сервере. Это может быть как отдельный компьютер с Windows 10, так и RDS сервер.
Если вы хотите получить скриншот рабочего стола с 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 = server1ScreenLog
В этот каталог будут сохранятся скриншоты пользователей. Предоставьте права на запись в этот каталог для доменной группы Authenticated Users.
После того, как вы получили ID сессии пользователя, можно удаленно подключиться в его сессию через PsExec и запустить скрипт:
.PsExec.exe -s -i $usersessID $ComputerName powershell.exe -executionpolicy bypass -WindowStyle Hidden -file "server1ScreenPS-Capture-Local-Screen.ps1"
Теперь, сотрудник HelpDesk может запустить этот скрипт со своего компьютера, и в указанном каталоге появится скриншот текущего изображения рабочего стола пользователя удаленного компьютера.
Qiziqarli malumotlar
Скриншот рабочего стола пользователя через PowerShell