如何用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
相关产品推荐
相关产品推荐

