2017-08-09 231 views
1

下面我有一个命令连接到远程计算机,并做动作:获取调用命令的状态

$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

为了让你的try catch工作,你可能需要在你的'Invoke-Command'中添加'-ErrorAction Stop'。 –

回答

3

有很多方法。但在PowerShell中,Invoke-Command背后的想法是指定的脚本块以与本地脚本相同的方式执行。所以,你可以做这样的:

try { Invoke-Command -Session $session -ScriptBlock { Write-Error "err" } -ErrorAction Stop } catch { Write-Host "!" } 

Write-Error产生异常,因为的ErrorActionStop。通过会话传输异常,然后您可以捕获它。

+0

上面是它,你需要把你的错误'报告'在scriptblock内,它会“冒泡”到你的try/catch。 – Paolis

+0

谢谢,它的工作 – sunny