Имя группы ресурсов не может быть пустым? - PullRequest
0 голосов
/ 06 июня 2019

У меня есть скрипт, который предполагает преобразование неуправляемых дисков 400 vms в управляемые диски. Наша инфраструктура Azure построена таким образом, что соглашения об именах почти совпадают с именами виртуальной машины или схоже с тем, что, вероятно, совпадают, например, если у меня есть vm с именем 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 для остановки всех vms в 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 Ответ

1 голос
/ 07 июня 2019

Для вас ошибка показывает сообщение ясно, что группа ресурсов пуста.И это плохой способ получить группу ресурсов, в которую входит виртуальная машина. Если имя группы полностью отличается от имени виртуальной машины, тогда вы не можете получить имя группы.

Я предлагаю вам воспользоваться способом ниже,он получает имя группы из информации виртуальной машины:

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