Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

ถ่ายภาพหน้าจอของเดสก์ท็อปของผู้ใช้ด้วย PowerShell

ทีมสนับสนุน HelpDesk ขอให้ฉันเขียนสคริปต์ PowerShell เพื่อรับภาพหน้าจอของเดสก์ท็อปผู้ใช้อย่างรวดเร็วจากคอมพิวเตอร์ระยะไกล เงื่อนไขหลักคือ พนักงาน HelpDesk ไม่ควรเชื่อมต่อกับคอมพิวเตอร์ของผู้ใช้ผ่านเครื่องมือสนับสนุนแบบกราฟิกจากระยะไกล (SCCM, Remote Assistance, Remote Desktop Session Shadowing เป็นต้น)

จับภาพหน้าจอโดยใช้ PowerShell

ก่อนอื่น มาเรียนรู้วิธีถ่ายภาพหน้าจอบนคอมพิวเตอร์ที่ใช้ PowerShell กันก่อน ในการจับภาพเดสก์ท็อปปัจจุบัน คุณสามารถใช้คลาส .NET System.Windows.Forms ในตัว . ฉันได้รับสคริปต์ PowerShell นี้:

$Path = "C:\ScreenCapture"
# Make sure that the directory to keep screenshots has been created, otherwise create it
If (!(test-path $path)) {
New-Item -ItemType Directory -Force -Path $path
}
Add-Type -AssemblyName System.Windows.Forms
$screen = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds
# Get the current screen resolution
$image = New-Object System.Drawing.Bitmap($screen.Width, $screen.Height)
# Create a graphic object
$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)
# Get a screenshot
[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"
# Save the screenshot as a PNG file
$image.Save($screen_file, [System.Drawing.Imaging.ImageFormat]::Png)

สคริปต์ PowerShell นี้สร้างไดเร็กทอรีเพื่อจัดเก็บภาพหน้าจอ รับความละเอียดหน้าจอปัจจุบัน จับภาพของพื้นที่ทำงานปัจจุบัน และบันทึกเป็นไฟล์ PNG เรียกใช้สคริปต์ PowerShell และตรวจสอบว่าไฟล์ png ปรากฏในไดเร็กทอรีที่ระบุ (คุณสามารถระบุพาธ UNC ไปยังโฟลเดอร์เครือข่ายที่ใช้ร่วมกัน) ด้วยภาพหน้าจอของเดสก์ท็อปของคุณ เพื่อความสะดวก ชื่อของไฟล์ PNG ประกอบด้วยชื่อคอมพิวเตอร์ ชื่อผู้ใช้ วันที่และเวลาปัจจุบัน

หากคุณต้องการเรียกใช้สคริปต์ PS จากไฟล์แบตช์ ให้ใช้คำสั่งนี้ (ในกรณีนี้ คุณไม่จำเป็นต้องเปลี่ยนการตั้งค่า PowerShell Execution Policy):

powershell.exe -executionpolicy bypass -file c:\ps\CaptureLocalScreen.ps1

ถ่ายภาพหน้าจอของเดสก์ท็อปของผู้ใช้ด้วย PowerShell

ในการแก้ไขสคริปต์ PowerShell ฉันชอบใช้ Visual Studio Code แทน Powershell ISE

คุณสามารถสร้าง GPO เพื่อวางทางลัดสำหรับสคริปต์ PowerShell บนเดสก์ท็อปของผู้ใช้โดเมนทั้งหมด และกำหนดปุ่มลัดเพื่อเรียกใช้ ตอนนี้ เมื่อเกิดปัญหาหรือข้อผิดพลาดในแอปใดๆ ผู้ใช้สามารถกดปุ่มลัดที่กำหนดได้ จากนั้น ภาพหน้าจอเดสก์ท็อปของผู้ใช้จะปรากฏในโฟลเดอร์แชร์ HelpDesk

จะถ่ายภาพหน้าจอเดสก์ท็อปจากคอมพิวเตอร์ระยะไกลโดยใช้ PowerShell ได้อย่างไร

งานต่อไปคือการจับภาพหน้าจอของเดสก์ท็อปของผู้ใช้บนคอมพิวเตอร์ระยะไกลผ่าน PowerShell อาจเป็นคอมพิวเตอร์แบบสแตนด์อโลนที่ใช้ Windows 10 หรือเซิร์ฟเวอร์ RDS

วิธีที่ต้องการในการเชื่อมต่อกับเดสก์ท็อปของผู้ใช้บนเซิร์ฟเวอร์ RDS โดยใช้เครื่องมือกราฟิกคือเซสชัน Shadow RDP

หากคุณต้องการรับภาพหน้าจอเดสก์ท็อปจากเซิร์ฟเวอร์ RDS (หรือเดสก์ท็อป Windows ซึ่งอนุญาตให้มีการเชื่อมต่อ RDP พร้อมกันหลายรายการ) คุณต้องรับ ID เซสชันผู้ใช้บนคอมพิวเตอร์ระยะไกลก่อน ระบุชื่อของคอมพิวเตอร์/เซิร์ฟเวอร์ระยะไกลและบัญชีผู้ใช้ในสคริปต์ PowerShell ต่อไปนี้:
$ComputerName = "nld-rds1"
$RDUserName = "h.jansen"
$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 ลงในโฟลเดอร์เครือข่ายที่ใช้ร่วมกัน จากนั้นแก้ไข CaptureLocalScreen.ps1 ไฟล์และเปลี่ยนเส้นทางเป็น:

$Path = \\nld-fs01\Screen\Log

ภาพหน้าจอของผู้ใช้จะถูกบันทึกไว้ในโฟลเดอร์นี้ ให้สิทธิ์ในการเขียนโฟลเดอร์สำหรับ ผู้ใช้ที่ผ่านการตรวจสอบสิทธิ์ กลุ่มโดเมน

หลังจากที่คุณได้รับ ID เซสชันผู้ใช้แล้ว คุณสามารถเชื่อมต่อกับเซสชันผู้ใช้จากระยะไกลได้โดยใช้ PsExec เครื่องมือและเรียกใช้สคริปต์:

.\PsExec.exe -s -i $usersessID \\$ComputerName powershell.exe -executionpolicy bypass -WindowStyle Hidden -file "\\nld-fs01\Screen\CaptureLocalScreen.ps1"

จากนั้นสมาชิกทีม HelpDesk สามารถเรียกใช้สคริปต์จากคอมพิวเตอร์ของเขา และภาพหน้าจอของเดสก์ท็อปปัจจุบันของคอมพิวเตอร์ระยะไกลจะปรากฏในไดเร็กทอรีที่ระบุ