You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell条件语句替换Azure VM状态显示值?

修改Azure VM状态显示的PowerShell脚本方案

要实现将Azure VM的原始状态映射为指定的显示值,只需在脚本中添加状态转换逻辑,替换原有的直接赋值即可。以下是修改后的完整脚本:

function Get-vmstatus {
    # Sign into Azure Portal
    Connect-AzAccount
    # Fetch the Virtual Machines from the subscription
    $azureVMDetails = Get-AzVM
    # Fetch the NIC details from the subscription
    $azureNICDetails = Get-AzNetworkInterface | Where-Object { $_.VirtualMachine -NE $null }

    #Fetching Virtual Machine Details
    $virtual_machine_object = @()
      
    #Iterating over the NIC Interfaces under the subscription
    foreach ($azureNICDetail in $azureNICDetails) { 
        $azureVMDetail = $azureVMDetails | Where-Object -Property Id -eq $azureNICDetail.VirtualMachine.id
        $vm_status = Get-AzVM -ResourceGroupName $azureVMDetail.resourcegroupname -Name $azureVMDetail.name -Status
        $vm_tags = ($azureVMDetail.Tags.values) -join ';'
        $vmsize = Get-AzVMSize -VMName $azureVMDetail.Name -ResourceGroupName $azureVMDetail.ResourceGroupName | Where-Object { $_.Name -eq $azureVMDetail.HardwareProfile.VmSize }
        $OsDisksize = $azureVMDetail.StorageProfile.OsDisk.DiskSizeGB
        #Fetching the private IP
        $private_ip_address = ($azureNICDetail.IpConfigurations | Select-Object -ExpandProperty PrivateIpAddress) -Join ';'
           
        # 状态转换逻辑:将原始状态映射为指定显示值
        $displayStatus = switch ($vm_status.Statuses[1].DisplayStatus) {
            "VM running" { "Active" }
            "VM stopped" { "Offline" }
            "VM deallocated" { "Offline" }
            default { $_ } # 保留其他未定义的状态值
        }

        #VM Details export
        $virtual_machine_object_temp = New-Object PSObject 
        $virtual_machine_object_temp | Add-Member -MemberType NoteProperty -Name "Name" -Value $azureVMDetail.Name
        $virtual_machine_object_temp | Add-Member -MemberType NoteProperty -Name "VCPUs" -Value $vmsize.NumberOfCores
        $virtual_machine_object_temp | Add-Member -MemberType NoteProperty -Name "Status" -Value $displayStatus # 使用转换后的状态

        $virtual_machine_object_temp | Add-Member -MemberType NoteProperty -Name "Memory" -Value $vmsize.MemoryInMB
        $virtual_machine_object_temp | Add-Member -MemberType NoteProperty -Name "Disk" -Value $OsDisksize   
        $virtual_machine_object_temp | Add-Member -MemberType NoteProperty -Name "Comments" -Value $vm_tags
            
        $virtual_machine_object += $virtual_machine_object_temp
    }

    $virtual_machine_object | Export-Csv "C:\Users\mouj\Desktop\Inventory\Final Scripts\VM_details_$(Get-Date -f dd.MM.yyyy).csv" -NoTypeInformation -Force
}

关键修改说明

  • 新增状态转换逻辑块:使用switch语句匹配原始状态值,精准完成状态映射,同时保留default分支处理未定义的特殊状态,避免遗漏异常情况。
  • 替换状态赋值:将原脚本中直接使用原始状态的部分,改为使用转换后的$displayStatus变量,确保输出CSV中的状态字段完全符合需求。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 02:54:24