2016-06-07 4 views
1

두 개의 디렉토리를 미러링하고 두 디렉토리 사이에서 일어나는 일에 대한 로그 파일을 업데이트하는 스크립트를 실행했습니다. 이 로그 파일을 구문 분석하여 (스크립트가 실행되는 동안) 들어오는 동안 업데이트를 얻고 싶습니다. 그리고 알림과 같이 변경된 내용을 전자 메일로 보내주기를 원합니다. 또한 가능한 한 한 번 이상 동일한 정보를 알리고 싶지 않습니다.업데이트 할 때 powershell logfile을 구문 분석합니다.

일부 명령 목록을 온라인에서 읽은 후 어떻게해야하는지 잘 모르겠습니다.

Tldr; 정말로 내가해야 할 일은 로그 파일에 행이 추가되고 파일을 구문 분석하여 다른 행을 얻지 않고 업데이트 된 행을 가져 오는 것입니다.

PowerShell에서 그다지 도움이되지 않으므로 도움을 주시면 대단히 감사하겠습니다.

답변

2

-Wait 매개 변수를 Get-Content으로 전달하여 각 새 줄을 가져올 수 있습니다. 그런 다음이를 Foreach-Object 스크립트 블록으로 전달하여 필요한 모든 작업을 수행 할 수 있습니다.

Get-Content $logfile -Tail 0 -Wait | foreach { 
    "Another line was added: " + $_ 
} 

-Tail N 인수는 Get-Content이 마지막 N 라인을 얻을됩니다; 이 경우 0입니다. 이렇게하면 파일에있는 모든 항목을 건너 뛰고 새로 추가 된 줄만 스크립트 블록에 전달합니다.

참고 :이 cmdlet은 Ctrl + C로 취소하거나 PowerShell 프로세스를 중지 할 때까지 계속 실행되므로 대화 형 프롬프트에서 스크립트보다 사용하는 것이 훨씬 좋습니다.

+0

고맙습니다. 나는이 시대를 고대 해 왔습니다. 이메일 스크립트를 foreach에 전달하여 각각의 새 줄을 나에게 이메일로 보내겠습니까? 그러면 각 줄을 이메일로 보내겠습니까? 다시 한번 감사드립니다. :) – flanelman

+0

당신은'foreach {...}'블록 안에 명령을 넣을 것입니다. 그 블록 안에'$ _' 변수는 추가 된 전체 라인을 포함합니다. –

+0

그래서 "$ _"에게 이메일을 보내야합니까? 시체로, 그 라인을 포함? :) – flanelman