Как создать оповещение для истекающих пользователей AD - PullRequest
0 голосов
/ 10 марта 2020

это моя первая попытка в Powershell, и я должен сказать, что понятия не имею, что я делаю.

Итак, я хочу создать скрипт, который при запуске отправляет электронное письмо администратору. со списком ADUsers, срок действия которых истекает в течение следующих 30 дней.

Это была моя первая попытка получить пользователей в качестве вывода, но это не сработало, и я понятия не имею, почему нет. Так что я не могу go включить и выполнить функцию Mail-Send. Я тоже не нашел ничего похожего на inte rnet.

Get-ADUser -Filter 'enabled -eq $true' -SearchBase "CN=Users, DC=mydomain, DC=de" -Properties $var=((get-date).AddDays(30)) -le AccountExpirationDate | Select-Object distinguishedName, AccountExpirationDate

Может ли кто-нибудь мне помочь?

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Если пользовательское свойство accountExpires равно 0 или 9223372036854775807, срок действия учетной записи никогда не истекает. Чтобы получить список учетных записей, срок действия которых истекает через определенное количество дней, вы должны сделать:

$refDate = (Get-Date).AddDays(30)
$expiringUsers = Get-ADUser -Filter 'Enabled -eq $true' -SearchBase "CN=Users,DC=mydomain,DC=de" -Properties AccountExpirationDate, accountExpires | 
    Where-Object {($_.accountExpires -gt 0 -and $_.accountExpires -ne 9223372036854775807) -and ($_.AccountExpirationDate -le $refDate)} |
    Select-Object Name, DistinguishedName, AccountExpirationDate

Далее вам необходимо отправить это администратору по электронной почте.
Существуют различные способы делая это, конечно, приведенный ниже пример отправляет результат в виде CSV-вложения.

# don't send mail if there are no expiring users found
if ($expiringUsers.Count) {
    # write the results to csv file
    $outFile = Join-Path -Path $env:TEMP -ChildPath ('{0:yyyy-MM-dd}_ExpiringUsers.csv' -f (Get-Date))
    $expiringUsers | Export-Csv -Path $outFile -NoTypeInformation

    # use splatting for cmdlets that take a lot of parameters
    $mailParams = @{ 
        SmtpServer  = 'smtp.fabrikam.com'
        From        = 'troi@fabrikam.com'
        To          = 'admin@fabrikam.com'
        Subject     = 'Expiring user accounts'
        Body        = 'Please find the list of expiring user accounts in the attachment'
        Attachments = $outFile
        # See https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/send-mailmessage
        # for more parameters you might want to use
    } 

    Send-Mailmessage @mailParams
    Write-Host "$($expiringUsers.Count) user accounts are set to expire within the next 30 days. An email has been sent."
}
else {
    Write-Host 'No user accounts are set to expire within the next 30 days'
}

Get-ADUser по умолчанию возвращает следующие свойства: DistinguishedName, Enabled, GivenName, Name ObjectClass, ObjectGUID, SamAccountName, SID, Surname и UserPrincipalName. Свойство AccountExpirationDate - это значение свойства accountExpires, конвертированное в местное время.

0 голосов
/ 10 марта 2020

Чтобы выбрать пользователей, вам нужно сделать следующее:

Get-ADUser -Filter 'enabled -eq $true' -SearchBase "CN=Users, DC=mydomain, DC=de" -Properties AccountExpirationDate| 
Where-Object {($_.Accountexpirationdate -le (get-date).AddDays(30)) -and ($_.Accountexpirationdate -ne $null)}

Сначала вы должны выбрать свойство, которое вы хотите, затем вы добавите свой объект в Where-Object и отфильтруете свое свойство. Когда вы фильтруете его, вы должны убедиться, что это поле не равно нулю, поскольку пользователи с неограниченным сроком действия имеют значение этого поля $null, а ваше пользовательское поле $_.Accountexpirationdate должно быть меньше или равно текущей дате + 30 дней. После этого вы можете выбрать необходимые поля и сохранить результат в переменной. Затем вы можете отправить его по электронной почте.

...