如何从远程计算机上运行的脚本中将退出代码返回到本地计算机上的变量?

时间:2013-09-03 11:40:38

标签: powershell-v2.0

我正在尝试使用Powershell 2.0从本地计算机上的Powershell窗口在远程计算机上执行Powershell脚本。我的目标是将远程计算机上的脚本的退出代码存储到本地计算机上的变量,无论是在本地脚本还是仅在本地Powershell窗口中。目前我回来的是一条错误消息,说明以下内容。 。

Cannot invoke pipeline because run space is not in the Opened state. Current state of run space is Closed. + CategoryInfo: OperationStopped: Microsoft.Power...tHelperRunspace:ExecutionCmdletHelperRunspace) [], InvalidRunspaceStateException + FullyQualifiedErrorID : RemotePipeLineExecutionFailed

我的情况是这样的。 。 。我试图从远程计算机上的脚本返回本地计算机上的变量的退出代码。这里实际涉及两个脚本,它们都在远程计算机上和同一文件夹中。第一个脚本称为“VerifyBatchExistence.ps1”。该文件将一个名为“Batch.ps1”的批处理文件作为输入,该文件表示如果“Batch.ps1”不存在则输出的退出代码,另一个表示“Batch.ps1”所需参数数量的整数,以及“Batch.ps1”作为输入所需的变量字符串。在“Batch.ps1”中,我有一段代码,当我的一个传入参数无效时,我希望这些代码被触发。 。

exit 931

在“VerifyBatchExistence.ps1”中,我有以下代码。 。

Powershell - File .\Batch.ps1 BATCHPARAM1 BATCHPARAM2

$Code1 = $LASTEXITCODE

$Host.SetShouldExit($Code1)

exit

在我的本地计算机上,我执行了以下操作。 。

$Remote=New-PSSession -ComputerName 7.7.7.7 -Credential $cred

Invoke-Command -Session $Remote -ScriptBlock {$Code1=.\VerifyBatchExistence.ps1 7777 2 .\Batch.ps1 NAME1 NAME2}

$Code2=Invoke-Command -Session $Remote -ScriptBlock {$Code1}
$Code2

在此之后,我收到上述错误。知道我做错了什么,或者我如何从一台脚本消耗并运行第二个脚本的远程机器上将退出代码返回到本地机器上的变量?任何答案都将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

我这样做:

invoke-command -session $Remote -scriptblock { mycommand }
$remotelastexitcode = invoke-command -session $Remote -ScriptBlock { $lastexitcode }

if ( $remotelastexitcode -ne 0 )
{
    "$remotelastexitcode"
    exit 1
}