我有以下在 PS 7.2.0-preview.1 中运行的脚本:
get-childitem *.* -File -recurse | foreach-object -parallel {$hashX=(get-filehash -algorithm sha256 $_); $hash=@{sha256=$hashX.Hash; path=$hashX.Path}; write-output "$($hash.path)`t$($hash.sha256)" >> d:\g-SATA-hash.txt} -throttle 8
但是,在运行脚本时,我经常会收到错误消息,
Out-File: The process cannot access the file
显然,这是因为两个或多个并行进程试图同时写入相同的输出文件(没有-Parallel
.
我的问题是,有没有办法告诉进程继续尝试写入输出文件直到成功,而不是发布错误消息并继续。我想在 try-catch 解决方案中有一些东西,但我不熟悉 PowerShell 中的 try-catch 和错误发布。
提前感谢您的指导。
Powershell 区分终止错误和非终止错误。非终止错误不会被 捕获
try {}
,因此解决方案取决于错误的性质。对于终止错误,请使用:
有关详细信息,请参阅 使用 PowerShell try-catch 命令处理错误一文。
对于非终止错误,请使用
-ErrorAction
参数。错误操作在以下内容中进行了深入描述:
为了正确序列化操作以免发生冲突,请使用 Mutexes。
一个例子是:
有关详细信息,请参阅文章
Using Mutexes to Write Data to the Same Logfile Across Processes With PowerShell。