无法在名称包含“[”的目录中使用 "ForEach-Object -Parallel"

Unable to use the "ForEach-Object -Parallel" in a directory with a name containing "["

在名称包含“[”的目录中使用 ForEach-Object -Parallel cmdlet 将 return 出现 WildcardPatternException。去掉-Parallel,会运行成功。

我创建了一些目录和 运行 以下命令。
1..5 | ForEach-Object -Parallel {Write-Host $_}
每个 [=30= 的差异 return ]目录如下

PS D:\[example> 1..5 | ForEach-Object -Parallel {Write-Host $_}

WildcardPatternException will be returned.

PS D:\[]example> 1..5 | ForEach-Object -Parallel {Write-Host $_}
PS D:\[ex]ample> 1..5 | ForEach-Object -Parallel {Write-Host $_}

ItemNotFoundException will be returned.

PS D:\[e]xample> 1..5 | ForEach-Object -Parallel {Write-Host $_}
PS D:\]example> 1..5 | ForEach-Object -Parallel {Write-Host $_}

Ran successfully and 5 values are returned.

有没有不用重命名目录就能解决这个问题的方法?

如评论中所述,这是一个错误。

ForEach-Object -Parallel 通过称为 TaskPool 的东西将脚本块的执行卸载到多个后台运行空间。

为了模拟调用者环境,PowerShell 将后台运行空间配置为类似于默认运行空间,包括将当前提供程序位置设置为调用者所在的位置。

不幸的是,设置当前位置的内部API默认为扩展通配符,相当于默认为:

Set-Location -Path 'D:\[]example'

而不是

Set-Location -LiteralPath 'D:\[]example'

现在已经修补(都用于 ForEach-Object -Parallel and Start-PSThreadJob),预计这两个都将在今年晚些时候与 7.1 版一起发布