【问题标题】:Invoke-Command with parameters as a job带参数的调用命令作为作业
【发布时间】:2018-11-11 13:24:17
【问题描述】:

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

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

我收到以下错误:

调用命令:无法使用指定的命名解析参数集 参数。 在行:1 字符:1 + 调用命令 -ScriptBlock { param($rgName,$VMname) Get-AzureRmVM -N ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Invoke-Command], ParameterBindingException + FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.PowerShell.Commands.InvokeCommandCommand

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

【问题讨论】:

    标签: powershell


    【解决方案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 [-Credential] 才能让它工作 - 在上面修改

    获取作业结果如下...

    $nj | Receive-Job 
    

    【讨论】:

      猜你喜欢
      • 2019-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-23
      • 2012-02-05
      • 2012-10-26
      • 2023-03-11
      相关资源
      最近更新 更多