2013-09-03 2 views
2

Я пытаюсь выполнить сценарий Powershell на удаленном компьютере из окна Powershell на моем локальном компьютере с помощью Powershell 2.0. Моя цель - сохранить код выхода из сценария на удаленном компьютере в переменной на моем локальном компьютере, будь то локальный скрипт или только локальное окно 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 

После этого, я получаю ошибку, указанную выше. Любая идея, что я делаю неправильно, или как я могу вернуть код выхода на переменную на моем локальном компьютере с удаленной машины, на которой есть сценарий, который использует и запускает второй скрипт? Любой ответ на это был бы оценен. Благодарю.

ответ

0

Я делаю это так:

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

if ($remotelastexitcode -ne 0) 
{ 
    "$remotelastexitcode" 
    exit 1 
} 
Смежные вопросы