为什么我的屏幕截图功能不能作为工作

我有一个功能内的作业,它需要一个屏幕截图。脚本本身由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-JobScriptBlock的顶部导致它从工作中以及工作:

[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

回到顶部