如何从PowerShell的$skus变量哈希表中提取所需数据?
提取Azure VM SKU Capabilities内部数据的方法
方法1:用计算属性提取指定字段
如果只需要特定的Capabilities(比如vCPUs、MaxResourceVolumeMB),可以在Select-Object中定义计算属性,通过匹配name字段定位目标哈希表并取出value:
$skus | Select-Object name, @{Name='vCPUs'; Expression={ ($_.capabilities | Where-Object name -eq 'vCPUs').value } }, @{Name='MaxResourceVolumeMB'; Expression={ ($_.capabilities | Where-Object name -eq 'MaxResourceVolumeMB').value } }, @{Name='OSVhdSizeMB'; Expression={ ($_.capabilities | Where-Object name -eq 'OSVhdSizeMB').value } }
方法2:展开所有Capabilities为对象属性
要把所有Capabilities都转化为对象的直接属性,可以通过遍历合并键值对实现:
$skus | ForEach-Object { # 将Capabilities数组转为键值对哈希表 $capMap = $_.capabilities | Group-Object name -AsHashTable -AsString # 合并原SKU属性与Capabilities字段 [PSCustomObject]@{ name = $_.name resourceType = $_.resourceType family = $_.family size = $_.size # 按需添加Capabilities字段 vCPUs = $capMap['vCPUs'].value MaxResourceVolumeMB = $capMap['MaxResourceVolumeMB'].value MemoryPreservingMaintenanceSupported = $capMap['MemoryPreservingMaintenanceSupported'].value } }
更灵活的批量展开方式:
$skus | ForEach-Object { # 先保留基础属性 $skuObj = $_ | Select-Object name, resourceType, family, size, tier # 逐个添加Capabilities作为对象属性 $_.capabilities | ForEach-Object { $skuObj | Add-Member -MemberType NoteProperty -Name $_.name -Value $_.value -Force } $skuObj }
方法3:定位单个SKU提取特定值
如果只需要针对某个SKU提取指定Capabilities值,直接通过过滤定位后取值:
# 提取Standard_M8-4ms的vCPUs数值 ($skus | Where-Object name -eq 'Standard_M8-4ms').capabilities | Where-Object name -eq 'vCPUs' | Select-Object -ExpandProperty value
内容的提问来源于stack exchange,提问作者meatpack
相关产品推荐
相关产品推荐

