windows - 分配变量后,无法将尾部数据从日志文件打印到 PowerShell 控制台
问题描述
我正在尝试创建一个脚本,通过监视特定关键字的日志文件来在 Windows 应用程序关闭时通知我:
Get-Content <file> -Tail -Wait | Select-String -Pattern <keyword>
我也试过
Get-Content <file> -Tail -Wait | where {$_ -match <keyword>}
我可以使用上面显示的两种变体成功检索告诉我服务器已关闭的关键字Get-Content
。我知道它是成功的,因为我看到控制台上显示的关键字行。但是,当我尝试分配变量时:
$var = Get-Content <file> -Tail -Wait | Select-String -Pattern <keyword>
Write-Host $var
$var
它不再在控制台上显示包含字符串的行
这是实际的脚本:
$Downstate = Get-Content -Path "C:\Program Files (x86)\logs\log1.txt" -Tail 1 -Wait |
Select-String -Pattern "tcp_disconnect"
Write-Host $Downstate
$Downstate
我也试过:
$Downstate = Get-Content -path "C:\Program Files (x86)\logs\log1.txt" -Tail 1 -Wait |
where {$_ -match "tcp_disconnect"}
我都试过了Write-Host
,Write-Content
顺便说一句。
分配给变量时没有错误,只是在控制台上看不到输出。但如果我不分配给变量,我可以看到输出。
最终,我想要的是为向上和向下条件分配一个变量,以便当我准备好创建一个在给定条件下执行某些操作的逻辑时,我可以在脚本中引用它们。
解决方案
以下方法对我有用:
$infile = 'D:\PShell\DataFiles\so_57360147.txt' ## my test case
$infile = 'C:\Program Files (x86)\logs\log1.txt'
Get-Content -path "$infile" -Tail 1 -Wait |
Select-String -pattern "tcp_disconnect" |
ForEach-Object {
$Downstate = $_
Write-Host $Downstate -Foreground Cyan ## debugging
$Downstate ## real output
}
来自Get-Content
文档参数的解释:
等待
输出所有现有行后保持文件打开。等待时,
Get-Content
每秒检查一次文件,如果存在则输出新行。Wait
您可以按 CTRL+打断C。如果文件被删除,等待也会结束,在这种情况下会报告非终止错误。
Wait
是文件系统提供程序添加到Get-Content
cmdlet 的动态参数。此参数仅适用于文件系统驱动器。Wait
不能与 结合Raw
。
推荐阅读
- c# - Unity:TopDown 视图 - 游戏对象不向 mousepos 旋转
- mysql - 复合索引的正确顺序是什么(mysql)
- java - Spring boot:使用modelmapper将UserDto映射到UserDetails并获取Token
- html - Django 3.0 - 在浏览器中查看 PDF
- reactjs - 获取在 github 上部署应用程序的空白页面
- c - 使用结构与指向结构的指针
- python - Python中是否有一种简单的方法可以从绘图中获取坐标?
- sql-server - 违反主键约束 - SQL Server
- html - HTML5 视频 - 添加定位良好的按钮(图像)作为覆盖
- json - 写入 bzip2 存档