为什么我的屏幕截图功能不能作为工作
我有一个功能内的作业,它需要一个屏幕截图。脚本本身由Taskscheduler作为域管理员执行。我还检查了“以最高权限运行”。为什么我的屏幕截图功能不能作为工作
工作应该做一个截图,然后发送电子邮件,但这两件事情都不会发生。我也没有看到错误信息(可能是因为它是后台工作?)。也许电子邮件不会被发送,因为它要将截图附加到电子邮件上,但不能因为屏幕截图未被创建。
为什么我的功能没有截图?域管理员有权写入目标。当我运行start-job
以外的功能时,屏幕截图会被创建。如果我具有start-job
内部的功能,它不会被创建,如果脚本是通过Taskscheduler启动或手动启动,则无关紧要。
我错过了什么?
下面的代码开始工作,并采取截图:
Start-Job -Name LogikWebserverWatch { function Take-Screenshot([string]$outfile)
{
[int]$PrtScrnWidth = (gwmi Win32_VideoController).CurrentHorizontalResolution
[int]$PrtScrnHeight = (gwmi Win32_VideoController).CurrentVerticalResolution
$bounds = [Drawing.Rectangle]::FromLTRB(0, 0, $PrtScrnWidth, $PrtScrnHeight)
$bmp = New-Object Drawing.Bitmap $bounds.width, $bounds.height
$graphics = [Drawing.Graphics]::FromImage($bmp)
$graphics.CopyFromScreen($bounds.Location, [Drawing.Point]::Empty, $bounds.size)
$bmp.Save($outfile)
$graphics.Dispose()
$bmp.Dispose()
}
while ((Get-Process LogikWebserver).Responding) {sleep -Milliseconds 50}
if (!(Get-Process LogikWebserver).Responding) {
Try{
$utf8 = New-Object System.Text.utf8encoding
$datetime = (get-date).ToString('yyyyMMdd-HHmmss')
Take-Screenshot -outfile C:\Install\LogikWebserverErrorReporting\Screenshot-$datetime.png
# some more code [...]
} Catch { some more code [...] }
}}
回答:
The documentations说:
Windows PowerShell后台作业运行一个命令而不与当前会话交互。
所以你可能不得不在你的工作中加载所需的程序集,然后才能工作。
当我想你的代码上述内容,当作业外部运行仅创建了一个屏幕截图(如你所提到的),但加入这行来Start-Job
ScriptBlock
的顶部导致它从工作中以及工作:
[Reflection.Assembly]::LoadWithPartialName("System.Drawing")
或者,正如上面现在depracated:
[System.Reflection.Assembly]::LoadFrom("C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Drawing.dll")
或者
Add-Type "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Drawing.dll"
请注意,从调度任务运行时我没有测试过。
回答:
不使用函数。只需在脚本块中写入你的功能代码,如下所示:
Start-Job -Name LogikWebserverWatch { Add-Type -AssemblyName "System.Drawing"
[int]$PrtScrnWidth = (gwmi Win32_VideoController).CurrentHorizontalResolution
[int]$PrtScrnHeight = (gwmi Win32_VideoController).CurrentVerticalResolution
$bounds = [Drawing.Rectangle]::FromLTRB(0, 0, $PrtScrnWidth, $PrtScrnHeight)
$bmp = New-Object Drawing.Bitmap $bounds.width, $bounds.height
$graphics = [Drawing.Graphics]::FromImage($bmp)
$graphics.CopyFromScreen($bounds.Location, [Drawing.Point]::Empty, $bounds.size)
$bmp.Save($outfile)
$graphics.Dispose()
$bmp.Dispose()
}
while ((Get-Process LogikWebserver).Responding) {sleep -Milliseconds 50}
if (!(Get-Process LogikWebserver).Responding) {
Try{
$utf8 = New-Object System.Text.utf8encoding
$datetime = (get-date).ToString('yyyyMMdd-HHmmss')
Take-Screenshot -outfile C:\Install\LogikWebserverErrorReporting\Screenshot-$datetime.png
# some more code [...]
} Catch { some more code [...] }
}
以上是 为什么我的屏幕截图功能不能作为工作 的全部内容, 来源链接: utcz.com/qa/266446.html