从 powershell 中的 Get-Winevent 消息中选择特定的 lines/data

Selecting specific lines/data from Get-Winevent message in powershell

我正在尝试从 get-winevent cmdlet 的消息输出中提取特定行,但未能找到执行此操作的方法(我可能搜索不正确,但仍在学习更高级的脚本编写方法).我运行是这样的:

Get-WinEvent -ComputerName $DC -FilterHashtable @{Logname='Security';Keywords='9007199254740992';Data=$userid} -MaxEvents 1 | Select Message | Format-List

这将 return 显示与此类似的消息(将一些信息更改为通用信息):

Message : The computer attempted to validate the credentials for an account.
Authentication Package:    MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
Logon Account:    jdoe
Source Workstation:    Generic-Computername
Error Code:    0x0

我正在尝试创建一种简单的方法来查找某人上次登录的计算机以便更快地进行故障排除,但我无法仅过滤掉源工作站行,我可能只是没有正确的语法来进行良好的搜索找到我正在寻找的结果,但我已经搜索了大约一个星期,但没有找到任何接近我正在寻找的结果,任何帮助都会很棒!

我不确定您要检索什么信息,但我很确定有比使用 Get-WinEvent 获取该信息更好的方法。但是,如果您只想获得 Source Workstation 的值,您可以使用正则表达式来实现:

$event = Get-WinEvent `
    -ComputerName $DC `
    -FilterHashtable @{Logname='Security';Keywords='9007199254740992';Data=$userid} `
    -MaxEvents 1 `
    | Select -expand Message 

[regex]::Match($event, 'Source Workstation:\s*(.*)\s*').Groups[1].Value