Powershell 脚本将运行但屏幕截图未完成,为什么?

Powershell 脚本将运行但屏幕截图未完成,为什么?

我有一个 powershell 脚本来截取屏幕截图。如果在 powershell 或 ISE 中运行它,它会运行良好,可以毫无问题地截取屏幕截图。当我在 windows 任务计划程序上安排任务时,它只会保存一张空白图像而不是屏幕截图。有什么想法吗?

脚本:

$path = "\\somelocation\" 
$fileName = "Test"
$date = Get-Date -Format yyyyMMdd-hhmm
$file = $path + $filename + $date + ".bmp" 
Add-Type -AssemblyName System.Windows.Forms
Add-type -AssemblyName System.Drawing
# Gather Screen resolution information
$Screen = [System.Windows.Forms.SystemInformation]::VirtualScreen
$Width = $Screen.Width
$Height = $Screen.Height
$Left = $Screen.Left
$Top = $Screen.Top
# Create bitmap using the top-left and bottom-right bounds
$bitmap = New-Object System.Drawing.Bitmap $Width, $Height
# Create Graphics object
$graphic = [System.Drawing.Graphics]::FromImage($bitmap)
# Capture screen
$graphic.CopyFromScreen($Left, $Top, 0, 0, $bitmap.Size)
# Save to file
$bitmap.Save($File)

Windows 任务信息

常规选项卡:

  • 无论用户是否登录都会运行
  • 以最高权限运行

触发器选项卡:

  • 每天早上 8 点开始,每 30 分钟一班,持续 12 小时。

操作标签:

  • 启动程序:powershell.exe
  • 添加参数:-ExecutionPolicy Bypass“c:\path\script.ps1”

我觉得脚本正在运行,但通过 Windows 任务计划程序运行时没有捕获屏幕截图。保存的图像只是一张白页。有谁知道为什么这不起作用?

答案1

您的问题是,通过选择“无论用户是否登录都运行”,您基本上是在告诉任务在会话 0 中运行,而这不是您登录的桌面。

此 Technet 博客文章中提供了更多详细信息:

救命!我的计划任务没有运行……

答案2

它可能与执行脚本的用户的配置文件有关。当您从 ise 执行它时,您会隐式使用当前用户的配置文件并截取当前屏幕的屏幕截图。

但是当您的脚本从任务计划程序执行时,它会使用任务配置文件中提到的配置文件,并且可能没有打开带有桌面的会话。如果您有白色图像,则此会话中没有任何桌面。

您可以尝试将执行任务的用户更改为已打开会话的用户并查看结果。可以手动启动任务进行测试。

相关内容