PowerShell中无法通过SharePoint值匹配CSV哈希表对应值的问题
问题分析与解决
核心问题
- 哈希表初始化逻辑错误:你在
ForEach-Object的第一个脚本块里每次循环都重新创建$hash = @{},这会导致哈希表最终只保留CSV文件的最后一行数据,前面的键值对全被覆盖。 - 变量$n的格式错误:你给
$item["InvoiceNumber"]手动添加了单引号,使得$n的值变成了类似'1'(包含单引号的字符串),但哈希表的键是CSV里原始的1(无单引号的字符串),两者不匹配,自然查不到对应值。 - 错误的变量插值写法:
$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
相关产品推荐
相关产品推荐

