【问题标题】:Powershell Where-Object comparison with variablePowershell Where-Object 与变量的比较
【发布时间】:2021-02-08 11:43:56
【问题描述】:

我正在尝试使用 Get-Winevent 从特定用户那里收集特定的 eventID,如下所示:

$UserID=Get-ADUser -Identity Administrator | Select-Object -Property "SID"

Get-WinEvent Microsoft-Windows-TerminalServices-RDPClient/Operational |
Where-Object {$_.ID -match "1102" -and $_.UserId -match $UserID} | Format-List -Property * 

问题:当我与 $UserID 进行比较时,我没有得到任何结果。如果我与实际的 SID 进行比较,我会得到我想要的结果。我已经尝试了我能找到或想到的所有比较器,所以我认为我在这里缺少一些基本的东西,但我不知道我想学习什么。 非常感谢您的帮助!

【问题讨论】:

  • 我认为您缺少的部分可能是:$UserSID = [System.Security.Principal.NTAccount]::new("$Domain\$UserID").Translate([System.Security.Principal.SecurityIdentifier])

标签: powershell comparator


【解决方案1】:

找到解决方案,我必须使用 $USERID.SID 来指定我需要的 $USERID 中的哪个属性。

【讨论】:

  • 不错的发现。这是正确的。当您使用 Select -Property SID 时,它仍然返回一个对象,但只有该属性,因此要访问该值,您仍然需要使用该属性。如果您只想将 SID 字符串值放在 $UserID 变量中,请改用Select-Object -ExpandProperty SID
  • 是的,同样有效!谢谢你的解释。
【解决方案2】:

使用用于 get-winevent 的 filterhashtable 可能会工作并且更快。我没有在 xml 命名数据中看到用户 ID。

$UserID = Get-ADUser Administrator | % sid

Get-WinEvent @{logname = 'Microsoft-Windows-TerminalServices-RDPClient/Operational'; 
  id = 1102} | ? userid -eq $userid

【讨论】:

  • 感谢您的回答,这也有效!
猜你喜欢
  • 2018-11-30
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多