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

如何在PowerShell foreach循环中关联带共同前缀的哈希表键值对

按共同前缀分组处理PowerShell哈希表中的密钥对

首先可以优化你的密钥获取代码,减少不必要的Azure API调用:

$keyvaultName = 'KeyVaultName'
# 一次性获取带明文值的密钥,无需重复调用Get-AzKeyVaultSecret
$secrets = Get-AzKeyVaultSecret -VaultName $keyvaultName -AsPlainText

$keys = @{}
foreach ($secret in $secrets) {
    $keys[$secret.Name] = $secret.SecretValueText
}

接下来是核心的分组处理逻辑,这里提供两种可行方案:

方案一:提取唯一前缀后遍历处理

  1. 先从哈希表的所有键中提取出唯一的前缀:
$uniquePrefixes = $keys.Keys | ForEach-Object {
    # 按最后一个'-'拆分键名,获取前缀部分
    $parts = $_ -split '-', 2
    if ($parts.Count -eq 2) { $parts[0] }
} | Select-Object -Unique
  1. 遍历每个前缀,关联对应的三个密钥值并执行任务:
foreach ($prefix in $uniquePrefixes) {
    # 定义当前前缀对应的三个密钥键名
    $appIdKey = "$prefix-appid"
    $idKey = "$prefix-id"
    $secretKey = "$prefix-secret"

    # 确保三个密钥都存在,避免执行任务时出错
    if ($keys.ContainsKey($appIdKey) -and $keys.ContainsKey($idKey) -and $keys.ContainsKey($secretKey)) {
        # 获取对应的值
        $appId = $keys[$appIdKey]
        $id = $keys[$idKey]
        $secret = $keys[$secretKey]

        # 替换为你的实际任务代码
        Write-Host "正在处理前缀 [$prefix] 的密钥组:"
        Write-Host "  AppID: $appId"
        Write-Host "  ID: $id"
        Write-Host "  Secret: $secret"
    }
    else {
        Write-Warning "前缀 [$prefix] 缺少必要密钥(appid/id/secret),跳过处理"
    }
}

方案二:用Group-Object直接分组

直接通过Group-Object按前缀对密钥键进行分组,再遍历分组处理:

# 按前缀分组所有密钥键
$keyGroups = $keys.Keys | Group-Object {
    $parts = $_ -split '-', 2
    if ($parts.Count -eq 2) { $parts[0] } else { $_ }
}

foreach ($group in $keyGroups) {
    $prefix = $group.Name
    $groupKeys = $group.Group

    # 检查组内是否包含三个必要密钥
    if ($groupKeys -contains "$prefix-appid" -and $groupKeys -contains "$prefix-id" -and $groupKeys -contains "$prefix-secret") {
        $appId = $keys["$prefix-appid"]
        $id = $keys["$prefix-id"]
        $secret = $keys["$prefix-secret"]

        # 执行你的特定任务
        Write-Host "正在处理分组 [$prefix]:"
        Write-Host "  AppID: $appId"
        Write-Host "  ID: $id"
        Write-Host "  Secret: $secret"
    }
    else {
        Write-Warning "分组 [$prefix] 不完整,缺少必要密钥,跳过"
    }
}

关键说明

  • 使用-split '-', 2拆分键名是为了兼容前缀中包含'-'的场景(比如my-app-appid会被拆分为前缀my-app),如果你的前缀确定不含'-',可以简化为($_ -split '-')[0]。
  • 增加密钥存在性检查是为了避免因缺失某个密钥导致的运行时错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:40:26