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

PowerShell中动态循环处理多值键哈希表生成Azure报告CSV

需求完全可行,以下是PowerShell实现方案

首先,先处理你那个便于用户维护的变量文件,把它解析成可遍历的结构:

  1. 读取并解析变量文件
# 替换为你的变量文件实际路径
$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
}
  1. 遍历执行查询并生成目标格式输出
# 存储最终输出行的数组
$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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:12:31