使用Powershell过滤从远程日志输出的日期

时间:2017-11-17 15:39:09

标签: powershell remote-server

请参阅我目前的代码,代码将继续保持运行直到被用户停止。最终目标是让脚本运行并查找某一天并成功停止或查找两个日期之间的结果。

我尝试过使用-before -after标志和(get-date)的组合。 IE .date .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 个答案:

答案 0 :(得分: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

正如我在评论中所述,获取远程事件日志通常是一个非常缓慢的过程。

这是一个小时间信息:

首先,我根据服务器运行请求,根本没有时间过滤器:

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指出可能对远程机器的性能有害。