获取过去 30 天内未登录的域管理员用户列表?

获取过去 30 天内未登录的域管理员用户列表?

如何从 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 的帖子基础上进行构建 -

我建议使用LastLogonTimestampADUser 帐户的属性,而不是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
}

相关内容