Powershell:复制文件而不锁定



我创建了简单的nagios插件check_log.ps1来检查Windows机器上的日志文件。它的工作方式是复制日志的内容,并在下次查找日志副本和原始日志文件副本之间的指定字符串。

问题是有时在随机时刻check_log.ps1锁定日志文件,因此它会导致创建日志文件的应用程序停止。

一般插件在两处使用原始日志文件

# compare content of $Logfile and $Oldlog, save diff to $tempdiff
Compare-Object -ReferenceObject (Get-Content -Path $Logfile) -DifferenceObject (Get-Content -Path $Oldlog) | Select-Object -Property InputObject > $tempdiff
# override file $Oldlog using conetent of $Logfile
Copy-Item $Logfile $Oldlog

我做测试。在一个PS会话中我运行while($true) { [string]"test" >> C:testtest.log },在第二个会话中我运行插件C:testcheck_log.ps1 C:testtest.log C:testOld_log.log test

我不完全确定我的测试是否正确,但我认为Copy-Item命令会导致问题。当我在脚本中注释此行时,我在终端中没有看到任何错误。我测试了一些自定义函数来复制我在互联网上找到的文件,但我找不到解决我的问题的方法。

您知道如何使其完全工作吗?

如果您认为复制项目锁定了文件,请尝试读取内容,然后将其保存到其他位置。像这样:

获取内容$Logfile |设置内容$Oldlog

最新更新