将参数作为作业调用Invoke-Command

时间:2018-06-01 11:50:44

标签: powershell

我可以毫无问题地运行以下命令:

Invoke-Command -ScriptBlock {
    Param($rgName,$VMname)
    Get-AzureRmVM -Name $VMname -ResourceGroupName $rgName
} -ArgumentList $rgname,$vmname

但我真正需要的是能够将命令作为一项工作运行,所以我尝试了以下内容:

Invoke-Command -ScriptBlock {
    Param($rgName,$VMname)
    Get-AzureRmVM -Name $VMname -ResourceGroupName $rgName
} -ArgumentList $rgname,$vmname -AsJob

我收到以下错误:

Invoke-Command : Parameter set cannot be resolved using the specified named
parameters.
At line:1 char:1
+ Invoke-Command -ScriptBlock { param($rgName,$VMname) Get-AzureRmVM -N ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-Command], ParameterBindingException
    + FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.PowerShell.Commands.InvokeCommandCommand

我还尝试使用Start-Job来运行命令,但我也收到了错误。

1 个答案:

答案 0 :(得分:1)

您必须将参数列表作为数组传递

[Array]$ArgumentList = @('rg','vm')

[ScriptBlock]$ScriptBlock = {
  Param(
    [string]$rgName,
    [string]$VMname
  )
  Get-AzureRmVM -Name $VMname -ResourceGroupName $rgName   
}

$nj = Invoke-Command -ScriptBlock $ScriptBlock -ArgumentList $ArgumentList -ComputerName $env:COMPUTERNAME -Credential (Get-Credential) -JobName 'NewJobName' |Wait-Job

有趣的是,我发现我必须指定-ComputerName [-Credntial]才能使其工作 - 在上面修改

获取作业结果如下......

$nj | Receive-Job