我在一台机器上执行了一系列“任务”,这些任务在powershell脚本块中定义,如下所示(它们实际上是作为包含脚本块的更复杂的哈希数组传入的)。
$Tasks = @(
{ hostname.exe },
{ Get-PowerShellFunction },
{ (GWMI Win32_OperatingSystem).Version -imatch '6.1' },
{ Get-PowerShellFunction },
{ cmd /c "smth && exit 45" }
)
这些任务是使用$Tasks[$i].Invoke()
调用的,但已经意识到我无法报告任务的状态,因为似乎没有可靠的方法来检查和使用$?
和/或{{1在$LASTEXITCODE
我希望能够做这些事情。
.Invoke()
),如果其中的代码是PowerShell代码作为布尔值($?
或$True
)。$False
),如果其中的代码是Int32的外部命令(0表示成功,0表示失败)。这可能吗?
答案 0 :(得分:4)
从单个scriptblock的角度来看:
$sb = { hostname.exe }
$result = @{}
$result.out = & $sb
$result.status = $?
$result.exitcode = $LASTEXITCODE
如果您然后转出$results
以检查属性:
PS C:\> $results
Name Value
---- -----
exitcode 0
out POSHVM7
status True
循环遍历$tasks
中的脚本块,您可能只会附加一系列结果:
$results = @()
$Tasks | % {
$result = @{}
$result.out = & $_
$result.status = $?
$result.exitcode = $LASTEXITCODE
$results += $result
}