|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Отправка почты SSL через powershell (прошу доработать скрипт) |
|
PowerShell - Отправка почты SSL через powershell (прошу доработать скрипт)
|
Новый участник Сообщения: 26 |
Профиль | Отправить PM | Цитировать Имеется небезысвестный скрипт отправки уведомления о смене пароля
Import-Module ActiveDirectory #System globalization #$ci = New-Object System.Globalization.CultureInfo("ru-RU") #SMTP server name $smtpServer = "mail.domain.local" #Creating a Mail object $msg = new-object Net.Mail.MailMessage #Creating a Mail object for report $msgr = new-object Net.Mail.MailMessage #Creating SMTP server object $smtp = new-object Net.Mail.SmtpClient($smtpServer) #E-mail structure Function EmailStructure($to,$expiryDate,$upn) { $msg.IsBodyHtml = $true $msg.From = "notification@domain.com" $msg.To.Clear() $msg.To.Add($to) $msg.Subject = "Password expiration notice" $msg.Body =</pre><code> "<html><body><font face='Arial'>This is an automatically generated message from Exchange service.<br><br><b>Please note that the password for your account <i><u>Domain\$upn</u></i> will expire on $expiryDate.</b><br><br>Please change your password immediately or at least before this date as you will be unable to access the service without contacting your administrator.</font></body></html>"</code><pre> } Function EmailStructureReport($to) { $msgr.IsBodyHtml = $true $msgr.From = "notification@domain.com" $msgr.To.Add($to) $msgr.Subject = "Script running report" $msgr.Body = </pre><code>"<html><body><font face='Arial'><b>This is a daily report.<br><br>Script has successfully completed its work.<br>$NotificationCounter users have recieved notifications:<br><br>$ListOfAccounts<br><br></b></font></body></html>"</code><pre> } #Set the target OU that will be searched for user accounts $OU = "OU=Organisation,DC=domain,DC=local" </pre><code>$ADAccounts = Get-ADUser -LDAPFilter "(objectClass=user)" -searchbase $OU -properties PasswordExpired, extensionAttribute15, PasswordNeverExpires, PasswordLastSet, Mail, Enabled | Where-object {$_.Enabled -eq $true -and $_.PasswordNeverExpires -eq $false}</code><pre> $NotificationCounter = 0 $ListOfAccounts = "" Foreach ($ADAccount in $ADAccounts) { $accountFGPP = Get-ADUserResultantPasswordPolicy $ADAccount if ($accountFGPP -ne $null) { $maxPasswordAgeTimeSpan = $accountFGPP.MaxPasswordAge } else { $maxPasswordAgeTimeSpan</pre><code> = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge</code><pre> } #Fill in the user variables $samAccountName = $ADAccount.samAccountName $userEmailAddress = $ADAccount.ExtensionAttribute15 $userPrincipalName = $ADAccount.UserPrincipalName if ($ADAccount.PasswordExpired) { Write-host "The password for account $samAccountName has expired!" } else { $ExpiryDate = $ADAccount.PasswordLastSet + $maxPasswordAgeTimeSpan $TodaysDate = Get-Date $DaysToExpire = $ExpiryDate - $TodaysDate #Calculating DaysToExpireDD to DD format (w/o fractional part and dot) $DaysToExpireDD = $DaysToExpire.ToString() -Split ("\S{17}$") Write-host </pre><code>"The password for account $samAccountName expires on: $ExpiryDate. Days left: $DaysToExpireDD"</code><pre> if (($DaysToExpire.Days -eq 15) -or </pre><code>($DaysToExpire.Days -eq 7) -or ($DaysToExpire.Days -le 3))</code><pre> { $expiryDate = $expiryDate.ToString("d",$ci) #Generate e-mail structure and send message if ($userEmailAddress) { EmailStructure $userEmailAddress $expiryDate $samAccountName $smtp.Send($msg) Write-Host </pre><code>"NOTIFICATION - $samAccountName :: e-mail was sent to $userEmailAddress"</code><pre> $NotificationCounter = $NotificationCounter + 1 $ListOfAccounts = </pre><code>$ListOfAccounts + $samAccountName + " - $DaysToExpireDD days left. Sent to $userEmailAddress<br>"</code><pre> } } } } Write-Host "SENDING REPORT TO IT DEPARTMENT" EmailStructureReport("itdepartment@domain.com") $smtp.Send($msgr) Имеется сервер EXCHANGE 2016 Про скрипт: Анонимная отправка от любого ящика работает, а вот отправка от существующего ящика нет. Подскажите пожалуйста, что необходимо добавить в код для аутентификации и авторизации, дабы отправка происходила от реального ящика. или быть может имеет смысл запускать скрипт на самом EXchange ? Всем спасибо! |
|
Отправлено: 06:08, 21-03-2018 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать |
Отправлено: 08:38, 21-03-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать Доброго времени суток, вопрос следующий:
так как у пользователей не всегда есть электронная почта, можно ли допилить скрипт, для отправки уведомления в почту руководителя пользователя? дабы все равно оповестить, хотя бы руководителя, имеющего корп.почту. спасибо. |
Отправлено: 14:45, 19-11-2018 | #3 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Добавить свойство manager:
Добавить код: $managerEmailAddress = (Get-ADUser $ADAccount.manager -Properties mail).mail if (-not $userEmailAddress -and $managerEmailAddress) { EmailStructure $managerEmailAddress $expiryDate $samAccountName $smtp.Send($msg) Write-Host </pre><code>"NOTIFICATION - $samAccountName :: e-mail was sent to $managerEmailAddress"</code><pre> $NotificationCounter = $NotificationCounter + 1 $ListOfAccounts = </pre><code>$ListOfAccounts + $samAccountName + " - $DaysToExpireDD days left. Sent to $managerEmailAddress<br>"</code><pre> } |
Отправлено: 15:26, 19-11-2018 | #4 |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать Cпасибо, а если у некоторых пользователей есть почта, а других нет, как тогда быть?
Отправляться почта будет принудительно менеджеру? или как-то можно сделать так, чтобы если есть почта- то юзеру, а если нету- тогда уже менеджеру. подскажите пожалуйста |
|
Последний раз редактировалось android63rus, 21-11-2018 в 15:36. Отправлено: 14:47, 21-11-2018 | #5 |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать
при вставке этого куска кода вот что: Get-ADUser : Не удается проверить аргумент для параметра "Identity". Аргумент имеет значение NULL. Укажите допустимое значение аргумента, после чего повторите выполнение команды. + $managerEmailAddress = (Get-ADUser $ADAccount.manager -Properties mai ... + ~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidData: ( [Get-ADUser], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADUser |
Последний раз редактировалось android63rus, 23-11-2018 в 09:17. Отправлено: 09:04, 23-11-2018 | #6 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
PowerShell - [решено] Отправка почты через PowerShell | Pavelnt | Скриптовые языки администрирования Windows | 6 | 17-08-2019 12:05 | |
CMD/BAT - blat.exe отправка почты через ком.строку | weranc | Скриптовые языки администрирования Windows | 3 | 29-05-2013 14:20 | |
[решено] Отправка почты из 1С 8.2 через ISA 2006 Std | SynergyIT | ISA Server / Microsoft Forefront TMG | 8 | 04-05-2012 14:05 | |
Интернет - Отправка почты через командную строку | Freezet | Microsoft Windows 2000/XP | 10 | 18-09-2008 11:31 | |
Отправка почты через дос команды | BigDim | Microsoft Windows NT/2000/2003 | 2 | 07-07-2006 10:40 |
|