![如何在 LockoutStatus 中找到原始锁定服务器信息](https://linux22.com/image/650644/%E5%A6%82%E4%BD%95%E5%9C%A8%20LockoutStatus%20%E4%B8%AD%E6%89%BE%E5%88%B0%E5%8E%9F%E5%A7%8B%E9%94%81%E5%AE%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BF%A1%E6%81%AF.png)
我有一个帐户一直被锁定,但这种情况发生在晚上,我们无法记录日志或抓取日志。所以我想写一个 powershell 脚本来帮我记录这些日志。
我正在使用 AL TOOLs。在 ALTools 中,有一个称为 LockoutStatus 的程序,该程序中有一个称为原点锁定
我只是想知道这些信息是从哪里收集的,是来自事件还是来自用户?
我只需要原点锁定信息
请参阅下面的截图
答案1
老话题,但我想我会添加到@Zach Bolinger 的精彩帖子中,希望它能帮助到其他人。
这将输出MyUsername was locked out on MY-DC03 at 04/02/2022 09:06:24"
可能存在更合适的解析方式,LastOriginatingChangeDirectoryServerIdentity
如下所示:
CN=NTDS Settings,CN=MY-DC03,CN=Servers,CN=Core,CN=Sites,CN=Configuration,DC=MyOrg,DC=co,DC=uk
- 我选择用逗号(,)来分隔;
- 取第二个标记(ID=1),即
CN=MY-DC03
; - 然后用等号(=)将其分开;
- 最后再次取出第二个token(ID=1),也就是服务器名称
MY-DC03
。
$UserToLookup = "MyUsername"
$DomainController = "MY-DC01"
$LockedAccount = Get-ADUser $UserToLookup
$LockedObjectPath = $LockedAccount.DistinguishedName
$LockoutReplicationRecord = Get-ADReplicationAttributeMetadata -object "$LockedObjectPath" -server $DomainController | where {$_.AttributeName -eq "lockoutTime"}
$LockoutServer = (((($LockoutReplicationRecord.LastOriginatingChangeDirectoryServerIdentity).split(","))[1]).split("="))[1]
$LockoutTime = $LockoutReplicationRecord.LastOriginatingChangeTime
Write-Host "$UserToLookup was locked out on $LockoutServer at $LockoutTime"
答案2
LockoutStatus 的文档对该字段的定义如下:
原点锁定:显示锁定帐户的域控制器(
LockoutTime
对该用户的属性进行原始写入的域控制器)。
您可以从复制元数据访问属性特性。
$LockedAccount=Get-ADUser [username here - no quotes needed]
$LockedObjectPath=$LockedAccount.DistinguishedName
$DomainController=([system.directoryservices.activedirectory.domain]::GetCurrentDomain()).DomainControllers[0].Name
$LockoutReplicationRecord=Get-ADReplicationAttributeMetadata -object "$LockedObjectPath" -server $DomainController | where {$_.AttributeName -eq "lockoutTime"}
Write-Host "$($LockoutReplicationRecord.LastOriginatingChangeDirectoryServerIdentity)"
仅解析该行以获取服务器名称。
我在 2012 域上执行此操作,但我认为所有这些代码在 2008 上都可以运行。到目前为止,我尝试的所有测试用例都被具有 FSMO 角色的服务器锁定,因此我不确定这是否会给出您期望的输出。看起来您有一个很好的环境可以尝试一下。此代码仅获取列表中的第一个域控制器,我想您将循环遍历它们以获取每个域控制器上的错误密码计数。在这种情况下,替换您已经使用的任何变量,只要它是文本格式的服务器名称(不必像此代码一样是 FQDN)
我无法确认这是LockoutStatus.exe
使用的相同信息,但运行所需的时间相同,而且对我来说,输出匹配。