我需要从Invoke-Command输出变量,但打印时显示为空,以下是示例代码:
$ServiceName = "Service"
Invoke-Command -ScriptBlock {
try {
iisreset
$BodyContent += "Server: <b>$server</b> IIS reset completed<br>"
}
catch {
$BodyContent += "Server: <b>$server</b> is Failed to restart IIS<br>"
$ErrorStat = 1
}
try {
Stop-Service -DisplayName $using:ServiceName
$BodyContent += "Server: <b>$server</b> is successfully Stopped $using:ServiceName<br>"
}
catch {
$BodyContent += "Server: <b>$server</b> is failed to Stop $using:ServiceName<br>"
$ErrorStat = 1
}
try {
Start-Service -DisplayName $using:ServiceName
$BodyContent += "Server: <b>$server</b> is successfully Started $using:ServiceName<br>"
}
catch {
$BodyContent += "Server: <b>$server</b> is failed to Start $using:ServiceName<br>"
$ErrorStat = 1
}
} -ComputerName $server -Credential $user -ErrorAction Stop在这里,我想捕获$BodyContent和$ErrorStat
发布于 2018-03-19 19:22:39
Invoke-Command将打印到管道末尾的内容返回给您。如果你想返回一个变量,你应该像这样Return <variable>:
$ret = Invoke-Command -ScriptBlock { $var="test string"; return $var; }其中$ret现在包含值test string。
当你想要返回多个变量时,你可以将它们连接成一个变量,例如:
$str1 = "test"
$str2 = "123"
$combinedObjs = New-Object PSObject -Property @{1 = $str1; 2 = $str2}现在,您可以将它们组合在一起
$ret = Invoke-Command -ScriptBlock {
$str1 = "test";
$str2 = "123";
$combinedObjs = @{val1 = $str1; val2 = $str2};
Return $combinedObjs;
}现在$ret包含
Name Value
---- -----
val1 test
val2 123您可以通过调用$ret.val1或$ret.val2来访问它们
发布于 2018-03-19 19:21:37
在给定scriptblock的末尾添加一些输出,例如
@{ BodyContent = $BodyContent
ErrorStat = $ErrorStat
}如果你使用例如
$result = Invoke-Command -ScriptBlock {
### original script block body here
@{ BodyContent = $BodyContent
ErrorStat = $ErrorStat
}
} -ComputerName $server -Credential $user -ErrorAction Stop然后你可以检查
$result.BodyContent
$result.ErrorStathttps://stackoverflow.com/questions/49361404
复制相似问题