从广告和事件查看器匹配SID

时间:2018-11-22 07:58:43

标签: powershell active-directory event-viewer

我正在尝试创建一个脚本,该脚本在AD中搜索锁定的帐户,并在事件查看器中解析安全日志,然后比较SID,如果匹配,则显示具有SID的用户的信息。 / p>

Import-Module ActiveDirectory
$PDC = "DOMAINCONTROLLER"
$UserInfo = Search-ADAccount -LockedOut
$LockedOutEvents = Get-WinEvent -ComputerName $PDC -FilterHashtable 
@{LogName='Security';Id=4740} | Sort-Object -Property * -Descending
Foreach($Event in $LockedOutEvents){
If($Event.Properties[2] -Match $UserInfo.SID.value)
{
  $Event | Select-Object -Property @(
    @{Label = 'User'; Expression = {$_.Properties[0].Value}}
    @{Label = 'DomainController'; Expression = {$_.MachineName}}
    @{Label = 'EventId'; Expression = {$_.Id}}
    @{Label = 'LockoutTimeStamp'; Expression = {$_.TimeCreated}}
    @{Label = 'Message'; Expression = {$_.Message -split "`r" | Select -First 1}}
    @{Label = 'LockoutSource'; Expression = {$_.Properties[1].Value}}
    )
}}

If语句If($Event.Properties[2] -Match $UserInfo.TargetSID)

中的参数似乎存在问题

$ Event.Properties [2]的输出如下:

 Value                                        
 -----                                        
 S-1-1-1-111111111-111111111-111111111-22222

$ UserInfo.SID.Value的输出:

S-1-1-1-111111111-111111111-111111111-11111 S-1-1-1-111111111-111111111-111111111-11111 S-1-1-1-111111111-111111111-111111111-22222 S-1-1-1-111111111-111111111-111111111-11111 S-1-1-1-111111111-111111111-111111111-11111

如您所见,在两个输出中都找到了一个SID,但是当匹配这两个时,我得到“ False”作为响应。有谁知道为什么会这样?

谢谢您的时间。

1 个答案:

答案 0 :(得分:0)

看起来您正在将SecurityIdentifier对象与字符串数组进行比较(至少该输出看起来像是一个数组-您可以使用$UserInfo.SID.value.GetType()来确保)。您当前的代码有两个问题:

  1. -Match运算符仅适用于两个字符串,因此您不能在此处使用它。但是您可以在阵列上使用Contains()
  2. 您需要将SecurityIdentifier转换为字符串。 Value属性可以做到这一点。

尝试一下:

If ($UserInfo.SID.value.Contains($Event.Properties[2].Value))