A felhasználói asztal képernyőképe a PowerShell segítségével

A műszaki támogatás munkatársai felkérték egy PowerShell-szkript írását, hogy a felhasználói asztalról gyorsan képeket kaphassanak egy távoli számítógépről. Ugyanakkor a HelpDesk alkalmazottat nem szabad csatlakoztatni a felhasználó számítógépéhez a távoli támogatás grafikus eszközeivel (SCCM, Remote Assistance, Shadow session stb.).

Tartalom:

  • Hozzon létre egy képernyőképet a PowerShell használatával
  • Hogyan lehet asztali képernyőképet készíteni egy távoli számítógépről a PowerShell alkalmazásból?

Hozzon létre egy képernyőképet a PowerShell használatával

Először kitaláljuk, hogyan lehet képernyőképeket készíteni a helyi számítógépről a PowerShellből. Az asztali kép előállításához a beépített .NET osztályt fogjuk használni - System.Windows.Forms. Kaptam egy ilyen PowerShell-szkriptet:

$ Path = "C: \ ps \ képernyőképeket"
# Ellenőrizze, hogy létrejött-e a képernyőképeket tároló könyvtár, ha nem, hozza létre
If (! (Tesztútvonal $ elérési útja))
Új elem -ItemType könyvtár -Force -Path $ elérési út

Add-Type -AssemblyName System.Windows.Forms
$ screen = [System.Windows.Forms.Screen] :: PrimaryScreen.Bounds
# Képernyőfelbontás elérése
$ image = New-Object System.Drawing.Bitmap ($ screen.Width, $ screen.Height)
# Hozzon létre egy grafikai objektumot
$ graphic = [System.Drawing.Graphics] :: FromImage ($ image)
$ pont = Új-Objektum System.Drawing.Point (0, 0)
$ graphic.CopyFromScreen ($ point, $ point, $ image.Size);
$ cursorBounds = Új objektum System.Drawing.Rectangle ([System.Windows.Forms.Cursor] :: Helyzet, [System.Windows.Forms.Cursor] :: Current.Size)
# Képernyőkép készítése
[System.Windows.Forms.Cursors] :: Default.Draw ($ graphic, $ cursorBounds)
$ screen_file = "$ elérési út \" + $ env: számítógépnév + "_" + $ env: felhasználónév + "_" + "$ ((get-date) .tostring ('éééé.HH.dd-HH.mm.ss ')). png "
# A képernyőmentés mentése a png fájlba
$ image.Save ($ screen_file, [System.Drawing.Imaging.ImageFormat] :: Png)

A PS-Capture-Local-Screen.ps1 szkript elérhető a GitHub tárhelyemben.

Ez a szkript létrehoz egy könyvtárat a képernyőképeket tárolni, megkapja az aktuális képernyőfelbontást, fogadja a munkaterület képeit és elmenti png fájlba..

Futtassa a megadott PowerShell szkriptet, és ellenőrizze, hogy egy png fájl megjelenik-e a megadott könyvtárban (megadhatja az UNC elérési útját a hálózati mappához) az asztal képernyőképeivel, a szkript futtatásakor. A kényelem kedvéért a png fájl neve tartalmazza a számítógép nevét, a felhasználót, az aktuális dátumot és az időt.

Ha a PS parancsfájl hívását szkriptekből szeretné használni, használja ezt a parancsot (ebben az esetben nem kell megváltoztatnia a PowerShell ExecutionPolicy beállításait):

powershell.exe -végrehajtási politika bypass -fájl c: \ ps \ PS-Capture-Local-Screen.ps1

A PowerShell szkriptek szerkesztéséhez inkább a Visual Studio kódot használom a Powershell ISE helyett.

A PowerShell-parancsfájl parancsikonja elhelyezhető a GPO-n keresztül a tartomány összes felhasználójának asztalán, és gyorshívásokat köthet annak meghívására. Most, amikor bármilyen alkalmazásban jelentkezik probléma vagy hiba, a felhasználónak csak meg kell nyomnia a hozzárendelt billentyűkombinációt. Ennek eredményeként a HelpDesk hálózati mappájában megjelenik a képernyőképe a felhasználó asztaláról.

Hogyan lehet asztali képernyőképet készíteni egy távoli számítógépről a PowerShell alkalmazásból?

A következő feladat a PowerShell használata, hogy képernyőképeket kapjon a távoli számítógépen / kiszolgálón lévő felhasználói asztalról. Lehet különálló számítógép a Windows 10-en vagy RDS-kiszolgáló.

Az RDS-kiszolgálón lévő felhasználók asztalához való grafikus kapcsolódás preferált módja a Remote Desktop Shadowing.

Ha asztali képernyőképeket szeretne kapni egy RDS-kiszolgálótól (vagy olyan asztali Windows-tól, amelyen több RDP-kapcsolat megengedett), először be kell szereznie a felhasználói munkamenet azonosítóját a távoli számítógépről. A következő szkriptben meg kell adnia a távoli szerver és a felhasználói fiók nevét.

$ ComputerName = "msk-rds1"
$ RDUserName = "avivanov"
$ quser = (((lekérdezés felhasználó / szerver: $ ComputerName) - cserélje ki a '^>', ") - cserélje ki a '\ s 2,', ',' | ConvertFrom-Csv-t)
$ usersess = $ quser | ahol $ _. USERNAME-szerű $ RDUserName és $ _. STATE -eq "Active"
$ usersessID = $ usersess.ID

Ha szkripttel készít képernyőképeket távoli számítógépektől egy felhasználónál, akkor a munkamenet száma mindig 1 lesz. Cserélje ki az RDS szerver szavazása előző blokkját $ usersessID = 1.

A kényelem érdekében el kell mentenie a fájlt a PowerShell szkripttel, hogy a képernyőképet bekerítse a hálózati könyvtárba. Ehhez szerkessze a PS-Capture-Local-Screen.ps1 szkriptet, módosítsa az elérési utat a következőre:

$ Elérési út = \\ kiszolgáló1 \ képernyő \ napló

A felhasználók képernyőképeit elmenti a könyvtárba. Írjon hozzáférési jogot ehhez a könyvtárhoz a tartománycsoport számára Hitelesített felhasználók.

Miután megkapta a felhasználó munkamenet-azonosítóját, távolról csatlakozhat a munkamenetéhez a PsExec-en keresztül, és futtathatja a szkriptet:

.\ PsExec.exe -s -i $ usersessID \\ $ ComputerName powershell.exe -executionpolicy bypass -WindowStyle Rejtett fájl "\\ kiszolgáló1 \ Képernyő \ PS-Capture-Helyi-Képernyő.ps1"

Most egy HelpDesk alkalmazott futtathatja ezt a szkriptet a számítógépéről, és a megadott könyvtárban megjelenik a távoli számítógép felhasználójának aktuális asztali képének képernyőképe..