2017-11-17 5 views
0

다음 코드를 참조하십시오. 사용자가 중지 할 때까지 코드가 계속 실행됩니다. 최종 목표는 스크립트를 실행하여 특정 날짜를 찾고 성공적으로 2 개의 날짜 사이에 결과를 찾거나 찾도록하는 것입니다.Powershell을 사용하여 원격 로그에서 출력 한 날짜에 대한 필터

(get-date)의 조합으로 -afterfore 플래그를 사용해 보았습니다. IE .dat .datetime .addday (+/- 1)하지만 스크립트를 사용하면 올바른 날짜와 정지를 발견하지만 스크립트를 다시 시작하거나 목록의 다음 머신으로 이동하기 전에 2/3 분이 걸립니다. 나는 또한 {$ _. TimeGenerated -lt "00/00/000"}

을 시도했습니다. 어떻게 할 수 있습니까? 나는 몇 가지 다른 일을 시도했지만 기쁨이 없습니다.

$ComputerName = 'CSV File' 
$UserProperty = @{n="User";e={(New-Object System.Security.Principal.SecurityIdentifier $_.ReplacementStrings[1]).Translate([System.Security.Principal.NTAccount])}} 
$TypeProperty = @{n="Action";e={if($_.EventID -eq 7001) {"Logon"} else {"Logoff"}}} 
$TimeProperty = @{n="Time";e={$_.TimeGenerated}} 
$MachineNameProperty = @{n="MachineName";e={$_.MachineName}} 

foreach ($computer in $ComputerName) { 
Get-EventLog System -Source Microsoft-Windows-Winlogon -ComputerName $computer | select $UserProperty,$TypeProperty,$TimeProperty ,$MachineNameProperty 
} 
+1

글쎄, 이건 정말 코드의 정확한 표현이 아닌 것 같습니다. 예를 들어 지금 foreach 루프가 한 번 실행되고 'CSV 파일'이라는 컴퓨터에서 이벤트 로그를 가져 오려고합니다. 나는 그것이 효과가 있다고 생각하지 않는다. 아마도이 링크는 도움이 될 것입니다 : https://stackoverflow.com/help/mcve – EBGreen

+0

원격 이벤트 로그를받는 것이 일반적으로 조건이 이상적이지 않은 경우 (빠른 프로세서, 빠른 I/O, 작은 로그 파일) – EBGreen

+0

'CSV 파일'은 실제 파일의 이름이 경로로 표시되는 대신 파일의 예입니다. For 루프는 CSV의 모든 컴퓨터에 대해 명령을 실행하므로 완벽하게 작동합니다. 내가 원하는 모든 일은 검색 할 날짜를 선언하는 것입니다. –

답변

0

나는 당신이 겪고있는 발행 정확히 긍정적 아니에요 그러나 이것은 나를 위해 잘 작동 : 내가 코멘트에 명시된 바와 같이

Get-EventLog System -Source Microsoft-Windows-Winlogon -ComputerName $computer -before '2017-11-09' -after '2017-10-27' -InstanceId @(7001, 7002) | select $UserProperty,$TypeProperty,$TimeProperty ,$MachineNameProperty 

하는 원격 이벤트 로그를 얻는 것은 일반적으로 매우 느린 과정이다.

먼저 내가 전혀 시간 필터 요청을 againsta 서버를 실행 :

measure-Command -Expression {$noTimeFilter = Get-EventLog System -Source Microsoft-Windows-Winlogon -ComputerName $computer -InstanceId @(7001, 7002)} 

이것은 292.85 초 걸렸 79 개 이벤트를 반환

여기에 약간의 타이밍 정보입니다. 다음으로 지난 24 시간 동안 동일한 서버 필터링을 수행했습니다.

measure-Command -Expression {$withTimeFilter = Get-EventLog System -Source Microsoft-Windows-Winlogon -ComputerName $computer -after (Get-Date).AddDays(-1) -InstanceId @(7001, 7002)} 

이것은 243 초가 걸리고 2 이벤트가 반환되었습니다.

따라서이 제한된 테스트 필터링은 사실 더 빠릅니다. 나의 일화 된 경험에서 필터링은 실제로 어떤면에서도 큰 차이를 만들어 내지 못합니다. 나는이 쿼리가 모든 이벤트를 가져 와서 필터한다고 확신한다. 실제로 필터없이 더 빠른 수익을 지속적으로 볼 수 있다면 매번 모든 것을 얻은 다음 Where-Object 블록으로 파이프하여 원하는 이벤트 만 얻을 수 있습니다. 이것은 내 경험에 반하는 것이며 FoxDeploy는 원격 컴퓨터의 성능에 잠재적으로 해를 끼칠 수 있다고 지적했습니다.

+0

특히, 원격 PC에 필터없이 모든 이벤트 로그를 수집하면 도메인에서 매우 느려질 수 있습니다 (CPU를 깨뜨릴 수 있습니다!). – FoxDeploy

+0

FoxDeploy의 우수한 의견에 따라 7001 및 7002 이벤트 필터링에 대한 대답이 업데이트되었습니다. – EBGreen

+0

위 코드를 실행하지 않고 코드를 실행해도 아무 문제없이 빠르게 실행하면 검색/필터 적용시 느리게 실행되기 시작합니다.현재 하루에 코드를 실행하는 방법 –

관련 문제