У меня есть команда, которая будет экспортировать список пользователей, которые вошли в систему в течение 12 месяцев, но я изо всех сил пытаюсь экспортировать дату и время последнего входа в систему.
Команда выглядит следующим образом:
Search-ADAccount –AccountInActive -UsersOnly –TimeSpan 365:00:00:00 –ResultPageSize 2000 –ResultSetSize $null |?{$_.Enabled –eq $True} | Select-Object Name, SamAccountName, DistinguishedName, lastLogon| Export-CSV “C:\Users\Me\Desktop\InactiveUsers.CSV” –NoTypeInformation
Но lastLogon показывает пробел в файле CSV.
Я новичок в PowerShell. Я понимаю, что команду можно сделать намного проще.
Любая помощь в этом очень ценится.
Что-то вроде: $date= (get-date).AddDays(-90) Get-ADUser-Filter {LastLogonDate-lt $date} -Property Enabled|Where-Object {$_.Enabled -like «true»} |SelectName, SamAccountName,DistinguishedName,lastLogon|Exportt-CSV «C:\Users\Me\Desktop\InactiveUsers.CSV» -NoTypeInformation
Проблема с lastlogontimestamp заключается в том, что этот атрибут не реплицируется в реальном времени, возможна задержка в 14 дней. Если вы хотите получить точные результаты, вам следует запросить все ваши контроллеры домена и вместо этого использовать lastlogon, вы можете использовать этот ответ в качестве примера stackoverflow.com/a/68750430/15339544
Я буду честен с вами, я не понимаю этот код в URL-адресе, я могу понять, что он делает, как вы это объяснили, но как я могу настроить его для этого скрипта для пользователей, которые не вошли в систему, чтобы узнать больше чем год и отображать имена пользователей, имена, адреса электронной почты и дату последнего входа в систему, но опрашивать все контроллеры домена? (Извините, я новичок в этой области)
Search-ADAccount
не имеет возможности извлекать другие атрибуты из объектов AD, кроме атрибутов по умолчанию, вы можете использовать Get-ADUser
со сложным фильтром для запроса пользователей, которые не входили в систему в течение прошлого года. Одним из вариантов является запрос пользовательского атрибута lastLogonTimeStamp , однако при этом вы рискуете получить неточные результаты, поскольку этот атрибут не реплицируется в реальном времени. Чтобы получить точную информацию, необходимо запросить атрибут пользователя lastLogon, но, поскольку этот атрибут не реплицируется в домене, необходимо запросить все контроллеры домена, чтобы получить последний вход в систему от пользователя.
Для получения дополнительной информации по этой теме, пожалуйста, ознакомьтесь с отличной статьей TechNet: Понимание атрибутов учетной записи AD — LastLogon, LastLogonTimeStamp и LastLogonDate.
$dateLimit = [datetime]::UtcNow.AddYears(-1).ToFileTimeUtc()
$AllDCs = Get-ADDomainController -Filter *
$logons = @{}
$params = @{
LDAPFilter = -join @(
"(&" # AND, all conditions must be met
"(!samAccountName=krbtgt)" # exclude krbtgt from this query
"(!samAccountName=Guest)" # exclude Guest from this query
"(userAccountControl:1.2.840.113556.1.4.803:=2)" # object is Disabled
"(lastLogon<=$dateLimit)" # lastLogon is below the limit
")" # close AND clause
)
Properties = 'lastLogon'
}
foreach($DC in $AllDCs) {
$params['Server'] = $DC
foreach($user in Get-ADUser @params) {
# this condition is always met on first loop iteration due to ldap filtering condition
if ($logons[$user.samAccountName].LastLogon -lt $user.LastLogon) {
$logons[$user.samAccountName] = $user
}
}
}
$logons.Values | ForEach-Object {
[PSCustomObject]@{
Name = $_.Name
SamAccountName = $_.SamAccountName
DistinguishedName = $_.DistinguishedName
lastLogon = [datetime]::FromFileTimeUtc($_.lastLogon).ToString('u')
}
} | Export-CSV "C:\Users\Me\Desktop\InactiveUsers.CSV" -NoTypeInformation
Последний запрос, если бы я хотел изменить это для пользователей, которые не входили в систему в течение 6 месяцев, как бы это изменить здесь: $dateLimit = [datetime]::UtcNow.AddYears(-1).ToFileTimeUtc()
@S.Mahmood вместо этого вы можете использовать [datetime]::UtcNow.AddMonths(-6).ToFileTimeUtc()
:)
Чувак, ты спасатель жизни. Всегда полезно, как никогда спасибо еще раз.
Я хочу получить адреса электронной почты EmailAddress = $_.EmailAddress
попробовал этот код, и он не работает?
Вам нужно будет передать результат в
Get-ADUser -Properties
, чтобы получить дату последнего входа в систему.