Computer >> 컴퓨터 >  >> 체계 >> Windows Server

PowerShell로 사용자 데스크톱 스크린샷 찍기

HelpDesk 지원 팀은 원격 컴퓨터에서 사용자 데스크톱의 스크린샷을 빠르게 가져오기 위해 PowerShell 스크립트를 작성하도록 요청했습니다. 주요 조건은 HelpDesk 직원이 그래픽 원격 지원 도구(SCCM, 원격 지원, 원격 데스크톱 세션 섀도잉 등)를 통해 사용자의 컴퓨터에 연결해서는 안 된다는 것입니다.

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 실행 정책 설정을 변경할 필요가 없음):

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

PowerShell로 사용자 데스크톱 스크린샷 찍기

PowerShell 스크립트를 편집하려면 Powershell ISE 대신 Visual Studio Code를 사용하는 것을 선호합니다.

GPO를 만들어 모든 도메인 사용자의 데스크톱에 PowerShell 스크립트에 대한 바로 가기를 배치하고 이를 호출하기 위한 바로 가기 키를 할당할 수 있습니다. 이제 어떤 앱에서든 문제나 오류가 발생하면 사용자는 할당된 단축키를 누르기만 하면 됩니다. 그러면 헬프데스크 공유 폴더에 사용자 데스크탑 스크린샷이 나타납니다.

PowerShell을 사용하여 원격 컴퓨터에서 데스크톱 스크린샷을 찍는 방법은 무엇입니까?

다음 작업은 PowerShell을 통해 원격 컴퓨터에서 사용자 데스크톱의 스크린샷을 얻는 것입니다. Windows 10 또는 RDS 서버를 실행하는 독립 실행형 컴퓨터일 수 있습니다.

그래픽 도구를 사용하여 RDS 서버의 사용자 데스크톱에 연결하는 기본 방법은 Shadow RDP 세션입니다.

RDS 서버(또는 여러 동시 RDP 연결이 허용되는 데스크톱 Windows)에서 데스크톱 스크린샷을 얻으려면 먼저 원격 컴퓨터에서 사용자 세션 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"

그러면 헬프데스크 팀원이 자신의 컴퓨터에서 스크립트를 실행할 수 있으며 원격 컴퓨터의 현재 데스크톱 스크린샷이 지정된 디렉터리에 나타납니다.