PowerShell中使用-split处理变量关联的脚本改造求助
解决PowerShell脚本嵌套循环问题并改用单文件拆分赋值
修改后的完整脚本
# 读取合并后的格式为myid:GUID的TXT文件 $userPairs = Get-Content C:\Users\username\Downloads\UserPairs.txt # 遍历每一行,拆分出Display和AccountID foreach ($line in $userPairs) { # 按冒号拆分,限制最多拆成2部分(避免ID含冒号时出错),同时清理前后空格 $Display, $AccountIDs = $line -split ':', 2 | ForEach-Object { $_.Trim() } # 构建请求头(修复原脚本引号未闭合的问题) $headers = [System.Collections.Generic.Dictionary[string,string]]::new() $headers.Add("Content-Type", "application/json") $headers.Add("Authorization", "Bearer XXXXXX") # 构建请求体(修正原脚本变量引用错误) $body = @" { `"schemas`": [`"urn:ietf:params:scim:api:messages:2.0:PatchOp`"], `"Operations`": [ { `"op`": `"add"`, `"value`": { `"members`": [ { `"display`": `"$Display"`, `"value`": `"$AccountIDs"` } ] } } ] } "@ try { # 发送PATCH请求并输出结果 $response = Invoke-RestMethod '<url>' -Method 'PATCH' -Headers $headers -Body $body $response | ConvertTo-Json Write-Output "成功处理: $AccountIDs" } catch { Write-Error "处理$AccountIDs失败: $_" } }
关键修改说明
单文件拆分逻辑:
用Get-Content读取合并后的文本文件,每行通过-split ':', 2拆分:':'指定拆分分隔符- 第二个参数
2确保只拆成两部分,避免GUID中意外出现冒号导致拆分错误 - 配合
ForEach-Object { $_.Trim() }自动清理拆分后字符串的前后空格,兼容myid : GUID这类带空格的行格式
移除嵌套循环:
原脚本的嵌套循环会让每个Display和每个AccountId配对发送请求,这显然不符合“一一对应”的需求。改成单循环遍历每行的配对数据,确保一组Display和AccountIDs只发送一次请求。修复原脚本的bug:
- 修正了
Authorization头中未闭合的引号问题 - 原请求体错误引用了全局变量
$Display,现在改为当前循环的对应变量,确保数据正确 - 添加
try/catch块捕获请求错误,方便排查问题
- 修正了
内容的提问来源于stack exchange,提问作者Scot Rawlings
相关产品推荐
相关产品推荐

