powershell - 找到字符串后使用 Powershell 将内容添加到文本日志文件
问题描述
当文件中的模式匹配时,此代码无法成功将日期附加到平面文本文件。已验证已找到该模式,但无法使添加内容发挥作用。注意:使用等待是为了等待关键字 = Idle 被写入文件。
我的代码在这里:
$File = "AutoDE45oService_AP.$(get-date -Format yyMMdd).log"
$Path = "C:\Users\user"
$result = Get-ChildItem $Path -recurse | Where-Object { $_.Name -match $File }
$containsIdle = Get-Content $result.FullName -Tail 1 -Wait | Select-string -Pattern "Idle" -Quiet
If($containsIdle -contains $true)
{
Add-Content $result.FullName -Value (Get-Date) -PassThru
}
解决方案
与结合没有意义:Get-Content
-Wait
Select-String
-Quiet
Get-Content -Wait
无限期地等待将新内容添加到目标文件(如果有)。等待仅在特殊情况下停止,即目标文件被删除、重命名或移动时。Select-String -Quiet
只输出一个布尔值,指示是否找到该模式 - 即使附加输入也包含该模式。
因此,结合这两个调用:
只产生最多一个输出值 - 即
$true
- 对于找到的模式的第一次出现 - 即使稍后添加到文件的内容也与模式匹配。无限期地运行(除非您删除、重命名或移动目标文件)。
要解决您的问题,您需要两件事:
在同一管道的一部分中省略
-Quiet
并处理结果:ForEach-Object
Get-Content -Wait ... | Select-String -Pattern ... | ForEach-Object { ... }
提供一个外部机制来终止命令以防止它无限期地运行:
- 交互式运行时,按下会Ctrl-C终止执行。
- 有关基于超时的自动终止机制,请参阅此答案(针对您的相关问题)。
推荐阅读
- c++ - 在成员变量模板初始化程序中从通用 lambda 查找静态成员名称 — 编译器错误?
- c# - 你如何使用 Lucene.Net 拼音搜索
- python - python中的单位根分位数自回归
- java - 如何从 AWS Lambda 在 AWS EC2 实例上执行 JAR
- javascript - 传递给函数的默认变量值会在 IE11 中中断脚本,但似乎不需要
- android - 带有阴影效果的滚动透明工具栏
- javascript - JavaScript 纯 CRUD 编辑功能 - 更新/编辑表格中的输入字段
- apache-kafka - 带有窗口的 Kafka Streams 拓扑不会触发状态更改
- ios - 显示图像或自动播放视频,如 Instagram 提要
- list - 搜索列表列表的时间复杂度?