2015-01-30 7 views
0

프로젝트 : 계속 추가되는 로그 파일이 있습니다. 이 로그 파일에서 때때로 오류 ("가져올 수 없음"및 고유 ID가 포함 된 오류가 추가됨)가 추가됩니다. 이 오류가 로그 파일에 추가되면 이메일로 알려야합니다.Powershell : 다른 파일에서 여러 줄의 텍스트에 대해 -Exclude를 사용하여 Select-String 검색을 수행하는 방법

프로젝트의 현재 상태 : Select-String을 사용하여 로그 파일을 검사하는 스크립트 (15 분마다 실행되도록 예약 됨)가 있으며이 오류가 발견되면 별도의 텍스트에 추가합니다 파일 이름은 alert- (Get-Date) .txt입니다. PS 스크립트 끝 부분에서 alert.txt 파일을 전자 메일로 보냅니다.

문제점 : 새 로그 파일이 매일 만들어 지므로 스크립트는 해당 파일을 검사 만합니다. 문제는 일단 오류가 발견되면 모든 후속 검사에서 이미 알고있는 오류에 대한 경고를 보냅니다. 이후의 경고에는 NEW 오류 만 포함되기를 원합니다.

1/29/2015 13:38:45 1/29/2015 13:38:45 Sales Order User Import  Unable to import OHDR_2785_228038_01292015.txt due to required files missing. Files are being removed from current directory to suspense directory. 

내가있는 오류의 고유 ID를 추출하는 스크립트에 수단을 추가했습니다 : 여기에 문제 를 해결하기

현재 시도는 샘플 오류가 로그 파일에 모습입니다 로그 파일. 이 경우 ID는 2785입니다.이 ID와 기타 ID는 다른 텍스트 파일 이름 oldAlerts.txt에 추가됩니다. 그래서 내용은 다음과 같이 : 내 스크립트에 선택 문자열 결과 다음과 같은 행을 exlude 할 수있는 방법을 추가 걸려

2785 
1182 
1353 
1555 

. 내가 필터로 oldAlert.txt 파일에 아이디의 사용 방법

Get-ChildItem \txtforerp\Import\Log | Where{$_.LastWriteTime -gt (Get-Date)-$ts -AND $_.LastWriteTime -lt (Get-Date)} | select-string -Pattern "Unable to import" | Out-File $path\"$alert.txt" 

는 새로운 오류가 경고에 추가하기 위해 : 여기에 지금까지 나의 선택 - 문자열입니다. 광산이 모범 사례가 아닌 경우 다른 접근법을 사용할 수 있습니다.

답변

0

negative assertion lookahead을 사용하여 이미보고 된 행을 제외하는 것이 좋습니다. 또한,도 선택 문자열에 새로운 ID를 쉽게 식별 할 수 있어야한다 :이 코드 $ids에서

Get-ChildItem \txtforerp\Import\Log | Where{ $_.LastWriteTime -gt (Get-Date)-$ts } | 
    Select-String "Unable to import OHDR_(?!$($ids -join '|'))(\d{4})" | 
    Select-Object Filename, Line, { $_.Matches.Groups[1].Value } 

이전에 확인 된 ID의 목록을 나타냅니다. 은 BTW :

$_.LastWriteTime -lt (Get-Date) 

파일이 미래에 수정되지 않은 경우 확인하기 위해 합리적인 것 같지 않습니다 ... :이 수표를 제거?

+0

이것은 작동합니다. 저를 정규 표현식에 소개해 주신 것에 감사드립니다. 지금까지 나는 그것에 대해 들어 본 적이 없었다. 귀하의 게시물에 링크 된 자습서가 매우 흥미 롭습니다. –