如何在 PowerShell 工作流中运行 Invoke-Command?


要在 PowerShell 工作流中运行 Invoke-Command,我们需要使用 InlineScript 块,因为 Invoke-Command 不直接在工作流中受支持。以下示例未使用 InlineScript 块,我们收到一个错误。

示例

Workflow TestInvokeCommand{
   Invoke-Command -ComputerName LabMachine2k16 -ScriptBlock{
      Get-Service WINRM
   }
}

输出 −

At line:2 char:5
+    Invoke-Command -ComputerName LabMachine2k16 -ScriptBlock{
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Cannot call the 'Invoke-Command' command. Other commands from this module have been packaged as workflow activities, but this
command was specifically excluded. This is likely because the command requires an interactive Windows PowerShell session, or has
behavior not suited for workflows. To run this command anyway, place it within an inline-script (InlineScript { Invoke-Command })
where it will be invoked in isolation.
   + CategoryInfo : ParserError: (:) [], ParseException
   + FullyQualifiedErrorId : CommandActivityExcluded

上述错误表明 Invoke-Command 无法直接与 PowerShell 一起使用,我们需要在 InlineScript 块中使用它,如下所示。

Workflow TestInvokeCommand{
   InlineScript{
      Invoke-Command -ComputerName LabMachine2k16 -ScriptBlock{
         Get-Service WINRM
      }
   }
}

TestInvokeCommand

要在 InlineScript 块中的脚本块中使用外部变量,我们需要使用 $Using:VariableName。例如,

示例

Workflow TestInvokeCommand{
$server = "Labmachine2k16"
   InlineScript{
       Invoke-Command -ComputerName $using:Server -ScriptBlock{
           Get-Service WINRM
       }
   }
}

TestInvokeCommand

要存储输出变量,

输出

Workflow TestInvokeCommand{
   $server = "Labmachine2k16"
   $Status =  InlineScript{
      Invoke-Command -ComputerName $using:Server -ScriptBlock{
         return( Get-Service WINRM).Status
      }
   }
   Write-Output "WinRM Status: $status"
}
 
TestInvokeCommand

更新时间:19-2 月-2021

1K+ 浏览量

开启您的职业

完成课程后获取认证

开始
广告