PowerShell中动态循环处理多值键哈希表生成Azure报告CSV
需求完全可行,以下是PowerShell实现方案
首先,先处理你那个便于用户维护的变量文件,把它解析成可遍历的结构:
- 读取并解析变量文件
# 替换为你的变量文件实际路径 $varFileContent = Get-Content -Path "./app-subs.txt" # 将文件内容解析为应用名对应订阅ID数组的哈希表 $appSubMap = @{} foreach ($line in $varFileContent) { if ([string]::IsNullOrWhiteSpace($line)) { continue } # 拆分应用名和订阅ID段 $splitLine = $line -split ":", 2 | ForEach-Object { $_.Trim() } $appName = $splitLine[0] # 清理订阅ID的引号并拆分为数组 $subIds = $splitLine[1] -replace '"', '' -split "," | ForEach-Object { $_.Trim() } $appSubMap[$appName] = $subIds }
- 遍历执行查询并生成目标格式输出
# 存储最终输出行的数组 $reportLines = @() foreach ($appName in $appSubMap.Keys) { foreach ($subId in $appSubMap[$appName]) { # 切换到目标Azure订阅 Set-AzContext -Subscription $subId | Out-Null # 执行Resource Graph KQL查询,替换为你的实际查询语句 $queryResult = Search-AzGraph -Query @" # 示例KQL,根据你的需求修改 Resources | summarize var1 = count(), var2 = avg(tostring(properties.hardwareProfile.vmSize)) by subscriptionId | where subscriptionId == "$subId" "@ # 从查询结果提取var1和var2,根据你的查询结构调整取值逻辑 $var1 = $queryResult.var1 $var2 = $queryResult.var2 # 生成要求格式的行 $reportLine = "$appName;$subId;$var1;$var2" $reportLines += $reportLine } } # 导出为CSV文件(分号分隔适配Excel导入) $reportLines | Out-File -Path "./azure-report.csv" -Encoding utf8
关键说明
- 解析逻辑完美保留了你想要的用户友好格式,用户维护变量文件时只需按
应用名: "订阅ID1","订阅ID2"的格式添加即可 - 每个订阅ID单独执行查询,确保
$var1和$var2是对应订阅的查询结果 - 最终导出的文件用分号分隔,直接导入Excel时可自动识别列
内容的提问来源于stack exchange,提问作者lubierzca
相关产品推荐
相关产品推荐

