我可以毫无问题地运行以下命令:
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
来运行命令,但我也收到了错误。
答案 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