我编写了一个脚本来远程获取 PowerShell 中的事件日志,但我不喜欢该脚本创建自己的事件日志条目的方式。
具体来说,此脚本会抓取几种类型的事件 ID,包括登录/注销事件。最近我被要求运行脚本来获取另一个用户的事件,并且必须在几个小时内获取这些数据。通常我会启动脚本并让它运行一天中的大部分时间(因为这里通常有很多数据),但是这次为了加快进程,我启动了 4 个脚本实例来更快地获取这些数据通常。脚本的每个实例都在查看不同的时间范围,因此所有 4 个脚本组合都在我被要求的时间范围内获取。
在 3 个小时左右的时间里,我在这台远程计算机上对我的用户 ID 进行了超过一百万次不同的登录尝试。我有太多的登录信息,以至于我最终覆盖了我最初被要求获取的事件日志数据。
吸取的教训,我现在正在研究如何使这更快、更高效、更可靠。
这是我的代码的核心,非常简单明了,并且在大多数情况下都有效。
$output = Get-EventLog `
-instanceID 4672,4647,4634,4624,4625,4648,4675,4800,4801,4802,4803 `
-logName Security `
-after (Get-Date $inStartDate) `
-before (Get-Date $inEndDate).addDays(1) `
-message ("*" + $InUserID + "*") `
-computerName $inPCID
我想到目前为止,我的研究中有几个问题是我无法弄清楚的。为什么 Get-EventLog 需要建立如此多的连接?是因为连接不断下降还是什么?
获取此数据的最快方法是什么 -Get-EventLog
通过指定 a 使用本机命令-ComputerName
,或者我应该使用类似Enter-PSSession
or的东西Invoke-Command
。
将Enter-PSSession
和Invoke-Command
两者都有我遇到的相同问题Get-EventLog
吗?
我想避免使用Enter-PSSession
,Invoke-Command
因为我不能保证公司中的所有机器都启用远程执行。