powershell - (PowerShell) 如何使用 Get-EventLog 过滤用户名
问题描述
我正在编写一个 Powershell 脚本来获取过去 7 天内登录/退出服务器的所有用户,他们的名字不像“*-organization”。以下有效,但无论我尝试什么,我都无法过滤名称
$logs = get-eventlog system -ComputerName $env:computername -source Microsoft-Windows-Winlogon -After (Get-Date).AddDays(-7)
$res = @()
ForEach ($log in $logs)
{
if($log.instanceid -eq 7001){
$type = "Logon"
}
Elseif ($log.instanceid -eq 7002){
$type = "Logoff"
}
Else { Continue }
$res += New-Object PSObject -Property @{Time = $log.TimeWritten; "Event" = $type; User = (New-Object System.Security.Principal.SecurityIdentifier $Log.ReplacementStrings[1]).Translate([System.Security.Principal.NTAccount])}};
$res
我试过在不同的地方和方式添加这条线,但无论如何我都无法过滤它。它要么失败并告诉我我的操作员必须有一个属性和值,要么它运行良好并忽略任何用户名过滤。
| Where-Object $_.User -notlike "*-organization"
甚至可以用这种方法过滤登录用户名吗?如果是这样,我做错了什么?如果不可能,有没有其他方法可以得到我需要的东西?
解决方案
必须有一个名为“用户”的属性才能工作。get-eventlog 现在实际上已经过时了,取而代之的是 get-winevent。不幸的是,您必须进入 xml 才能按用户 ID 进行过滤。我已经包含了一个时间过滤器。
$a = get-winevent @{logname='system';
providername='Microsoft-Windows-Winlogon'} -MaxEvents 1
$e = $a.ToXml() -as 'xml'
$e.event.EventData
Data
----
{TSId, UserSid}
get-winevent @{logname='system';providername='Microsoft-Windows-Winlogon';
data='S-2-6-31-1528843147-473324174-2919417754-2001';starttime=(Get-Date).AddDays(-7);
id=7001,7002}
在 powershell 7 中,您可以直接引用名为 data 字段的 eventdata:
get-winevent @{logname='system';providername='Microsoft-Windows-Winlogon';
usersid='S-2-6-31-1528843147-473324174-2919417754-2001'}
get-winevent 文档说您可以在 filterhashtable 中使用“userid”,但我无法让它工作。
编辑:实际上这有效。但是不要限制太多,至少对我来说是这样。
get-winevent @{logname='system';userid='js2010'}
get-winevent @{providername='Microsoft-Windows-Winlogon';userid='js2010'}
推荐阅读
- python - 在 Jupyter Notebook 中使用 Ctypes
- python - 应用程序保存的 Pymongo 数据在 mongo shell 中不可用
- sql-server - 视图的变量类型转换 | varchar(最大)到(250)
- python - 创建一个分层线图,默认情况下突出显示一些选择,然后根据鼠标悬停突出显示,并使其他所有线变为灰色
- javascript - JavaScript 函数在加载时无法正常工作,但在之后调用时工作
- vba - 包含许多用于月度报告的字段的表
- go - 如何从远程机器连接到 kubernetes pod?
- sockets - 如何在 HA 代理中使用 http-tunnel 在同一套接字上支持 HTTP 然后 TCP
- android - Android:为什么“TextView”对象需要对活动的引用作为参数?
- kivy - 为什么触摸有时看起来像已经移动或已经结束 on_touch_down