gpt4 book ai didi

powershell - 使用 powershell 和 schtasks try catch 失败

转载 作者:行者123 更新时间:2023-12-03 11:23:59 34 4
gpt4 key购买 nike

我是 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 ""
}
}

我验证了 'Add-Content -path "\servername!incoming\Deploy\log.txt"-value "test"' 有效,所以就像我说的我很确定它只是没有抛出异常。

最佳答案

为了让 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
}

关于powershell - 使用 powershell 和 schtasks try catch 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9216553/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com