【问题标题】:Powershell: copy file without lockingPowershell:复制文件而不锁定
【发布时间】:2020-05-19 19:19:52
【问题描述】:

我创建了简单的 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:\test\test.log },在第二个会话中我运行插件 C:\test\check_log.ps1 C:\test\test.log C:\test\Old_log.log test

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

你知道如何让它充分发挥作用吗?

【问题讨论】:

    标签: powershell nagios


    【解决方案1】:

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

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

    【讨论】:

    • 为什么我没有想到这个?它是如此简单,但它似乎工作。当然,假设我的测试是正确的并且应用程序是否以相同的方式工作(不幸的是我无法分析源代码来确认)。我明天会用应用程序检查并让你知道。谢谢!
    • 有效!更改为Set-Content -Path $Oldlog -Value $LogContent。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多