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

如何在PowerShell中将变量生成的列表转换为关联数组?

解决方案:关联经理与对应市场邮箱

一、直接处理API返回数据(推荐方案)

Invoke-RestMethod会直接返回PowerShell对象,无需转JSON存文件再提取,这种方式效率更高且不易出错。

步骤1:调用API并构建关联映射

# 调用API,直接获取对象(无需ConvertTo-Json)
$apiResponse = Invoke-RestMethod -Uri $GetARDIR -Method GET -ContentType $content -Headers $headers

# 定义市场名称到邮箱的映射哈希表(替换为你的实际规则)
$marketToEmailMap = @{
    "Stores of Carolinas" = "market1@company.com"
    "Stores of Georgia East" = "market2@company.com"
    # 补充其他市场的映射关系
}

# 构建经理-市场邮箱关联哈希表
$managerMarketMap = @{}
foreach ($item in $apiResponse.data.PSObject.Properties.Value) {
    # 提取并清理经理邮箱(处理API返回的数组格式)
    $managerEmail = $item.workemail -replace '^\["|"\]$', ''
    if ([string]::IsNullOrEmpty($managerEmail) -or $managerEmail -eq 'null') {
        continue
    }

    # 提取并清理管理的市场列表,转为数组
    $managedMarkets = $item.supervisoryorgmanaged -replace '^\["|"\]$', '' -split '","'
    # 将市场名称转换为对应邮箱
    $marketEmails = $managedMarkets | ForEach-Object {
        if ($marketToEmailMap.ContainsKey($_)) {
            $marketToEmailMap[$_]
        } else {
            Write-Warning "未找到市场 '$_' 的邮箱映射"
            $null
        }
    } | Where-Object { $_ -ne $null }

    # 存入关联哈希表,一个经理对应多个市场邮箱数组
    if ($marketEmails.Count -gt 0) {
        $managerMarketMap[$managerEmail] = $marketEmails
    }
}

# 查看最终关联结果
$managerMarketMap

关键说明

  • 用哈希表$marketToEmailMap统一管理市场到邮箱的映射,比零散的-replace更易维护。
  • 直接操作API返回的对象,跳过存文件、字符串匹配等冗余步骤,减少格式错误风险。
  • 最终$managerMarketMap是关联数组(哈希表),键为经理邮箱,值为对应的市场邮箱数组。

二、处理现有$fullalignment列表(应急方案)

如果已经生成了经理与市场行交替的$fullalignment列表,可通过循环遍历建立关联:

# 清理列表,转为干净的数组(去除空行、多余空格)
$alignmentArray = $fullalignment -split "`n" | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne '' }

$managerMarketMap = @{}
$currentManager = $null

foreach ($line in $alignmentArray) {
    # 判断当前行是否为经理邮箱(可根据实际格式调整匹配规则)
    if ($line -match 'manager\d+@company\.com') {
        $currentManager = $line
        $managerMarketMap[$currentManager] = @() # 初始化空数组
    } else {
        if ($currentManager) {
            # 拆分当前行的多个市场邮箱并加入对应经理的数组
            $marketEmails = $line -split '\s+' | Where-Object { $_ -ne '' }
            $managerMarketMap[$currentManager] += $marketEmails
        }
    }
}

# 查看关联结果
$managerMarketMap

关键说明

  • 依赖行的固定顺序(经理行后紧跟市场行),如果格式不稳定,优先推荐第一种方案。
  • 清理后的数组确保无空行,避免遍历过程中出现异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 08:24:58