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

PowerShell中无法通过SharePoint值匹配CSV哈希表对应值的问题

问题分析与解决

核心问题

  1. 哈希表初始化逻辑错误:你在ForEach-Object的第一个脚本块里每次循环都重新创建$hash = @{},这会导致哈希表最终只保留CSV文件的最后一行数据,前面的键值对全被覆盖。
  2. 变量$n的格式错误:你给$item["InvoiceNumber"]手动添加了单引号,使得$n的值变成了类似'1'(包含单引号的字符串),但哈希表的键是CSV里原始的1(无单引号的字符串),两者不匹配,自然查不到对应值。
  3. 错误的变量插值写法:$hash['+$n+']这种写法完全错误,单引号内的变量不会被PowerShell解析,相当于你用字符串+$n+作为键去查询,肯定不存在。

修正后的脚本

Connect-PnPOnline -Url "https://**.sharepoint.com" -UseWebLogin

# 先初始化哈希表,再批量填充数据
$hash = @{}
Import-Csv c:\test.csv | ForEach-Object {
    $hash[$_.sourceid] = $_.destinationid
}

for($ii=1; $ii -lt 4; $ii++){
    $ListItem = Get-PnPListItem -List "InvoiceDetails" -Id $ii -Fields "InvoiceNumber"    
    foreach($item in $ListItem){
        # 直接取InvoiceNumber的原始值,无需额外添加单引号
        $n = $item["InvoiceNumber"].ToString()
        $n
        $hash['1']
        # 用正确的变量查询哈希表
        $hash[$n]
    }
}

额外说明

  • 如果$item["InvoiceNumber"]返回的是数字类型,建议用.ToString()转成字符串,确保和CSV导入的键类型一致(CSV字段默认是字符串)。
  • 可以在填充哈希表后加一行$hash输出,确认所有键值对是否正确加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:20:26