首页 > 解决方案 > 附加到文件的多个进程导致覆盖

问题描述

我有一个简单的 powershell 命令,它将一个变量(字符串)附加到一个 .log 文件中:

powershell.exe -command " \"%V\" | out-file "C:\file.log" -append "

这存储在注册表中,因此 %V 等于目录路径。

每当我执行此命令时,目录路径都会附加到日志文件中。当我调用此命令的 15 个实例时,问题开始出现 - 结果很糟糕(例如,我只会在我的日志文件中看到 15 个条目中的 3 个)。我相信这被称为竞争条件,其中多个实例试图同时访问文件,从而导致覆盖。

我试图通过使用互斥锁来解决这个问题,这样实际上一次只有一个实例将路径附加到日志文件:

powershell.exe -command " $mtx = New-Object System.Threading.Mutex($false, \"RCWM\");
$mtx.WaitOne();
\"%V\" | out-file "C:\file.log" -append;
$mtx.ReleaseMutex() "

这有效,但速度很慢。

我还能做些什么来加快这个过程,同时一次只允许一个实例输出到文件?

标签: powershellappendregistrymutexoverwrite

解决方案


推荐阅读