Snímka obrazovky pracovnej plochy používateľa pomocou PowerShell

Zamestnanci technickej podpory požiadali o napísanie skriptu PowerShell, aby rýchlo získali snímku obrazovky pracovnej plochy používateľa zo vzdialeného počítača. Zároveň by zamestnanec HelpDesk nemal byť pripojený k počítaču používateľa pomocou grafických nástrojov vzdialenej podpory (SCCM, Remote Assistance, Shadow session atď.).

obsah:

  • Vytvorte snímku obrazovky pomocou PowerShell
  • Ako získať snímku obrazovky zo vzdialeného počítača z PowerShell?

Vytvorte snímku obrazovky pomocou PowerShell

Najprv sa dozvieme, ako nasnímať snímku obrazovky aktuálnej obrazovky na lokálnom počítači z aplikácie PowerShell. Na získanie obrazu pracovnej plochy použijeme zabudovanú triedu .NET - System.Windows.Forms. Mám taký skript PowerShell:

$ Path = "C: \ ps \ screenshots"
# Skontrolujte, či bol vytvorený adresár na ukladanie snímok obrazovky, ak nie, vytvorte ho
If (! (Test-path $ path))
New-Item -ItemType Directory -Force-Cesta $ cesta

Add-Type -AssemblyName System.Windows.Forms
$ screen = [System.Windows.Forms.Screen] :: PrimaryScreen.Bounds
# Získajte rozlíšenie obrazovky
$ image = New-Object System.Drawing.Bitmap ($ screen.Width, $ screen.Height)
# Vytvorte grafický objekt
$ 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)
# Získajte snímku obrazovky
[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 "
# Uložte snímku obrazovky do súboru png
$ image.Save ($ screen_file, [System.Drawing.Imaging.ImageFormat] :: Png)

Skript PS-Capture-Local-Screen.ps1 je k dispozícii v mojom úložisku na serveri GitHub.

Tento skript vytvorí adresár na ukladanie snímok obrazovky, získa aktuálne rozlíšenie obrazovky, prijíma obrázky pracovného priestoru a uloží ho do súboru png..

Spustite určený skript PowerShell a overte, že v určenom adresári (môžete určiť cestu UNC k sieťovému priečinku) sa v čase spustenia skriptu objavil súbor png so snímkou ​​obrazovky vašej pracovnej plochy. Názov súboru png obsahuje pre zjednodušenie názov počítača, používateľa, aktuálny dátum a čas.

Ak chcete použiť volanie tohto skriptu PS zo skriptov, použite tento príkaz (v tomto prípade nemusíte meniť nastavenia PowerShell ExecutionPolicy):

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

Pri úprave skriptov PowerShell uprednostňujem použitie kódu Visual Studio namiesto Powershell ISE.

Skratka tohto skriptu PowerShell môže byť umiestnená prostredníctvom GPO na plochách všetkých používateľov domény a viazaním klávesových skratiek ju zavolať. Teraz, keď sa v akejkoľvek aplikácii vyskytne problém alebo chyba, stačí stlačiť priradenú klávesovú kombináciu. Výsledkom je, že v sieťovom priečinku HelpDesk sa zobrazí snímka pracovnej plochy používateľa.

Ako získať snímku obrazovky zo vzdialeného počítača z PowerShell?

Ďalšou úlohou je použiť PowerShell na získanie snímky obrazovky pracovnej plochy používateľa na vzdialenom počítači / serveri. Môže to byť samostatný počítač so systémom Windows 10 alebo server RDS.

Preferovaným spôsobom grafického pripojenia k pracovnej ploche používateľov na serveri RDS je Tieň vzdialenej pracovnej plochy.

Ak chcete získať snímku obrazovky zo servera RDS (alebo zo systému Windows, na ktorom je povolených viac pripojení RDP), musíte najskôr získať identifikáciu relácie používateľa na vzdialenom počítači. V nasledujúcom skripte musíte zadať názov vzdialeného servera a používateľského účtu.

$ ComputerName = "msk-rds1"
$ RDUserName = "avivanov"
$ quser = (((používateľ dopytu / server: $ ComputerName) - miesto '^>', ") - miesto '\ s 2,', ',' | 'Konvertovať z-Csv)
$ usersess = $ quser | kde $ _. USERNAME - podobné $ RDUserName - a $ _. STATE -eq "Active"
$ usersessID = $ usersess.ID

Ak na vytváranie snímok zo vzdialených počítačov pomocou jedného skriptu použijete skript, číslo relácie bude vždy 1. Nahradiť predchádzajúci blok prieskumu servera RDS za $ usersessID = 1.

Z dôvodu pohodlia musíte súbor uložiť pomocou skriptu PowerShell, aby sa snímka obrazovky dostala do sieťového adresára. Ak to chcete urobiť, upravte skript PS-Capture-Local-Screen.ps1, zmeňte cestu na:

$ Path = \\ server1 \ Screen \ Log

Do tohto adresára sa uložia snímky používateľov. Udeliť prístup na zápis do tohto adresára pre skupinu domén Overení používatelia.

Po získaní ID relácie používateľa sa môžete vzdialene pripojiť k jeho relácii pomocou programu PsExec a spustiť skript:

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

Zamestnanec HelpDesk teraz môže tento skript spustiť zo svojho počítača a v zadanom adresári sa zobrazí snímka aktuálneho obrazu pracovnej plochy používateľa vzdialeného počítača..