如何在SharePoint PowerShell中动态构建Where-Object匹配多文件名
解决方案
方法1:使用 -in 操作符直接匹配
这是最简洁的实现方式,无需正则,直接利用PowerShell的集合匹配能力:
# 读取配置文件中的文件名(假设已将配置内容读入$configStr) $configStr = "March-2025-File;Feb-2025-File" # 分割字符串并去除可能的首尾空格,得到目标文件名数组 $targetFiles = $configStr -split ';' | ForEach-Object { $_.Trim() } # 读取文档集文件夹并过滤匹配的文件 Get-ChildItem -Path "你的文档集文件夹路径" | Where-Object { $_.Name -in $targetFiles }
方法2:构建正确的正则表达式匹配(解决单文件返回问题)
之前正则分组仅返回单个文件,是因为正则模式未正确包含所有目标文件名。正确的做法是将所有文件名转义后用|拼接,限定完全匹配:
$configStr = "March-2025-File;Feb-2025-File" # 转义文件名中的特殊正则字符,避免语法冲突 $escapedFiles = $configStr -split ';' | ForEach-Object { [regex]::Escape($_.Trim()) } # 构建匹配任意目标文件名的正则模式 $regexPattern = '^(' + ($escapedFiles -join '|') + ')$' Get-ChildItem -Path "你的文档集文件夹路径" | Where-Object { $_.Name -match $regexPattern }
关键注意事项
- 务必对分割后的文件名执行
Trim(),避免配置中的空格导致匹配失败 - 若需匹配不含扩展名的文件名,将
$_.Name替换为$_.BaseName即可 -in适合文件量和目标量不大的场景,正则则更适配带通配符的复杂匹配需求
内容的提问来源于stack exchange,提问作者Karunakar
相关产品推荐
相关产品推荐

