如何从 AD 中获取过去 30 天内未登录的域管理员用户列表?
答案1
user360071,这里有一个 PowerShell 脚本,可以执行您想要的操作。
Import-Module ActiveDirectory
$Age = 30
$When = ((Get-Date).AddDays(-$Age)).Date
$Members = (Get-ADGroupMember -Identity "Domain Admins" -Recursive).DistinguishedName
Foreach ($Member in $Members) {
Get-ADUser -Identity $Member -Property LastLogonDate | Where LastLogonDate -lt $When | Select SamAccountName,UserPrincipalName,LastLogonDate | Export-CSV -Path $env:USERPROFILE\Desktop\users.csv -NoTypeInformation -Append
}
您可以进行一点小小的更改,这样您就可以选择要查找未登录帐户的时间长度。这是更改后的版本。
Import-Module ActiveDirectory
$Age = Read-Host "Accounts that have not been logged into in the last how many days should be shown?"
$When = ((Get-Date).AddDays(-$Age)).Date
$Members = (Get-ADGroupMember -Identity "Domain Admins" -Recursive).DistinguishedName
Foreach ($Member in $Members) {
Get-ADUser -Identity $Member -Property LastLogonDate | Where LastLogonDate -lt $When | Select SamAccountName,UserPrincipalName,LastLogonDate | Export-CSV -Path $env:USERPROFILE\Desktop\users.csv -NoTypeInformation -Append
}
更新答案
您好,user360071。当您想在问题中添加另一个请求或需要澄清您要问的问题时,您可以编辑问题并保存更改。
在您的补充中,您补充说您希望能够将结果保存到 Excel 文件。
您尝试过>> users.csv
,但 Excel 文件是空的。在 PowerShell 中,您要执行的操作是| Export-CSV users.csv
。脚本已更新。
答案2
要实施用户 5870571 的建议>> users.csv
(如果您的文件是空白的 - 我的也是),请执行以下操作:
1) 将以下脚本保存到 .ps1 文件。请注意,我删除了Export-Csv
Import-Module ActiveDirectory
$Age = Read-Host "Accounts that have not been logged into in the last how many days should be shown?"
$When = ((Get-Date).AddDays(-$Age)).Date
$Members = (Get-ADGroupMember -Identity "Domain Admins" -Recursive).DistinguishedName
Foreach ($Member in $Members) {
Get-ADUser -Identity $Member -Property LastLogonDate | Where LastLogonDate -lt $When | Select SamAccountName,UserPrincipalName,LastLogonDate
}
2)保存文件后,从提升的 powershell 提示符导航到该文件并>> users.csv
在末尾添加。
例如,我命名了我的文件get-dausers.ps1
并将其保存在桌面上,打开 powershell 提示符并导航到它,然后输入.\get-dausers.ps1 >> users.csv
- 这将在桌面上生成一个 .csv 文件,并且它将不再是空的。
答案3
在 user5870571 的帖子基础上进行构建 -
我建议使用LastLogonTimestamp
ADUser 帐户的属性,而不是LastLogonDate
。
Active Directory 中的 lastLogon 与 lastLogonTimestamp
Lastlogon 仅在执行身份验证的域控制器上更新,并且不会被复制。
LastLogontimestamp 会被复制,但默认情况下,仅当它比之前的值早 14 天或更长时间时才会复制。
以下是更新后的代码。我还添加了“按 LastLogon 排序”,因为我认为它很有用。
Import-Module ActiveDirectory
$Age = Read-Host "Accounts that have not been logged into in the last how many days should be shown?"
$When = ((Get-Date).AddDays(-$Age)).Date
$Members = (Get-ADGroupMember -Identity "Domain Admins" -Recursive).DistinguishedName
Foreach ($Member in $Members) {
Get-ADUser -Filter {DistinguishedName -eq $Member} -Property LastLogonTimestamp | Where {([datetime]::FromFileTime($_.LastLogonTimestamp)) -lt $When} |
Select SamAccountName,UserPrincipalName,@{Name="LastLogon";Expression={[datetime]::FromFileTime($_.LastLogonTimestamp)}} | Sort-Object LastLogon |
Export-CSV -Path $env:USERPROFILE\Desktop\users.csv -NoTypeInformation -Append
}