2017-01-06 3 views
1

두 Windows 컴퓨터의 이벤트 로그에서 이벤트를 읽으려고합니다. 하나는 Windows 10 Enterprise (완벽하게 작동)이고 다른 하나는 Small Business Server 2008입니다. SBS2008에서는 78 번째 문자에서 기계 출력이 잘리지 만 그 이유는 알 수 없습니다. 그것은 두 기계, 아니 절단에 PowerShell을 편집 창에서 잘 수행데이터 잘림 SBS2008

get-eventlog Application -After (Get-Date).AddDays(-10) | 
Where-Object {$_.EntryType -like 'Error' -or $_.EntryType -like 
'Information'} | Format-Table -Property TimeGenerated, Index, 
EventID, EntryType, Source, Message -autosize | Out-String -Width 4000 

:

내가 실행하고있는 PowerShell 명령입니다. 내가 GetEvents.ps1 -file 출력을 PowerShell을 사용하여 명령 창에서 실행하면 잘립니다 : C : GetEvents.ps1 enter image description here

- 파일 \ BITS> PowerShell은 난이 수행되고 있는지 작동하지 않을 수 있습니다. 이것은 자바 코드 :

String command = "powershell.exe " + Cmd; 
Process powerShellProcess = Runtime.getRuntime().exec(command); 
powerShellProcess.getOutputStream().close(); 
String line; 
BufferedReader stdout = new BufferedReader(new InputStreamReader(powerShellProcess.getInputStream())); 
while ((line = stdout.readLine()) != null) { 
    if (line.length() > 0) { 
     System.out.println(line); 
    } 
} 

사람이 로그에서 이벤트를 얻거나 내가이 캐리지 리턴에 의해 파괴되지 않고 PowerShell 스크립트의 출력을 읽는 방법을 제안하는 더 좋은 방법을 제안 할 수 있습니까? 이것은 내가 SBS2008 고객 기계에서 실패하는 것을 발견하기 위해서만 내 컴퓨터 (W10 하나)에서 광범위하게 테스트했기 때문에 상당히 실망 스러웠습니다! 다른 컴퓨터에서 사용되는 라이브러리 및 Java 버전을 확인했으며 동일합니다. 필자는 마지막 'While'블록 내에서 문자열의 일부 구문 분석을 수행하고 들어오는 줄이 잘리지 않기 때문에 println 문은 아닙니다.

나는 Get-winevent를 사용하여 계속 시도했지만 명령에 filterhashtable 플래그를 넣을 때 SBS2008에서 '매개 변수가 잘못되었습니다'라는 메시지가 나타나면 실패합니다 (W10에서 정상적으로 작동 함). 나의 이상은 주어진 eventID (특정 항목을 저장할 수 있기 때문에) 이후 특정 로그 파일의 모든 이벤트를 가져올 수 있지만 모든 Windows 운영 체제에서 같은 형식으로 같은 출력을 얻는 것은 사실상 불가능한 것처럼 보입니다. 어떤 제안이라도 환영합니다.

+3

'| 서식 테이블 | Out-String'. "나는 케이크 반죽을 섞어서 오븐에 넣은 다음 완성 된 케이크를 오븐에서 꺼내 케이크 믹서에 다시 넣고 케이크 깡통에 다시 반죽하지만 이제는 모두 부스러기입니다. 알 겠어? " Format-Table은 콘솔 세션의 관리자에게 파이프 라인 끝 표시를 표시하며 그 외에는 거의 표시되지 않습니다. 더 멋진 테이블을 만들기 위해 데이터를 버릴 것입니다. Format-Table이 Java 내부에 존재하지 않는 호스트에 데이터를 표시하기 위해 데이터를 분할하려고 시도하면 Out-String -width 4000은 다시이를 다시 함께 배치하지 않습니다. – TessellatingHeckler

+0

Java에서 JSON 또는 CSV를 읽고 포맷 할 수 있습니까? – TravisEz13

+0

고마워요,하지만, 그것은 완벽하게 이해가되지만, 그것은 문제가 떠납니다 ... 내가 포맷 - 테이블을 가져올 때 전체 문자열을 얻을 수 있지만 그것은 나를 위해 중요한 EventID 열을 포함하지 않습니다. format-table을 사용하지 않고 명령에 해당 열을 포함 시키려면 어떻게합니까? –

답변

0

SBS2008에 대한 대답은 여기에 있습니다. http://www.mcbsys.com/blog/2011/04/powershell-get-winevent-vs-get-eventlog/ SBS2008은 해시 테이블을 사용할 수 없으므로 filterxml을 사용해야합니다. 불행히도 SBS2008에서 filterxml을 사용하면 오류 메시지가 반환되지 않으며 그 밖의 모든 메시지는 반환되지 않습니다. 이것은 이벤트 뷰어 (https://blogs.msdn.microsoft.com/powershell/2011/04/14/using-get-winevent-filterxml-to-process-windows-events/)의 XML 쿼리를 잘라내어 붙여 넣기하는 규정 된 방법을 사용하고 있습니다. 더 많은 조사가 끝나면 내가 원하는 것을 (일종의) 스크립트로 생각해 냈습니다. 그것은 (부끄러운)을 eventindex 부족하지만 지속적으로 시스템 & 응용 프로그램에서는 Eventlogs에서 이벤트를 반환

$fx = '<QueryList> 
    <Query Id="0" Path="Application"> 
    <Select Path="Application">*[System[(Level=1 or Level=2 or Level=3) and TimeCreated[timediff(@SystemTime) &lt;= 43200000]]]</Select> 
    </Query> 
</QueryList>' 
function Set-Culture([System.Globalization.CultureInfo] $culture) { [System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture ; [System.Threading.Thread]::CurrentThread.CurrentCulture = $culture } ; Set-Culture en-US ; get-winevent -FilterXml $fx | out-string -width 470 

$fx = '<QueryList> 
    <Query Id="0" Path="System"> 
    <Select Path="System">*[System[(Level=1 or Level=2 or Level=3) and TimeCreated[timediff(@SystemTime) &lt;= 43200000]]]</Select> 
    </Query> 
</QueryList>' 
Set-Culture en-US ; get-winevent -FilterXml $fx | out-string -width 470 

나는이 다른 사람에게 유용 희망!