Співробітники служби техпідтримки користувачів попросили написати PowerShell скрипт, що дозволяє швидко отримати скріншот робочого столу користувача з віддаленого комп’ютера. При цьому співробітник HelpDesk не повинен підключатися до комп’ютера користувача через графічні засоби віддаленої підтримки (SCCM, Remote Assistance, Shadow сесію і т.д.).

  • Створюємо скріншот засобами PowerShell
  • Як отримати скріншот робочого столу з віддаленого комп’ютера з PowerShell?

Створюємо скріншот засобами 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 сервері – 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 = \server1ScreenLog

У цей каталог будуть збережуться скріншоти користувачів. Надайте права на запис в цей каталог для доменної групи Авторизовані користувачі.

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

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

Тепер, співробітник HelpDesk може запустити цей скрипт зі свого комп’ютера, і в зазначеному каталозі з’явиться скріншот поточного зображення робочого столу користувача віддаленого комп’ютера.

Leave a Reply

Your email address will not be published. Required fields are marked *