powershell - 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:\test\test.log }
,在第二个会话中我运行插件C:\test\check_log.ps1 C:\test\test.log C:\test\Old_log.log test
我不完全确定我的测试是否正确,但我认为该Copy-Item
命令会导致问题。当我在脚本中评论这一行时,我在终端中看不到任何错误。我测试了一些自定义函数来复制我在互联网上找到的文件,但我找不到解决我的问题的方法。
你知道如何让它充分发挥作用吗?
解决方案
如果您认为复制项正在锁定文件,请尝试读取内容,然后将其保存到另一个位置。像这样的东西:
获取内容 $Logfile | 设置内容 $Oldlog
推荐阅读
- python - 如何组合多个 python 正则表达式参数?
- keras - 有没有办法在通话期间更改变量?
- bash - 如何将输出存储为变量
- intellij-idea - 有没有办法从 kotlin 项目的 build.gradle 获取版本?
- reactjs - 维护单个组件的多个状态
- javascript - jQuery Draggable - 在 html5 原生 Drag And Drop api 事件上创建可拖动并开始拖动
- javascript - javascript中的数组映射更改数组中的所有元素
- android - 程序类型已经存在:android.support.v4
- spring-boot - @WebMvcTest,@DataJpaTest 我想知道它是“单元测试”还是“集成测试”。
- c - 如何检查某个函数是否可以被另一个特定函数间接调用?