Cuplikan layar desktop pengguna melalui PowerShell

Staf dukungan teknis diminta untuk menulis skrip PowerShell untuk mendapatkan tangkapan layar desktop pengguna dengan cepat dari komputer jarak jauh. Pada saat yang sama, karyawan HelpDesk tidak boleh terhubung ke komputer pengguna melalui alat grafis dukungan jarak jauh (SCCM, Remote Assistance, sesi Shadow, dll.).

Konten:

  • Buat tangkapan layar menggunakan PowerShell
  • Cara mendapatkan tangkapan layar desktop dari komputer jarak jauh dari PowerShell?

Buat tangkapan layar menggunakan PowerShell

Pertama, kami akan mencari cara untuk mengambil screenshot layar saat ini di komputer lokal dari PowerShell. Untuk mendapatkan gambar desktop, kita akan menggunakan kelas .NET bawaan - System.Windows.Form. Saya mendapat skrip PowerShell:

$ Path = "C: \ ps \ tangkapan layar"
# Periksa apakah direktori untuk menyimpan tangkapan layar telah dibuat, jika tidak, buatlah
If (! (Test-path $ path))
New-Item -ItemType Directory -Force -Path $ path

Add-Type -AssemblyName System.Windows.Forms
$ screen = [System.Windows.Forms.Screen] :: PrimaryScreen.Bounds
# Dapatkan resolusi layar
$ image = New-Object System.Drawing.Bitmap ($ screen.Width, $ screen.Height)
# Buat objek grafik
$ graphic = [System.Drawing.Graphics] :: FromImage ($ image)
$ point = New-Object System.Drawing.Point (0, 0)
$ graphic.CopyFromScreen ($ point, $ point, $ image.Size);
$ cursorBounds = Objek-Baru System.Drawing.Rectangle ([System.Windows.Forms.Cursor] :: Position, [System.Windows.Forms.Cursor] :: Current.Size)
# Dapatkan tangkapan layar
[System.Windows.Forms.Cursors] :: Default.Draw ($ graphic, $ cursorBounds)
$ screen_file = "$ Path \" + $ env: computername + "_" + $ env: username + "_" + "$ ((dapatkan tanggal) .tostring ('yyyy.MM.dd-HH.mm.ss ')). png "
# Simpan tangkapan layar ke file png
$ image.Save ($ screen_file, [System.Drawing.Imaging.ImageFormat] :: Png)

Skrip PS-Capture-Local-Screen.ps1 tersedia di repositori saya di GitHub.

Script ini membuat direktori untuk menyimpan tangkapan layar, memperoleh resolusi layar saat ini, menerima gambar dari ruang kerja dan menyimpannya ke file png.

Jalankan skrip PowerShell yang ditentukan dan verifikasi bahwa file png muncul di direktori yang ditentukan (Anda dapat menentukan jalur UNC ke folder jaringan) dengan tangkapan layar desktop Anda saat skrip dijalankan. Untuk kenyamanan, nama file png berisi nama komputer, pengguna, tanggal dan waktu saat ini.

Jika Anda ingin menggunakan panggilan skrip PS ini dari skrip, gunakan perintah ini (dalam hal ini, Anda tidak harus mengubah pengaturan PowerShell ExecutionPolicy):

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

Untuk mengedit skrip PowerShell, saya lebih suka menggunakan Visual Studio Code daripada Powershell ISE.

Jalan pintas ke skrip PowerShell ini dapat ditempatkan melalui GPO di desktop semua pengguna domain dan ikat hot key untuk menyebutnya. Sekarang, ketika masalah atau kesalahan terjadi pada aplikasi apa pun, pengguna hanya perlu menekan kombinasi tombol yang ditetapkan. Akibatnya, tangkapan layar desktop pengguna muncul di folder jaringan HelpDesk.

Cara mendapatkan tangkapan layar desktop dari komputer jarak jauh dari PowerShell?

Tugas selanjutnya adalah menggunakan PowerShell untuk mendapatkan tangkapan layar desktop pengguna di komputer / server jarak jauh. Ini bisa berupa komputer terpisah dengan Windows 10 atau server RDS.

Cara yang disukai untuk terhubung secara grafis ke desktop pengguna di server RDS adalah Remote Desktop Shadowing.

Jika Anda ingin mendapatkan tangkapan layar desktop dari server RDS (atau desktop Windows, yang memungkinkan beberapa koneksi RDP), Anda harus terlebih dahulu mendapatkan ID sesi pengguna di komputer jarak jauh. Dalam skrip berikut, Anda perlu menentukan nama server jarak jauh dan akun pengguna.

$ ComputerName = "msk-rds1"
$ RDUserName = "avivanov"
$ quser = (((permintaan pengguna / server: $ ComputerName) -replace '^>', ") -replace '\ s 2,', ',' | ConvertFrom-Csv)
$ usersess = $ quser | di mana $ _. USERNAME -seperti $ RDUserName -dan $ _. STATE -eq "Aktif"
$ usersessID = $ usersess.ID

Jika Anda menggunakan skrip untuk mengambil tangkapan layar dari komputer jarak jauh dengan satu pengguna, nomor sesi akan selalu 1. Ganti blok sebelumnya dari polling server RDS dengan $ usersessID = 1.

Untuk kenyamanan, Anda perlu menyimpan file dengan skrip PowerShell untuk mendapatkan tangkapan layar ke direktori jaringan. Untuk melakukan ini, edit skrip PS-Capture-Local-Screen.ps1, ubah path ke:

$ Path = \\ server1 \ Screen \ Log

Tangkapan layar pengguna akan disimpan ke direktori ini. Berikan akses tulis ke direktori ini untuk grup domain Pengguna yang Diotentikasi.

Setelah Anda mendapatkan ID sesi pengguna, Anda dapat terhubung dari jauh ke sesi melalui PsExec dan menjalankan skrip:

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

Sekarang, karyawan HelpDesk dapat menjalankan skrip ini dari komputernya, dan tangkapan layar gambar desktop saat ini dari pengguna komputer jarak jauh akan muncul di direktori yang ditentukan.