Azure Powershell脚本

时间:2018-10-31 13:47:26

标签: azure powershell

我写了一个PowerShell脚本来打印带有非托管磁盘的VM名称,但是这给了我一个错误。感谢对此的任何帮助-

$location=Read-Host -Prompt 'Input location for VMs'
$azuresubscription=Read-Host -Prompt 'Input Subscription Id'

$rmvms=Get-AzurermVM
# Add info about VM's from the Resource Manager to the array 
foreach ($vm in $rmvms) 
{     
    # Get status (does not seem to be a property of $vm, so need to call Get-AzurevmVM for each rmVM) 
    $vmstatus = Get-AzurermVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -Status  | where Location -like $location

    # Add values to the array: 
    $vmarray += New-Object PSObject -Property @{` 
        # Subscription=$Subscription.SubscriptionName; ` 
        Subscription=$azuresubscription.SubscriptionName; `
        AzureMode="Resource_Manager"; ` 
        Name=$vm.Name; PowerState=(get-culture).TextInfo.ToTitleCase(($vmstatus.statuses)[1].code.split("/")[1]); ` 
        Size=$vm.HardwareProfile.VirtualMachineSize} 
}

foreach ($vm in $vmarray)
{
    $vmdiskstatus = (Get-AzurermVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName).StorageProfile.OsDisk.ManagedDisk
    if (!$vmdiskstatus) {Write-Host $vm.Name}
}

错误消息:

  

($ vmarray产生Null数组)-

     

无法索引为空数组。

     

预期输出-由于正在运行,$ vmarray应该具有一个VM   eastus中的实例(这就是我用作$ location的值)

1 个答案:

答案 0 :(得分:0)

根据Victor Silva的要求添加我的评论作为答案,这是这样的:

进入循环以向其添加对象之前,您需要将$vmarray定义为数组。 然后,在该循环之后,foreach ($vm in $vmarray) 确实有一个数组可索引到其中,即使为空:

$location=Read-Host -Prompt 'Input location for VMs'
$azuresubscription=Read-Host -Prompt 'Input Subscription Id'

$rmvms=Get-AzurermVM

###################################################
# create an array variable to collect the result(s)
###################################################
$vmarray = @()

# Add info about VM's from the Resource Manager to the array 
foreach ($vm in $rmvms) 
{     
    # rest of your code
}