Как я могу получить список пользователей из AD, которые являются администраторами домена и не выполняли вход входили в систему за последние 30 дней?
Чтобы реализовать предложение пользователя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, который больше не будет пустым.
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
}
Updated Answer
Hello user360071. Когда вы хотите добавить еще один запрос к вашему вопросу или вам нужно уточнить, что вы пытаетесь задать, вы можете отредактировать вопрос и сохранить изменения.
В дополнение вы добавили, что хотите иметь возможность сохранять результаты в файл Excel.
Вы попробовали >> users.csv
, но файл Excel пуст. В PowerShell вы хотите сделать | Export-CSV users.csv
. Этим скрипты были обновлены.
Чтобы использовать сообщение пользователя5870571 -
, я бы рекомендовал использовать свойство LastLogonTimestamp
учетной записи ADUser вместо LastLogonDate
.
] lastLogon vs. lastLogonTimestamp в Active Directory
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
}