资源组名称不能为Null?

时间:2019-06-06 14:08:36

标签: azure azure-powershell

我有一个脚本,该脚本可以将400 vms的非托管磁盘转换为托管磁盘。我们的azure基础架构的构建方式使命名约定几乎与虚拟机的名称匹配,或者几乎相同。例如,如果我有一个名为E1PrGrp19VFe01的虚拟机,它位于E1PrGrp19Rg资源组中,因此我在下面的语句中使用将RG的名称存储在如下所示的变量中:

$VmCode = Read-Host "Partner/VM Code" (Will give a name of the VM)

$Rg = Get-AzureRmResourceGroup | Where-Object {$_.ResourceGroupName -like "*$VmCode*"} (this will store the name of the resource group)

问题是当我尝试执行$ Rg时我什么都没得到,在此之后,当我运行for循环以停止RG中的所有虚拟机时,出现以下错误:

Stop-AzVM : Cannot validate argument on parameter 'ResourceGroupName'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.
At line:1 char:35
+ Stop-AzureRmVM -ResourceGroupName $Rg.ResourceGroupName -Name $Vm.Nam ...
+                                   ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidData: (:) [Stop-AzVM], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Azure.Commands.Compute.StopAzureVMCommand

我不确定我在做什么错,有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

对于您来说,该错误清楚地显示了资源组为空的消息。这是获取虚拟机所在资源组的一种不好的方法。如果组名与虚拟机名称完全不同,则您将无法获取该组名。

我建议您使用以下方式,它从VM的信息中获取组名:

$Rg = (Get-AzVM | Where-Object {$_.Name -match "$VmCode"}).ResourceGroupName