1

我的问题涉及 PowerCLI 的特定模块,但我希望它涉及到 PS Jobs 的更普遍的问题。我正在加载作业脚本块中的命令所需的模块,但无法识别这些命令,就好像未加载该模块一样。

我在start-job之前加载了VMware powerCLI modele,如下,但是scriptblock中的代码无法识别模块已加载,因此无法识别get-vm命令。

导入模块 VMWare.VimAutomation.core Connect-VIServer -server VIServer01 $NewJob = start-job -scriptblock {Get-VM -server VIServer01 | 选择名称,@{N="Cluster";E={Get-Cluster -VM $ }},@{N="ESXHost";E={Get-VMHost -VM $ }}}

我熟悉将参数从脚本传递到作业脚本块的需要和方法,但是如何让它识别模块已加载?另外,如果我从脚本块中加载模块,我会遇到堆栈溢出失败,我猜是由于模块的重复循环加载。

4

1 回答 1

1

启动 PS 作业就像启动一个新的 PS 控制台实例。它不包含任何变量或从创建作业的脚本中加载的模块/管理单元。所以我确实必须从作业脚本块中加载管理单元并将变量正确传递到脚本块中)。但是通过添加 -RunAs32 我能够防止 PS 中的堆栈溢出错误。我不知道为什么这可以解决该错误。

foreach ($VIServer in $VIServers){
    $NewJob = start-job {} -scriptblock { param([string]$VIServer)
          Import-Module VMWare.VimAutomation.core
          Connect-VIServer $VIServer
          Get-VM -server $VIServer | Select Name, @(N="vCenter";E={$VIServer}},`
                                  @{N="Cluster";E={Get-Cluster -VM $_}}, @{N="ESXHost";E={Get-VMHost -VM $_}}} -RunAs32 -ArgumentList $VIserver
于 2015-10-05T13:05:30.053 回答