PowerShell脚本报错:找不到接受参数‘+’的位置参数,求解决方案
解决思路
问题根源
你用+拼接搜索查询字符串时存在两个核心问题:
- PowerShell中,单引号包裹的字符串里
"会被当作普通文本传递给Exchange,而非解析为双引号,导致搜索语法不符合Exchange要求; - 未将拼接后的字符串整体作为单个参数传递,可能引发参数解析错误。
具体修复方案
方案1:双引号插值(推荐)
用双引号包裹整个查询语句,PowerShell会自动解析变量$filename,内部双引号用反引号`转义:$searchResults = Search-Mailbox -Identity $mailbox.Identity -SearchQuery "attachment:`"$filename`"" -EstimateResultOnly方案2:单引号拼接(修正版)
去掉HTML实体转义的",改用实际双引号,并用括号将拼接后的字符串整体括起,确保作为单个参数传递:$searchResults = Search-Mailbox -Identity $mailbox.Identity -SearchQuery ('attachment:"' + $filename + '"') -EstimateResultOnly方案3:Here-String(适合特殊文件名)
如果文件名包含空格、特殊字符,用Here-String可避免转义繁琐:$searchQuery = @" attachment:"$filename" "@ $searchResults = Search-Mailbox -Identity $mailbox.Identity -SearchQuery $searchQuery -EstimateResultOnly
额外注意事项
- 提前初始化
$results数组:在脚本开头添加$results = @(),否则第一次执行$results += ...会报错; - 确认
$filenames是有效的字符串数组,每个元素为纯文件名(无需自带引号)。
内容的提问来源于stack exchange,提问作者ChopOMatic
相关产品推荐
相关产品推荐

