PowerShell의 type -wait
명령을 사용하여 실제 로그 파일을 모니터링하려고합니다. 리눅스에서 tail -f
을 사용하는 것과 동일한 방식으로 Windows에서 시간을 측정했으며 파일을 다른 명령 인 select-string
(예 : grep
)에 파이프 처리하여 조건에 따라 동작을 트리거합니다. 리눅스에서는, 내가하려고하는 것을 이루기 위해서 watch
을 사용할 것이다.PowerShell의 유형을 사용하십시오. select-string을 사용하여 실시간으로 응용 프로그램 로그를 모니터링하고 (tail -f 또는 watch와 같은) 동작을 실행하십시오.
다음 예제에서는 문자열 "status=Caught"
이 포함 된 새 줄이 로그 파일에 기록 될 때마다 "You caught a critter!"
이라는 문구를 인쇄하려고합니다.
while (1) {if (type -wait "$env:USERPROFILE\AppData\Roaming\CritterCatcherApp\Logs\CritterBag-170118.log" | select-string -quiet "state=Caught") {write-host "You caught a critter!"} else {continue}}
주의하시기 바랍니다 select-string
명령이 리턴 True
에 대한 -quiet
인수입니다. 사실,이 예제에서는 로그 파일에 문자열이 "status=Caught"
인 기존 행이 있기 때문에 명령을 처음 실행했을 때 한 번만 True
을 반환합니다.
필자는 기존 문자열을 간과해야합니다 (예 : 로그 파일 회전). 그러나 지금 당장은 파일의 꼬리말을 계속할 필요가없는 PowerShell 스크립트가 필요합니다. 파일에 작성된 각 행마다 주어진 문자열이 들어 있는지 여부를 계속해서 평가합니다. 그런 다음 문자열이 있으면 선 인쇄와 같은 임의의 작업을 실행해야합니다. 그렇지 않으면 문자열을 계속 듣습니다.
다음 게시물은 -wait
인수가 Get-Content
cmdlet에 대한 옵션 인 것을 나타냅니다. How to monitor a windows log file in real time?. 이 게시물에 설명 된대로 이 foreach
루프와 함께 작동해야하는지 확실하지 않습니다 : In Powershell can i use the select-string -quiet switch within a foreach statement.
위의 PowerShell 스크립트를 수정하여 로그 파일을 끝내고 지정된 문자열로 새 줄마다 작업을 실행하고 파일을 계속 꼬리를 맞추고 작성된대로 새 줄을 평가할 수 있습니까?
를 실행합니다 - 그것은 작동합니다. 이것은 분명히 해답이며, 코드의 한 줄에서 우아한 해결책입니다. 필자는 파일의 기존 항목으로 인해'Write-Host' 출력을 몇 번 얻었고 해결은 다음 단계가 될 것입니다. 고맙습니다. –