在名为"[“的目录中使用ForEach-Object -Parallel cmdlet将返回一个WildcardPatternException。删除-Parallel,它将成功运行。
我创建了几个目录并运行了以下命令。
1..5 | ForEach-Object -Parallel {Write-Host $_}
每个ran目录返回的差异如下所示。
PS D:[example> 1.5\x{Host Object -Parallel {写-主机$_} ]
WildcardPatternException将被退回。
PS D:[]example> 1.5 ForEach对象-Parallel {写-主机$_} PS D:[ex]ample> 1.5{ ForEach-Object -Parallel {写-宿主$_}
ItemNotFoundException将被退回。
PS D:[e]xample> 1.5{ForEach对象-Parallel {写-主机$_} PS D:]example> 1.5回ForEach对象-Parallel {写-宿主$_}
成功运行,并返回5个值。
是否有一种无需重命名目录即可解决此问题的方法?
发布于 2020-05-18 15:57:51
正如注释中提到的,这是一个bug。
ForEach-Object -Parallel的工作方式是通过TaskPool将脚本块的执行卸载到多个后台运行空间。
为了模拟调用者环境,PowerShell将后台运行空间配置为类似于默认运行空间,包括将当前提供程序授权设置为任何调用方。
不幸的是,用于设置当前位置的内部API默认为展开通配符,相当于默认为:
Set-Location -Path 'D:\[]example'而不是
Set-Location -LiteralPath 'D:\[]example'这已经修补好了(包括ForEach-Object -Parallel和Start-PSThreadJob),预计今年晚些时候两者都会附带7.1版本。
https://stackoverflow.com/questions/61369862
复制相似问题