首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >附加到invoke-command中的变量

附加到invoke-command中的变量
EN

Stack Overflow用户
提问于 2018-03-19 19:02:07
回答 2查看 1K关注 0票数 0

我需要从Invoke-Command输出变量,但打印时显示为空,以下是示例代码:

代码语言:javascript
复制
$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

EN

回答 2

Stack Overflow用户

发布于 2018-03-19 19:22:39

Invoke-Command将打印到管道末尾的内容返回给您。如果你想返回一个变量,你应该像这样Return <variable>

代码语言:javascript
复制
$ret = Invoke-Command -ScriptBlock { $var="test string"; return $var; }

其中$ret现在包含值test string

当你想要返回多个变量时,你可以将它们连接成一个变量,例如:

代码语言:javascript
复制
$str1 = "test"
$str2 = "123"
$combinedObjs = New-Object PSObject -Property @{1 = $str1; 2 = $str2}

现在,您可以将它们组合在一起

代码语言:javascript
复制
$ret = Invoke-Command -ScriptBlock { 
  $str1 = "test";
  $str2 = "123";
  $combinedObjs =  @{val1 = $str1; val2 = $str2};
  Return $combinedObjs;
}

现在$ret包含

代码语言:javascript
复制
Name                           Value
----                           -----
val1                           test
val2                           123

您可以通过调用$ret.val1$ret.val2来访问它们

票数 1
EN

Stack Overflow用户

发布于 2018-03-19 19:21:37

在给定scriptblock的末尾添加一些输出,例如

代码语言:javascript
复制
    @{  BodyContent = $BodyContent
        ErrorStat   = $ErrorStat
    }

如果你使用例如

代码语言:javascript
复制
$result = Invoke-Command -ScriptBlock { 

    ###  original script block body here

    @{  BodyContent = $BodyContent
        ErrorStat   = $ErrorStat
    }
}  -ComputerName $server -Credential $user -ErrorAction Stop

然后你可以检查

代码语言:javascript
复制
$result.BodyContent
$result.ErrorStat
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49361404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档