Nhóm hỗ trợ HelpDesk đã yêu cầu tôi viết một tập lệnh PowerShell để nhanh chóng nhận được ảnh chụp màn hình máy tính để bàn của người dùng từ một máy tính từ xa. Điều kiện chính là nhân viên HelpDesk không được kết nối với máy tính của người dùng thông qua các công cụ hỗ trợ từ xa bằng đồ họa (SCCM, Remote Assistance, Remote Desktop Session Shadowing, v.v.).
Chụp ảnh màn hình bằng PowerShell
Trước hết, hãy tìm hiểu cách chụp ảnh màn hình trên máy tính cục bộ bằng PowerShell. Để chụp ảnh màn hình hiện tại, bạn có thể sử dụng lớp .NET tích hợp System.Windows.Forms . Tôi nhận được tập lệnh PowerShell này:
$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)
Tập lệnh PowerShell này tạo một thư mục để lưu trữ ảnh chụp màn hình, lấy độ phân giải màn hình hiện tại, chụp ảnh của không gian làm việc hiện tại và lưu nó dưới dạng tệp PNG. Chạy tập lệnh PowerShell và kiểm tra xem tệp png có xuất hiện trong thư mục được chỉ định hay không (bạn có thể chỉ định đường dẫn UNC đến thư mục mạng chia sẻ) bằng ảnh chụp màn hình máy tính của bạn. Để thuận tiện, tên tệp PNG chứa tên máy tính, tên người dùng, ngày và giờ hiện tại.
Nếu bạn muốn gọi tập lệnh PS từ tệp hàng loạt, hãy sử dụng lệnh này (trong trường hợp này, bạn không cần thay đổi cài đặt Chính sách thực thi PowerShell):
powershell.exe -executionpolicy bypass -file c:\ps\CaptureLocalScreen.ps1
Để chỉnh sửa tập lệnh PowerShell, tôi thích sử dụng Visual Studio Code thay vì Powershell ISE.
Bạn có thể tạo GPO để đặt một lối tắt cho tập lệnh PowerShell trên màn hình nền của tất cả người dùng miền và gán các phím nóng để gọi nó. Giờ đây, khi một sự cố hoặc lỗi xuất hiện trong bất kỳ ứng dụng nào, người dùng có thể chỉ cần nhấn các phím nóng được chỉ định. Sau đó, ảnh chụp màn hình máy tính của người dùng xuất hiện trong thư mục chia sẻ HelpDesk.
Làm thế nào để Chụp ảnh màn hình màn hình từ máy tính từ xa bằng PowerShell?
Nhiệm vụ tiếp theo là lấy ảnh chụp màn hình của người dùng trên máy tính từ xa thông qua PowerShell. Nó có thể là một máy tính độc lập chạy Windows 10 hoặc một máy chủ RDS.
Một cách ưa thích để kết nối với máy tính người dùng trên máy chủ RDS bằng công cụ đồ họa là Phiên RDP Bóng.
Nếu bạn muốn nhận ảnh chụp màn hình máy tính để bàn từ máy chủ RDS (hoặc máy tính để bàn Windows, trong đó nhiều kết nối RDP đồng thời được phép), trước tiên bạn phải lấy ID phiên người dùng trên máy tính từ xa. Chỉ định tên của máy tính / máy chủ từ xa và tài khoản người dùng trong tập lệnh PowerShell sau:
$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
$usersessID = 1
. Để thuận tiện hơn, hãy lưu tệp tập lệnh PowerShell vào thư mục mạng chia sẻ. Sau đó, chỉnh sửa CaptureLocalScreen.ps1 tệp và thay đổi đường dẫn thành:
$Path = \\nld-fs01\Screen\Log
Ảnh chụp màn hình của người dùng sẽ được lưu vào thư mục này. Cấp quyền ghi vào thư mục cho Người dùng được xác thực nhóm miền.
Sau khi bạn đã có ID phiên người dùng, bạn có thể kết nối với phiên người dùng từ xa bằng cách sử dụng PsExec
công cụ và chạy tập lệnh:
.\PsExec.exe -s -i $usersessID \\$ComputerName powershell.exe -executionpolicy bypass -WindowStyle Hidden -file "\\nld-fs01\Screen\CaptureLocalScreen.ps1"
Sau đó, một thành viên trong nhóm HelpDesk có thể chạy tập lệnh từ máy tính của mình và ảnh chụp màn hình của màn hình hiện tại của máy tính từ xa sẽ xuất hiện trong thư mục được chỉ định.