Предупреждение пользователей об истечении пароля и действия учётной записи

от автора

Всем привет!
Столкнулись как-то с ситуацией, когда 1 января у многих пользователей истёк срок действия учётной записи и они были заблокированы. Соответственно не смогли работать, шквал телефонных звонков, начиная с утра 1-го числа. Было принято решение заранее предупреждать пользователей об истечении пароля и действия учётной записи по почте. С копией списка предупреждённых пользователей администратору.
Скрипты реализации под катом.

Для начала надо установить ActiveRoles Management Shell for Active Directory.

Скрипт истечении пароля

Скрипт предупреждает об истечении пароля обычных пользователей за 7 дней, за 3 дня и в день истечения. Топ-менеджеров предупреждает за 5 дней и до истечения.

Add-PSSnapin Quest.ActiveRoles.ADManagement    function send-eMail($to, $PasswordAge, $Days) { 	if ($PasswordAge -eq 0) { 		$subject = "Действие вашего пароля истекает сегодня." 	} else { 		$subject = "Действие вашего пароля истекает через $PasswordAge $Days." 	} 	write-host $to $PasswordAge 	$Enc = [Text.Encoding]::UTF8 	 	Send-MailMessage -to $to ` 			 -from "IT<it@domain.com>" ` 			 -subject "Внимание! $subject" `  		 -body "<span style='font: 11pt serif;'>Добрый день.<br/> 				$subject<br /> 				Рекомендуем изменить пароль, так как после истечения срока действия пароля Вы не сможете получить доступ к информационным ресурсам компании.<br /> 				Инструкция по смене пароля находится на портале в разделе «<a href='http://portal/Pages/Instructions.aspx'>Инструкции</a>».<br />" ` 			 -priority High ` 			 -dno onFailure ` 			 -smtpServer MAILSERVER ` 			 -BodyAsHtm ` 			 -Encoding $Enc }  function send-eMail-log($log, $to, $subject) { 	$Enc = [Text.Encoding]::UTF8 	$body = "<span style='font: 10pt tahoma;'>$log</span>" 	Send-MailMessage -to $to ` 			 -from "IT<it@domain.com>" ` 			 -subject $subject `  		 -body $body ` 			 -smtpServer MAILSERVER ` 			 -BodyAsHtm ` 			 -Encoding $Enc }  function get-dayCut($PasswordAge) { 	$Days = "дн" 	if ($PasswordAge -le 20 -and $PasswordAge -ge 5) { 		$Days = "дней" 	} 	if ($PasswordAge -le 4 -and $PasswordAge -ge 2) { 		$Days = "дня" 	} 	if ($PasswordAge -eq 1 -or $PasswordAge -eq 21) { 		$Days = "день" 	} 	return $Days } # У нас 45 дней: $PasswordAgeMax = (Get-QADObject (Get-QADRootDSE).defaultNamingContextDN).MaximumPasswordAge.days  write-host "Пароль истекает: "$PasswordAgeMax; $log = "" $logBoss = ""  # -- 7, 3 и 0 дней --------------------------------------------------------------------------------------------- Get-QADUser -SizeLimit 0 |  	Where-Object {$_.AccountIsDisabled -eq $False} | 		Where-Object {$_.PasswordNeverExpires -eq $False} | 			% { 				$PasswordAge = $PasswordAgeMax - ($_.passwordage.days) - 1 				$PasswordAge = [int]$PasswordAge   					 				if ($_.parentContainer -ne "domain/General/User") { 					if ($PasswordAge -eq 7 -or $PasswordAge -eq 3 -or $PasswordAge -eq 0) { 						$Days = get-dayCut $PasswordAge 						$addParam = $_.Title + ", " + $_.Department 						if (($_.mail).Length -gt 0) { 							send-eMail $_.mail $PasswordAge $Days		 							$addParam = $addParam + ", " + $_.mail 						}  						if ($PasswordAge -le 1) { 							$log = $log + "<span style='color:red;'>" + $_.DisplayName + ", " + $PasswordAge + " (" + $addParam + ")</span><br />" 						} else { 							$log = $log + $_.DisplayName + ", " + $PasswordAge + " (" + $addParam + ")<br />" 						} 					} 				} else { 					$Days = get-dayCut $PasswordAge; 					write-host $_.DisplayName": "$PasswordAge; 					if ($PasswordAge -le 5 -and $PasswordAge -ge 0) { 						send-eMail $_.mail $PasswordAge $Days 					} 					if ($PasswordAge -le 0) { 						$logBoss = $logBoss + $_.DisplayName + ", пароль уже истек (" + $_.mail + ", " + $_.telephoneNumber + ")<br />" 					} elseif ($PasswordAge -le 5 -and $PasswordAge -gt 0) { 						$logBoss = $logBoss + $_.DisplayName + ", пароль истекает через " + $PasswordAge + " " + $Days + " (" + $_.mail + ", " + $_.telephoneNumber + ")<br />" 					} 				} 			}  if ($log.Length -gt 0) { 	send-eMail-log $log "IT<it@domain.com>" "Журнал истечения пароля" }   if ($logBoss.Length -gt 0) { 	"admin1", "admin2", "admin3" | 		% {send-eMail-log $logBoss "$_@domain.com" "Журнал истечения пароля у директоров"} }  

Скрипт истечения действия учётной записи

