我的任务是为我们的 AD env 中的每个用户制作最后一次登录时间的报告,我显然首先向谷歌妈妈询问了一些我可以重新调整用途的东西,但找不到任何可以检查多个域控制器并协调最后一个的东西,然后吐出是否超过了任意设置的日期/天数。
这是代码:
foreach ($user in $usernames) {
$percentCmpUser = [math]::Truncate(($usernames.IndexOf($user)/$usernames.count)*100)
Write-Progress -Id 3 -Activity "Finding Inactive Accounts" -Status "$($percentCmpUser)% Complete:" -PercentComplete $percentCmpUser
$allLogons = $AllUsers | Where-Object {$_.SamAccountName -match $user}
$finalLogon = $allLogons| Sort-Object LastLogon -Descending |Select-Object -First 1
if ($finalLogon.LastLogon -lt $time.ToFileTime()) {
$inactiveAccounts += $finalLogon
}
}
Run Code Online (Sandbox Code Playgroud)
$usernames 是大约 6000 个用户名的列表
$AllUsers是一个包含 18000 个用户的列表,其中包含我希望在最终报告中访问的 10 个不同属性。我得到它的方法是为我关心的特定 OU 中的所有用户点击我们 20 个左右的 DC 中的三个。最终的脚本实际上是 6k*20 因为我确实需要点击每个 DC 以确保我不会错过任何用户的登录。
下面是如何$time计算公式为:
$DaysInactive = 60
$todayDate = …Run Code Online (Sandbox Code Playgroud)