Get-AzureRmVM 需要名称参数吗?

Get-AzureRmVM requires a name parameter?

如果我 运行 来自 Azure 云的这个 powershell 命令 shell 它执行得很好,并为我提供了指定资源组中所有 VM 的列表:

Get-AzureRmVM -ResourceGroupName "MyGroup" -Status

如果我从自动化帐户在 运行书中执行它,我会收到错误消息;

Get-AzureRmVM : Cannot process command because of one or more missing mandatory parameters: Name. At TestAutomationAccount-Job-StartVM:20 char:20 + + CategoryInfo : InvalidArgument: (:) [Get-AzureRmVM], ParameterBindingException + FullyQualifiedErrorId : MissingMandatoryParameter,Microsoft.Azure.Commands.Compute.GetAzureVMCommand

我正在尝试获取资源组中的 VM 列表,但无法弄清楚为什么会出现明显的行为差异。

当 运行 在 Azure Automation runbook 中时,我能够为 Get-AzureRmVM cmdlet 重现相同的异常。

此问题的根本原因仅仅是由于 Azure 自动化环境和 Azure 云 Shell 中的 Get-AzureRmVM cmdlet 版本不匹配(电源Shell) 环境.

Get-AzureRmVM cmdlet 在 AzureRm.Compute PowerShell 模块下。

当我使用下面的 cmdlet 在 Azure 自动化环境中获取 AzureRm.Compute 的版本时。

Get-Module -ListAvailable -Name AzureRm.Compute -Refresh

我得到的版本是 1.2.1,用于 Azure 自动化环境,如下所示。

当我使用以下 cmdlet 在 Azure Cloud Shell (PowerShell) 会话中获取 AzureRm.Compute 的版本时。

Get-AzureRmCommand Get-AzureRmVM

我得到的版本是3.4.1 for Azure Cloud Shell (PowerShell) 环境如下图

因此我相信 AzureRm.Compute 模块版本在这两个环境中的不匹配解释了 Get-AzureRmVM cmdlet 的不同行为和参数期望。

希望这对您有所帮助。

附录: 如果您想获得与在 Azure 云 Shell 环境中相同的 Get-AzureRmVM cmdlet 体验,您可以转到 Azure 自动化帐户中的模块部分,select AzureRm.Compute 模块并将其更新为与 Azure Cloud Shell 环境相同的版本。