当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 截取用户桌面的屏幕截图

作者:精品下载站 日期:2024-12-14 22:55:45 浏览:16 分类:玩电脑

使用 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 脚本,我更喜欢使用 Visual Studio Code 而不是 Powershell ISE。

您可以创建一个 GPO,在所有域用户的桌面上放置 PowerShell 脚本的快捷方式,并分配热键来调用它。现在,当任何应用程序出现问题或错误时,用户只需按指定的热键即可。然后,HelpDesk 共享文件夹中会出现用户桌面屏幕截图。

如何使用 PowerShell 从远程计算机获取桌面屏幕截图?

下一个任务是通过 PowerShell 获取远程计算机上用户桌面的屏幕截图。它可以是运行 Windows 10 的独立计算机或 RDS 服务器。

使用图形工具连接到 RDS 服务器上的用户桌面的首选方法是影子 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 团队成员可以从他的计算机运行该脚本,远程计算机当前桌面的屏幕截图将出现在指定目录中。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