Snimak ekrana korisničke radne površine putem PowerShell-a

Osoblje za tehničku podršku zatražilo je pisanje skripte PowerShell-a za brzo dobivanje snimke radne površine korisnika s udaljenog računala. Istodobno, HelpDesk zaposlenik ne smije biti povezan s korisnikovim računalom putem grafičkih alata na daljinsku podršku (SCCM, Remote Assistance, Shadow session itd.).

sadržaj:

  • Napravite snimku zaslona koristeći PowerShell
  • Kako dobiti snimku zaslona na radnoj površini s udaljenog računala iz PowerShell-a?

Napravite snimku zaslona koristeći PowerShell

Prvo ćemo smisliti kako napraviti snimak zaslona trenutnog zaslona na lokalnom računalu iz tvrtke PowerShell. Za dobivanje slike na radnoj površini koristit ćemo ugrađenu .NET klasu - System.Windows.Forms. Imam takav PowerShell scenarij:

$ Path = "C: \ ps \ screenshotovi"
# Provjerite je li direktorij za pohranu snimaka zaslona kreiran, ako ne, stvorite ga
If (! (Test-path $ path))
New-Item -ItemType Directory -Force -Path $ path

Add-Type -AssemblyName System.Windows.Forms
$ screen = [System.Windows.Forms.Screen] :: PrimaryScreen.Bounds
# Dobijte razlučivost zaslona
$ image = Novi objektni sistem.Nacrtavanje.Bitmap ($ screen.Width, $ screen.Height)
# Stvorite grafički objekt
$ graphics = [System.Drawing.Graphics] :: FromImage ($ slika)
$ bod = Novi objektni sistem.Nacrtavanje.Point (0, 0)
$ graphic.CopyFromScreen ($ point, $ point, $ image.Size);
$ cursorBounds = Sustav novog objekta.Drawing.Rectangle ([System.Windows.Forms.Cursor] :: Pozicija, [System.Windows.Forms.Cursor] :: Current.Size)
# Napravite snimku zaslona
[System.Windows.Forms.Cursors] :: Zadano.Draw ($ grafička, $ cursorBounds)
$ screen_file = "$ staza \" + $ env: ime računara + "_" + $ env: korisničko ime + "_" + "$ ((datum datuma) .tostring ('yyyy.MM.dd-HH.mm.ss ')). png "
# Spremite snimku zaslona u png datoteku
$ image.Save ($ screen_file, [System.Drawing.Imaging.ImageFormat] :: Png)

Skripta PS-Capture-Local-Screen.ps1 dostupna je u mom spremištu na GitHub-u.

Ova skripta stvara direktorij za pohranu snimaka zaslona, ​​dobiva trenutnu razlučivost zaslona, ​​prima slike radnog prostora i sprema ga u png datoteku.

Pokrenite navedenu skriptu PowerShell i provjerite da se png datoteka pojavljuje u navedenom direktoriju (možete odrediti UNC put do mrežne mape) sa snimkom zaslona radne površine u vrijeme pokretanja skripte. Radi praktičnosti, ime datoteke png sadrži ime računala, korisnika, trenutni datum i vrijeme.

Ako želite koristiti poziv ove skripte za PS iz skripti, koristite ovu naredbu (u ovom slučaju ne morate mijenjati postavke PowerShell ExecutionPolicy):

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

Za uređivanje skripti PowerShell-a radije koristim Visual Studio Code umjesto Powershell ISE.

Prečac do ove skripte PowerShell može se postaviti putem GPO-a na radne površine svih korisnika domene i vezati vruće tipke da biste ih pozvali. Kada se u bilo kojoj aplikaciji pojavi problem ili greška, korisnik treba samo pritisnuti dodijeljenu kombinaciju tipki. Kao rezultat toga, snimka zaslona korisničke radne površine pojavit će se u mrežnoj mapi HelpDesk.

Kako dobiti snimku zaslona na radnoj površini s udaljenog računala iz PowerShell-a?

Sljedeći je zadatak pomoću programa PowerShell dobiti snimku zaslona korisnikove radne površine na udaljenom računalu / poslužitelju. To može biti ili zasebno računalo s Windows 10 ili RDS poslužitelj.

Preferirani način grafičkog povezivanja s radnom površinom korisnika na RDS poslužitelju je Remote Desktop Shadowing.

Ako želite snimiti zaslon radne površine s RDS poslužitelja (ili desktop Windows-a na kojem je dopušteno više RDP veza), prvo morate nabaviti ID sesije korisnika na udaljenom računalu. U sljedećoj skripti morate navesti naziv udaljenog poslužitelja i korisnički račun.

$ ComputerName = "msk-rds1"
$ RDUserName = "avivanov"
$ quser = (((upit korisnika / poslužitelja: $ ComputerName)-zamijeni '^>', ") -replace '\ s 2,', ',' | Pretvori od Csv)
$ usersess = $ quser | gdje je $ _. USERNAME nalik $ RDUserName -i $ _. DRŽAVA -eq "Active"
$ usersessID = $ usersess.ID

Ako koristite skriptu za snimanje snimaka zaslona s udaljenih računala s jednim korisnikom, broj sesije uvijek će biti 1. Zamijenite prethodni blok ankete na RDS poslužitelju sa $ usersessID = 1.

Radi praktičnosti, morate spremiti datoteku sa skriptu PowerShell da biste snimku zaslona unijeli u mrežni direktorij. Da biste to učinili, uredite skriptu PS-Capture-Local-Screen.ps1, promijenite put u:

$ Path = \\ server1 \ Zaslon \ Dnevnik

Slike korisnika bit će spremljene u tu mapu. Omogućite pisanju pristup ovom direktoriju za grupu domena Autentični korisnici.

Nakon što dobijete korisnički ID sesije, možete se daljinski povezati s njegovom sesijom putem PsExeca i pokrenuti skriptu:

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

Sada, zaposlenik HelpDeska može pokrenuti ovu skriptu sa svog računala, a snimka zaslona trenutne slike radne površine korisnika udaljenog računala pojavit će se u specificiranom direktoriju.