Dev*_*ate 7 powershell powershell-2.0
我是PowerShell的新手,但我正在尝试在ps中输出一些简单的日志记录来创建计划任务.我的代码如下.当你遇到schtasks错误时,它似乎不会抛出异常.另一个SO问题用fileIO动作提到了这一点,并建议做"-ea stop",但这不适用于schtasks.
#create log file
$log = "\\servername\!incoming\Deploy\log.txt"
Clear-Content $log
#get input file list
$txtServerList = Gc "\\servername\!incoming\Deploy\serverlist.txt"
#loop through each server
ForEach($strServername In $txtServerList)
{
try
{
#install task from XML template
schtasks /create /s $strServername /tn InventoryServer /XML "\\servername\!incoming\Deploy\TaskTemplate.xml"
#run the task immediately
schtasks /run /s $strServername /tn InventoryServer
}
catch [exception]
{
Add-Content -path $log -value $strServername
#Add-Content -path $log -value $_.Exception
#Add-Content -path $log -value $_.Exception.Message
#Add-Content -path $log -value ""
}
}
Run Code Online (Sandbox Code Playgroud)
我验证了'Add-Content -path'\ servername!incoming\Deploy\log.txt"-value"test"'有效,所以我说我很确定它不会抛出异常.
Jef*_*cks 11
为了使Try/Catch能够工作,PowerShell需要一个终止异常.在Try块中运行cmdlet时,可以使用-erroraction Stop(或使用-ea别名)来实现.正如您已经意识到SCHTASKS.EXE无法做到这一点.如果没有终止异常,Catch块中的代码将永远不会运行.
你要做的就是走出方框,可以说,并独立检查Schtasks是否失败.如果是这样,他们可以在Try块中使用Write-Error.
您可能尝试的一件事是使用Start-Process并查看退出代码.除0以外的任何内容都应该是错误的.
Try {
get-date
$p=Start-Process schtasks.exe -ArgumentList "/Create foo" -wait -passthru
if ($p.exitcode -ne 0) {
write-error "I failed with error $($p.exitcode)"
}
}
Catch {
"oops"
$_.Exception
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4963 次 |
| 最近记录: |