Скрипт предупреждает пользователей об истечении действия учётной записи за 30, 20, 14, 7, 5 дней.

Add-PSSnapin Quest.ActiveRoles.ADManagement  function send-eMail($to,$lsDayCount) { 	write-host $to $lsDayCount; 	$Enc = [Text.Encoding]::UTF8 	Send-MailMessage -to $to ` 			 -from "IT<it@domain.com>" ` 			 -subject "Внимание! Ваша учетная запись истекает через $lsDayCount дней" `  			-body "<span style='font: 12pt serif;'>Добрый день.<br/> 				Срок действия вашей учетной записи истекает через $lsDayCount дней.</span>" ` 			 -priority High ` 			 -dno onFailure ` 			 -smtpServer MAILSERVER ` 			 -BodyAsHtm ` 			 -Encoding $Enc }  function send-eMail-log($log, $to, $subject) { 	$Enc = [Text.Encoding]::UTF8 	$body = "<span style='font: 10pt tahoma;'>" + $log + "</span>" 	#-Cc "admin1@domain.com" ` 	Send-MailMessage -to $to ` 			 -from "it@domain.com" ` 			 -subject $subject `  		-body $body ` 			 -smtpServer MAILSERVER ` 			 -BodyAsHtm ` 			 -Encoding $Enc }  function check-null($lsPar, $lbComma) { 	$lsTmp = $lsPar; 	if ($lsPar.Length -gt 0) { 		if ($lbComma) { 			$lsTmp = $lsPar + ", "; 		} 	} else { 		$lsTmp = ""; 	} 	return $lsTmp; }  # -- 5, 7, 14, 20, 30 дней ------------------------------------------------------------------------------------- $targetdate5  = ((get-date).AddDays(5)).ToShortDateString(); $targetdate7  = ((get-date).AddDays(7)).ToShortDateString(); $targetdate14 = ((get-date).AddDays(14)).ToShortDateString(); $targetdate20 = ((get-date).AddDays(20)).ToShortDateString(); $targetdate30 = ((get-date).AddDays(30)).ToShortDateString();  $gLog = ""; $gLog5 = ""; $gLog7 = ""; $gLog14 = ""; $gLog20 = ""; $gLog30 = "";  write-host $targetdate5 $targetdate7 $targetdate14 $targetdate20 $targetdate30;  Get-QADUser -SizeLimit 0 |  	Where-Object {$_.AccountExpires -ne $null} | 		Where-Object {$_.AccountIsDisabled -eq $False} | 			% { 				$gObjUser = $_; 				$gsUserOpt = ""; 				 				5,7,14,20,30 | % { 					$targetdate  = ((get-date).AddDays($_)).ToShortDateString(); 					 					if (($gObjUser.AccountExpires).ToShortDateString() -eq $targetdate) { 						write-host $gObjUser.DisplayName"`t"($gObjUser.AccountExpires).ToShortDateString(); 						if (($gObjUser.mail).Length -gt 0) { 							send-eMail $gObjUser.mail $_; 						} 						$gsUserOpt = (check-null $gObjUser.Title $TRUE) +  									 (check-null $gObjUser.Department $TRUE) +  									 (check-null $gObjUser.mail $TRUE) +  									 (check-null $gObjUser.telephoneNumber $FALSE); 						if ($gsUserOpt.Length -gt 0) { 							if ($gsUserOpt.substring($gsUserOpt.length - 2, 2) -eq ", ") { 								$gsUserOpt = $gsUserOpt.substring(0, $gsUserOpt.length - 2); 							} 							$gsUserOpt = " (" + $gsUserOpt +")"; 						} 						$gsUserOpt = $gObjUser.DisplayName + $gsUserOpt +"<br />"; 						switch ($_) { 							5  {$gLog5  = $gLog5  + $gsUserOpt; break} 							7  {$gLog7  = $gLog7  + $gsUserOpt; break} 							14 {$gLog14 = $gLog14 + $gsUserOpt; break} 							20 {$gLog20 = $gLog20 + $gsUserOpt; break} 							30 {$gLog30 = $gLog30 + $gsUserOpt; break} 						} 					} 				} 			}   if ($gLog5.Length -gt 0)  { 	$gLog = "<strong>5 дней, истекает $targetdate5</strong><br />" + $gLog5 + "<br />"}  if ($gLog7.Length -gt 0)  { 	$gLog = $gLog + "<strong>7 дней, истекает $targetdate7</strong><br />" + $gLog7 + "<br />"}  if ($gLog14.Length -gt 0) { 	$gLog = $gLog + "<strong>14 дней, истекает $targetdate14</strong><br />" + $gLog14 + "<br />"}  if ($gLog20.Length -gt 0) { 	$gLog = $gLog + "<strong>20 дней, истекает $targetdate20</strong><br />" + $gLog20 + "<br />"}  if ($gLog30.Length -gt 0) { 	$gLog = $gLog + "<strong>30 дней, истекает $targetdate30</strong><br />" + $gLog30 + "<br />"}  			 if ($gLog.Length -gt 0) { 	"admin1", "admin2", "admin3" | 		% {send-eMail-log $gLog "$_@domain.com" "Журнал истечения учетной записи"} }  

Предупреждайте пользователей заранее. Комментарии приветствуются.

ссылка на оригинал статьи http://habrahabr.ru/post/204796/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *