我在下面有一个命令连接到远程计算机并执行操作:
$myfile = [System.IO.File]::ReadAllBytes("C:\temp\test.txt")
$session = $null
$session = New-PSSession -computerName $server -credential $user
Invoke-Command -Session $session -ArgumentList $myfile -ScriptBlock {[System.IO.File]::WriteAllBytes("C:\temp\test.txt", $args)}
但是我很难获得流程的状态,我如何获得Invoke-Command
的状态?
我尝试过如下,但它不起作用:
try {
Invoke-Command -Session $session -ArgumentList $myfile -ScriptBlock {[System.IO.File]::WriteAllBytes("C:\temp\abc\Bank_Wiz_copy2.txt", $args)}
$Stat = "Success"
}
catch {
$Stat = "Failed"
}
答案 0 :(得分:3)
有很多方法。但是在PowerShell中Invoke-Command
背后的想法是指定的脚本块以与本地脚本相同的方式执行。所以,你可以这样做:
try { Invoke-Command -Session $session -ScriptBlock { Write-Error "err" } -ErrorAction Stop } catch { Write-Host "!" }
由于Write-Error
为ErrorAction
, Stop
会生成例外。通过会话传输异常,然后就可以捕获它。