Question Get-PasswordAge
- maycry
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 119
- Remerciements reçus 0
il y a 16 ans 10 mois #4697
par maycry
Get-PasswordAge a été créé par maycry
Voici un script qui détermine l'age du password de tous les utilisateur se situant dans une OU(sous OU inclus) et qui ne sont pas désactiver.
Dans ce cas imaginons que l'age max est 110 nous voulons prévenir les utilisateurs auquel leur password est à 10 & -10 jours de son expiration
la variable $CheckNumberDayUntilExpiration est donc égal a 100
pendant 10 jour l'utilisateur recevra un mail avec le décompte au format HTML plus jolie que le format texte
et l'admin ou les admins recevra la liste des utilisateurs où leur password sont également à expiration.( Nonn format HTML)
la dernière version de Quest AD management est impératif , dumoins l'actuel car l'ancienne vous indiquera une erreur qui peut être corrigé mais dans ce cas c'est un downgrade lol.
[code:1]# this script notif password age before expiration
#This script requires the Quest AD Powershell commandlets.
#If you need them you can download them here: www.quest.com/powershell/
#
######################################################################################
#
# Chemin du fichier HTML celui qui contient le message envoyé par mail
$HTML_FileMsg = \"C:\PowerShell_SCRIPTS\Temp\NotifPassword.html\"
$HTML_FileAdmin = \"C:\PowerShell_SCRIPTS\Temp\AdminNotifPassword.html\"
$Domain = \"Domain.com\"
$Webpage = \"www.powershell.com\" # site web dans le profil utilisateur si aucun supprimer cette fonction en bas du code
$CheckNumberDayUntilExpiration = \"-100\"
$SMTP_Server = \"SMTP.EXCHANGE.COM\"
$From = \"Exchange@yourdomainm.com\"
$Subject = \"Exchange Expiration de votre mot de passe\"
$FromAdmin = \"Warning.Events@yourdomain.com\"
$ToAdmin = \"admin@yourdomain.com\"
$SubjectAdmin = \"Stats Password Expiration\"
#Unité d'organisation dans laquelle la recherche des comptes utilisateurs doit s'effectuer
$UserOU = \"OU=COMPTES,DC=yourdomain,DC=COM\"
#
######################################################################################
#
# Fonction de l'envoi de mail avec possibilité du format HTML
function Get-Email
{
param ([string]$Server, [string]$From, [string]$To, [string]$Subject, [string]$Body, [string]$Attach)
###########################
# Constitution du message #
###########################
#****************************#
# Déclaration des éléments #
# Server/TO/Subject/From #
#****************************#
$Email_Client = New-Object System.Net.Mail.SmtpClient
$Email_Client.Host = $Server
$Email_Client.Credentials = [System.Net.CredentialCache]::«»DefaultNetworkCredentials
$Email_Message = New-Object System.Net.Mail.MailMessage
$Email_Message.From = $From
$EMail_Message.IsBodyHTML = $True
$Email_Message.Subject = $Subject
$Email_Adresses = $Email_Message.To
if ($To -is \"System.Array\"«»)
{
foreach ($Adr in $To)
{
$Email_Adress = New-Object System.Net.Mail.MailAddress $Adr
$Email_Adresses.Add($Email_Adress)
}
}
else
{
$Email_Adress = New-Object System.Net.Mail.MailAddress $To
$Email_Adresses.Add($Email_Adress)
}
$WorkBody = \"\"
if ($Body -is \"System.Array\"«»)
{
foreach ($Elt in $Body)
{
if ($Elt -like \"<FILE>*\"«»)
{
$File = $Elt.SubString(6,$Elt.Length-6)
$WorkBody += \"`n\" + (Get-Content -Path $File)
}
else
{
$WorkBody += \"`n\" + $Elt
}
}
}
else
{
if ($Body -like \"<FILE>*\"«»)
{
$File = $Body.SubString(6,$Body.Length-6)
$WorkBody = Get-Content -Path $File
}
else
{
$WorkBody = $Body
}
}
$Email_Message.Body = $WorkBody
#****************************#
# OPTIONNEL #
# Piece jointe #
#****************************#
if ($Attach -eq $null)
{}
{
$Email_Attachments = $Email_Message.Attachments
{
if ($Attach -is \"System.Array\"«»)
{
foreach ($Elt in $Attach)
{
if ($Elt -like \"<REP>*\" )
{
$Dir = $Elt.SubString(5,$Elt.Length-5)
foreach ($File in (Get-ChildItem -Path $Dir -Include \"*.*\" -Name))
{
$File = $Dir + $File
$Email_Attachment = New-Object System.Net.Mail.Attachment $File
$Email_Attachments.Add($Email_Attachment)
}
}
else
{
$File = $Elt
$Email_Attachment = New-Object System.Net.Mail.Attachment $File
$Email_Attachments.Add($Email_Attachment)
}
}
}
else
{
if ($Attach -like \"<REP>*\" )
{
$Dir = $Attach.SubString(5,$Attach.Length-5)
foreach ($File in (Get-ChildItem -Path $Dir -Include \"*.*\" -Name))
{
$File = $Dir + $File
$Email_Attachment = New-Object System.Net.Mail.Attachment $File
$Email_Attachments.Add($Email_Attachment)
}
}
else
{
$File = $Attach
$Email_Attachment = New-Object System.Net.Mail.Attachment $File
$Email_Attachments.Add($Email_Attachment)
}
}
}
}
$Email_Client.Send($Email_Message)
####################################
# Fin de la fonction Accolade !! #
####################################
}
#
#================================================#
####### Notification PAssword Expiration #########
#================================================#
#Recherche des comptes utilisateurs dans Active Directory de type Non désactivé
$root = [ADSI]''
$searcher = new-object System.DirectoryServices.DirectorySearcher($root)
$searcher.filter = \"(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))\"
$LDAPFilter = \"(!userAccountControl:1.2.840.113556.1.4.803:=65536)(!userAccountControl:1.2.840.113556.1.4.803:=64)\"
$searcher.sizelimit = 5000
#On laisse un vide devant les arrêts de la sortie numérique ce qui est agaçant quand on invoque les Méthodes Add (1.2.3....)
[Void]$searcher.PropertiesToLoad.Add(\"displayname\"«»)
[Void]$searcher.PropertiesToLoad.Add(\"pwdLastSet\"«»)
[Void]$searcher.PropertiesToLoad.Add(\"mail\"«»)
#On désire chercher tous les utilisateurs
$users = $searcher.findall()
#Calcul de l'age du Password depuis le jour actuel, moment d'exécution du script
#En outre on déclare la notification de jours avant expiration
$PWDays = (Get-Date).AddDays($CheckNumberDayUntilExpiration)
#Valeur à 0 du comptage des utilisateurs se situant dans l'unité d'organisation
# ainsi que les utilisateur ayant à changer de password
$AdminUserCount = 0
$AdminUserPassword = 0
#Boucle de recherche d'information pour chaque utilisateur
foreach($user in $users)
{
#Recherche des utilisateurs dans l'OU
if ($user.path -like \"*$UserOU\"«»)
{
$AdminUserCount = $AdminUserCount + 1
#Recherche uniquement Count the passwords not changed in more than $PWDays
if ([datetime]::FromFileTime(($user.properties.pwdlastset)[0]) -le $PWDays)
{
$AdminUserPassword = $AdminUserPassword + 1
#Données d'information concernant le compte utilisateur recherché
#Write-Host $user.Properties.cn
$UserName = $User.properties.displayname
$userMail = $user.Properties.mail
$AccountUser = $UserName
$PasswordAgeMax = (Get-QADObject (Get-QADRootDSE).defaultNamingContextDN).MaximumPasswordAge.days
$PasswordAge = $PasswordAgeMax - ((Get-QADUser -Identity \"$AccountUser\"«»).passwordage.days)
$PasswordLastSet = ((Get-QADUser -Identity \"$AccountUser\"«»).passwordlastset).datetime
$PasswordExpires = ((Get-QADUser -Identity \"$AccountUser\"«»).passwordlastset.adddays(+120).addhours(+2)).datetime
$TableBeforeExpires = @{n=\"$Days BeforeExpire\";e={$PasswordAge}}
Get-QADUser -Identity \"$AccountUser\" -enabled -size 0 | where {$_.passwordAge.value -gt 0 -AND ($PasswordAge) -le $PasswordAgeMax} `
| select-object displayname,passwordAge,$TableBeforeExpires | Sort-Object -Property name | ft -AutoSize
########################################################################################################################
#################### CREATION DU FICHIER HTML QUI SERA ENVOYER AUX UTILISATEURS ########################################
########### 4 valeur sont à définir voir -ci dessous ################################
# ouverture de la création du fichier
$CreateHTML = [system.IO.File]::CreateText(\"C:\PowerShell_SCRIPTS\Temp\NotifPassword.html\"«»)
$CreateHTML.WriteLine(\"<!DOCTYPE HTML PUBLIC \"\"-//W3C//DTD HTML 4.0 Transitional//EN\"\">\"«»)
$CreateHTML.WriteLine(\"<html ES_auditInitialized=\"«»)
$CreateHTML.WriteLine(\"false><head><title>Exchange Expiration de votre mot de pass</title>\"«»)
$CreateHTML.WriteLine(\"<META http-equiv=Content-Type content='text/html; charset=windows-1252'>\"«»)
$CreateHTML.WriteLine(\"<STYLE type=text/css>\"«»)
$CreateHTML.WriteLine(\"DIV .expando {DISPLAY: block; FONT-WEIGHT: normal; FONT-SIZE: 8pt; RIGHT: 10px; COLOR: #ffffff; FONT-FAMILY: Tahoma; POSITION: absolute; TEXT-DECORATION: underline}\"«»)
$CreateHTML.WriteLine(\"TABLE {TABLE-LAYOUT: fixed; FONT-SIZE: 100%; WIDTH: 100%}\"«»)
$CreateHTML.WriteLine(\"#objshowhide {PADDING-RIGHT: 10px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; Z-INDEX: 2; CURSOR: hand; COLOR: #000000; MARGIN-RIGHT: 0px; FONT-FAMILY: Tahoma; TEXT-ALIGN: right; TEXT-DECORATION: underline; WORD-WRAP: normal}\"«»)
$CreateHTML.WriteLine(\".heading0_expanded {BORDER-RIGHT: #bbbbbb 1px solid; PADDING-RIGHT: 5em; BORDER-TOP: #bbbbbb 1px solid; DISPLAY: block; PADDING-LEFT: 8px; FONT-WEIGHT: bold; FONT-SIZE: 12pt; MARGIN-BOTTOM: -1px; MARGIN-LEFT: 0px; BORDER-LEFT: #bbbbbb 1px solid; WIDTH: 100%; CURSOR: hand; COLOR: #FFFFFF; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #bbbbbb 1px solid; FONT-FAMILY: Tahoma; POSITION: relative; HEIGHT: 2.25em; BACKGROUND-COLOR: #cc0000}\"«»)
$CreateHTML.WriteLine(\".heading1 {BORDER-RIGHT: #bbbbbb 1px solid; PADDING-RIGHT: 5em; BORDER-TOP: #bbbbbb 1px solid; DISPLAY: block; PADDING-LEFT: 16px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; MARGIN-BOTTOM: -1px; MARGIN-LEFT: 5px; BORDER-LEFT: #bbbbbb 1px solid; WIDTH: 100%; CURSOR: hand; COLOR: #ffffff; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #bbbbbb 1px solid; FONT-FAMILY: Tahoma; POSITION: relative; HEIGHT: 2.25em; BACKGROUND-COLOR: khaki}\"«»)
$CreateHTML.WriteLine(\".heading2 {BORDER-RIGHT: #bbbbbb 1px solid; PADDING-RIGHT: 5em; BORDER-TOP: #bbbbbb 1px solid; DISPLAY: block; PADDING-LEFT: 16px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; MARGIN-BOTTOM: -1px; MARGIN-LEFT: 5px; BORDER-LEFT: #bbbbbb 1px solid; WIDTH: 100%; CURSOR: hand; COLOR: #ffffff; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #bbbbbb 1px solid; FONT-FAMILY: Tahoma; POSITION: relative; HEIGHT: 2.25em; BACKGROUND-COLOR: #A5A5A5}\"«»)
$CreateHTML.WriteLine(\".tableDetail {BORDER-RIGHT: #bbbbbb 1px solid; BORDER-TOP: #bbbbbb 1px solid; DISPLAY: block; PADDING-LEFT: 16px; FONT-SIZE: 8pt;MARGIN-BOTTOM: -1px; PADDING-BOTTOM: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #bbbbbb 1px solid; WIDTH: 100%; COLOR: #000000; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #bbbbbb 1px solid; FONT-FAMILY: Tahoma; POSITION: relative; BACKGROUND-COLOR: #f9f9f9}\"«»)
$CreateHTML.WriteLine(\".filler {BORDER-RIGHT: medium none; BORDER-TOP: medium none; DISPLAY: block; BACKGROUND: none transparent scroll repeat 0% 0%; MARGIN-BOTTOM: -1px; FONT: 100%/8px Tahoma; MARGIN-LEFT: 43px; BORDER-LEFT: medium none; COLOR: #ffffff; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: medium none; POSITION: relative}\"«»)
$CreateHTML.WriteLine(\".Solidfiller {BORDER-RIGHT: medium none; BORDER-TOP: medium none; DISPLAY: block; BACKGROUND: none transparent scroll repeat 0% 0%; MARGIN-BOTTOM: -1px; FONT: 100%/8px Tahoma; MARGIN-LEFT: 0px; BORDER-LEFT: medium none; COLOR: #000000; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: medium none; POSITION: relative; BACKGROUND-COLOR: #000000}\"«»)
$CreateHTML.WriteLine(\"td {VERTICAL-ALIGN: TOP; FONT-FAMILY: Tahoma}\"«»)
$CreateHTML.WriteLine(\"th {VERTICAL-ALIGN: TOP; COLOR: #cc0000; TEXT-ALIGN: left}\"«»)
$CreateHTML.WriteLine(\"</STYLE>\"«»)
$CreateHTML.WriteLine(\"</HEAD>\"«»)
$CreateHTML.WriteLine(\"<BODY bgcolor=\"\"#DDDDDD\"\">\"«»)
$CreateHTML.WriteLine(\"<p><b><font face=\"\"Aria\"\"l\"\" size=\"\"5\"\">\"«»)
$CreateHTML.WriteLine(\"Notification de rappel <hr size=\"\"8\"\" color=\"\"#CC0000\"\"></font></b>\"«»)
$CreateHTML.WriteLine(\"<font face=\"\"verdana\"\" size=\"\"1\"\"><b><i>Microsoft Exchange 2007</i></b></font><br>\"«»)
$CreateHTML.WriteLine(\"<font face=\"\"verdana\"\" size=\"\"1\"\">Domaine ==>$domain\"«»)
$CreateHTML.WriteLine(\"</font></p>\"«»)
$CreateHTML.WriteLine(\"<TABLE cellSpacing=0 cellPadding=0>\"«»)
$CreateHTML.WriteLine(\"<TBODY>\"«»)
$CreateHTML.WriteLine(\"<TR>\"«»)
$CreateHTML.WriteLine(\"<TD>\"«»)
$CreateHTML.WriteLine(\"<DIV id=objshowhide tabIndex=0><FONT face=Arial></FONT></DIV>\"«»)
$CreateHTML.WriteLine(\"</TD>\"«»)
$CreateHTML.WriteLine(\"</TR>\"«»)
$CreateHTML.WriteLine(\"</TBODY>\"«»)
$CreateHTML.WriteLine(\"</TABLE>\"«»)
$CreateHTML.WriteLine(\"<DIV class=heading0_expanded>\"«»)
#######################################
# Information Compte utilisateur #
$CreateHTML.WriteLine(\"<SPAN class=sectionTitle tabIndex=0><center>$AccountUser</center></SPAN>\"«»)
#######################################
$CreateHTML.WriteLine(\"<A class=expando href='#'></A>\"«»)
$CreateHTML.WriteLine(\"</DIV>\"«»)
$CreateHTML.WriteLine(\"<DIV class=filler></DIV>\"«»)
$CreateHTML.WriteLine(\"<DIV class=container>\"«»)
$CreateHTML.WriteLine(\"<DIV class=heading1>\"«»)
$CreateHTML.WriteLine(\"<SPAN class=sectionTitle tabIndex=0><font face=\"\"verdana\"\" color=\"\"black\"\" \"\"size=\"\"1\"\">Etat de votre compte</font></SPAN>\"«»)
$CreateHTML.WriteLine(\"<A class=expando href='#'></A>\"«»)
$CreateHTML.WriteLine(\"</DIV>\"«»)
$CreateHTML.WriteLine(\"<DIV class=container>\"«»)
$CreateHTML.WriteLine(\"<DIV class=tableDetail>\"«»)
$CreateHTML.WriteLine(\"<TABLE>\"«»)
$CreateHTML.WriteLine(\"<tr>\"«»)
#######################################
# Information PasswordLastSEt #
$CreateHTML.WriteLine(\"<th width='25%'><b>Date d'initialisation de votre MOT DE PASSE:</b></font></th>\"«»)
$CreateHTML.WriteLine(\"<td width='75%'> \"«»)
$CreateHTML.WriteLine(\"$PasswordLastSet \"«»)
#######################################
$CreateHTML.WriteLine(\"</font></td>\"«»)
$CreateHTML.WriteLine(\"</tr>\"«»)
$CreateHTML.WriteLine(\"<tr>\"«»)
#######################################
# Information Password Expire #
$CreateHTML.WriteLine(\"<th width='25%'><b>Date d'expiration de votre MOT DE PASSE:</b></font></th>\"«»)
$CreateHTML.WriteLine(\"<td width='75%'>$PasswordExpires </font></td>\"«»)
#######################################
$CreateHTML.WriteLine(\"</tr>\"«»)
$CreateHTML.WriteLine(\"<tr>\"«»)
#######################################
# Information Password expire dans tant de jour #
$CreateHTML.WriteLine(\"<th width='25%'><b>Votre MOT DE PASS expire dans </b></font></th>\"«»)
$CreateHTML.WriteLine(\"<td width='75%'>\"«»)
$CreateHTML.WriteLine(\"$PasswordAge jours !!\"«»)
#######################################
$CreateHTML.WriteLine(\"</font></td>\"«»)
$CreateHTML.WriteLine(\"</tr>\"«»)
$CreateHTML.WriteLine(\"</tr>\"«»)
$CreateHTML.WriteLine(\"</TABLE>\"«»)
$CreateHTML.WriteLine(\"</DIV>\"«»)
$CreateHTML.WriteLine(\"<font face=\"\"verdana\"\" color =\"\"blue\"\" size=\"\"3\"\"> <b><center>Veuilez changer votre mot de passe avant que celui-ci arrive a terme</center></b></font>\"«»)
$CreateHTML.WriteLine(\"<font face=\"\"verdana\"\" color =\"\"black\"\" size=\"\"1\"\"> <b><center>par le biais de Outlook Web Acces pour les utilisateurs externe/interne</center></b></font>\"«»)
$CreateHTML.WriteLine(\"<font face=\"\"verdana\"\" color =\"\"black\"\" size=\"\"1\"\"> <b><center>ou via l'option Modifier le mot de passe à l'aide des combinaison de touche CTRL+ALT+SUPR de votre clavier pour les utilisateurs interne(Clichy) uniquement</center></b></font>\"«»)
$CreateHTML.WriteLine(\"</DIV>\"«»)
#########################\"OPTIONAL LOGO COMPAGNY #########################
#$CreateHTML.WriteLine(\"<center><img src=\"\"http://url.jpg\"\" </></center>\"«»)
$CreateHTML.WriteLine(\"</body>\"«»)
$CreateHTML.WriteLine(\"</html>\"«»)
# fermeture de la création du fichier
$CreateHTML.close()
# Lecture du fichier HTML puis on envoi
if (Test-Path $HTML_FileMsg)
{
$ReadHTML = Get-Content \"$HTML_FileMsg\"
(Get-Email -server $SMTP_Server -From $From -To $userMail -Subject $Subject -body \"$readHTML\"«»).waitforexit
Start-Sleep 2
Remove-Item \"$HTML_FileMsg\" -Confirm:$false
}
else {}
}
}
}
if ($AdminUserPassword -gt 0)
{
$DaysUntilExpiration = @{n=\"Days Until Expiration \";e={$PasswordAgeMax-$_.passwordAge.days}}
$StatisticForAdmin = Get-QADUser -WebPage \"$webpage\" -enabled -size 0 | where {$_.passwordAge -gt
0 -AND ($PasswordAgeMax -$_.passwordAge.days) -le $PasswordAge} | select-object name,email,passwordAge,$DaysUntilExpiration | Sort-Object -Property name
\"Total Account User : $AdminUserCount \" > $HTML_FileAdmin
\"Number Users Cannot change password in 100 days: $AdminUserPassword \" >> $HTML_FileAdmin
$StatisticForAdmin | ConvertTo-Html >> $HTML_FileAdmin
$ReadHTMLAdmin = Get-Content \"$HTML_FileAdmin\"
(Get-Email -server $SMTP_Server -From $FromAdmin -To $ToAdmin -Subject $SubjectAdmin -body \"$ReadHTMLAdmin\"«»).waitforexit
Start-Sleep 2
Remove-Item \"$HTML_FileAdmin\" -Confirm:$false}
else
{}[/code:1]<br><br>Message édité par: chris, à: 21/05/09 16:40
Dans ce cas imaginons que l'age max est 110 nous voulons prévenir les utilisateurs auquel leur password est à 10 & -10 jours de son expiration
la variable $CheckNumberDayUntilExpiration est donc égal a 100
pendant 10 jour l'utilisateur recevra un mail avec le décompte au format HTML plus jolie que le format texte
et l'admin ou les admins recevra la liste des utilisateurs où leur password sont également à expiration.( Nonn format HTML)
la dernière version de Quest AD management est impératif , dumoins l'actuel car l'ancienne vous indiquera une erreur qui peut être corrigé mais dans ce cas c'est un downgrade lol.
[code:1]# this script notif password age before expiration
#This script requires the Quest AD Powershell commandlets.
#If you need them you can download them here: www.quest.com/powershell/
#
######################################################################################
#
# Chemin du fichier HTML celui qui contient le message envoyé par mail
$HTML_FileMsg = \"C:\PowerShell_SCRIPTS\Temp\NotifPassword.html\"
$HTML_FileAdmin = \"C:\PowerShell_SCRIPTS\Temp\AdminNotifPassword.html\"
$Domain = \"Domain.com\"
$Webpage = \"www.powershell.com\" # site web dans le profil utilisateur si aucun supprimer cette fonction en bas du code
$CheckNumberDayUntilExpiration = \"-100\"
$SMTP_Server = \"SMTP.EXCHANGE.COM\"
$From = \"Exchange@yourdomainm.com\"
$Subject = \"Exchange Expiration de votre mot de passe\"
$FromAdmin = \"Warning.Events@yourdomain.com\"
$ToAdmin = \"admin@yourdomain.com\"
$SubjectAdmin = \"Stats Password Expiration\"
#Unité d'organisation dans laquelle la recherche des comptes utilisateurs doit s'effectuer
$UserOU = \"OU=COMPTES,DC=yourdomain,DC=COM\"
#
######################################################################################
#
# Fonction de l'envoi de mail avec possibilité du format HTML
function Get-Email
{
param ([string]$Server, [string]$From, [string]$To, [string]$Subject, [string]$Body, [string]$Attach)
###########################
# Constitution du message #
###########################
#****************************#
# Déclaration des éléments #
# Server/TO/Subject/From #
#****************************#
$Email_Client = New-Object System.Net.Mail.SmtpClient
$Email_Client.Host = $Server
$Email_Client.Credentials = [System.Net.CredentialCache]::«»DefaultNetworkCredentials
$Email_Message = New-Object System.Net.Mail.MailMessage
$Email_Message.From = $From
$EMail_Message.IsBodyHTML = $True
$Email_Message.Subject = $Subject
$Email_Adresses = $Email_Message.To
if ($To -is \"System.Array\"«»)
{
foreach ($Adr in $To)
{
$Email_Adress = New-Object System.Net.Mail.MailAddress $Adr
$Email_Adresses.Add($Email_Adress)
}
}
else
{
$Email_Adress = New-Object System.Net.Mail.MailAddress $To
$Email_Adresses.Add($Email_Adress)
}
$WorkBody = \"\"
if ($Body -is \"System.Array\"«»)
{
foreach ($Elt in $Body)
{
if ($Elt -like \"<FILE>*\"«»)
{
$File = $Elt.SubString(6,$Elt.Length-6)
$WorkBody += \"`n\" + (Get-Content -Path $File)
}
else
{
$WorkBody += \"`n\" + $Elt
}
}
}
else
{
if ($Body -like \"<FILE>*\"«»)
{
$File = $Body.SubString(6,$Body.Length-6)
$WorkBody = Get-Content -Path $File
}
else
{
$WorkBody = $Body
}
}
$Email_Message.Body = $WorkBody
#****************************#
# OPTIONNEL #
# Piece jointe #
#****************************#
if ($Attach -eq $null)
{}
{
$Email_Attachments = $Email_Message.Attachments
{
if ($Attach -is \"System.Array\"«»)
{
foreach ($Elt in $Attach)
{
if ($Elt -like \"<REP>*\" )
{
$Dir = $Elt.SubString(5,$Elt.Length-5)
foreach ($File in (Get-ChildItem -Path $Dir -Include \"*.*\" -Name))
{
$File = $Dir + $File
$Email_Attachment = New-Object System.Net.Mail.Attachment $File
$Email_Attachments.Add($Email_Attachment)
}
}
else
{
$File = $Elt
$Email_Attachment = New-Object System.Net.Mail.Attachment $File
$Email_Attachments.Add($Email_Attachment)
}
}
}
else
{
if ($Attach -like \"<REP>*\" )
{
$Dir = $Attach.SubString(5,$Attach.Length-5)
foreach ($File in (Get-ChildItem -Path $Dir -Include \"*.*\" -Name))
{
$File = $Dir + $File
$Email_Attachment = New-Object System.Net.Mail.Attachment $File
$Email_Attachments.Add($Email_Attachment)
}
}
else
{
$File = $Attach
$Email_Attachment = New-Object System.Net.Mail.Attachment $File
$Email_Attachments.Add($Email_Attachment)
}
}
}
}
$Email_Client.Send($Email_Message)
####################################
# Fin de la fonction Accolade !! #
####################################
}
#
#================================================#
####### Notification PAssword Expiration #########
#================================================#
#Recherche des comptes utilisateurs dans Active Directory de type Non désactivé
$root = [ADSI]''
$searcher = new-object System.DirectoryServices.DirectorySearcher($root)
$searcher.filter = \"(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))\"
$LDAPFilter = \"(!userAccountControl:1.2.840.113556.1.4.803:=65536)(!userAccountControl:1.2.840.113556.1.4.803:=64)\"
$searcher.sizelimit = 5000
#On laisse un vide devant les arrêts de la sortie numérique ce qui est agaçant quand on invoque les Méthodes Add (1.2.3....)
[Void]$searcher.PropertiesToLoad.Add(\"displayname\"«»)
[Void]$searcher.PropertiesToLoad.Add(\"pwdLastSet\"«»)
[Void]$searcher.PropertiesToLoad.Add(\"mail\"«»)
#On désire chercher tous les utilisateurs
$users = $searcher.findall()
#Calcul de l'age du Password depuis le jour actuel, moment d'exécution du script
#En outre on déclare la notification de jours avant expiration
$PWDays = (Get-Date).AddDays($CheckNumberDayUntilExpiration)
#Valeur à 0 du comptage des utilisateurs se situant dans l'unité d'organisation
# ainsi que les utilisateur ayant à changer de password
$AdminUserCount = 0
$AdminUserPassword = 0
#Boucle de recherche d'information pour chaque utilisateur
foreach($user in $users)
{
#Recherche des utilisateurs dans l'OU
if ($user.path -like \"*$UserOU\"«»)
{
$AdminUserCount = $AdminUserCount + 1
#Recherche uniquement Count the passwords not changed in more than $PWDays
if ([datetime]::FromFileTime(($user.properties.pwdlastset)[0]) -le $PWDays)
{
$AdminUserPassword = $AdminUserPassword + 1
#Données d'information concernant le compte utilisateur recherché
#Write-Host $user.Properties.cn
$UserName = $User.properties.displayname
$userMail = $user.Properties.mail
$AccountUser = $UserName
$PasswordAgeMax = (Get-QADObject (Get-QADRootDSE).defaultNamingContextDN).MaximumPasswordAge.days
$PasswordAge = $PasswordAgeMax - ((Get-QADUser -Identity \"$AccountUser\"«»).passwordage.days)
$PasswordLastSet = ((Get-QADUser -Identity \"$AccountUser\"«»).passwordlastset).datetime
$PasswordExpires = ((Get-QADUser -Identity \"$AccountUser\"«»).passwordlastset.adddays(+120).addhours(+2)).datetime
$TableBeforeExpires = @{n=\"$Days BeforeExpire\";e={$PasswordAge}}
Get-QADUser -Identity \"$AccountUser\" -enabled -size 0 | where {$_.passwordAge.value -gt 0 -AND ($PasswordAge) -le $PasswordAgeMax} `
| select-object displayname,passwordAge,$TableBeforeExpires | Sort-Object -Property name | ft -AutoSize
########################################################################################################################
#################### CREATION DU FICHIER HTML QUI SERA ENVOYER AUX UTILISATEURS ########################################
########### 4 valeur sont à définir voir -ci dessous ################################
# ouverture de la création du fichier
$CreateHTML = [system.IO.File]::CreateText(\"C:\PowerShell_SCRIPTS\Temp\NotifPassword.html\"«»)
$CreateHTML.WriteLine(\"<!DOCTYPE HTML PUBLIC \"\"-//W3C//DTD HTML 4.0 Transitional//EN\"\">\"«»)
$CreateHTML.WriteLine(\"<html ES_auditInitialized=\"«»)
$CreateHTML.WriteLine(\"false><head><title>Exchange Expiration de votre mot de pass</title>\"«»)
$CreateHTML.WriteLine(\"<META http-equiv=Content-Type content='text/html; charset=windows-1252'>\"«»)
$CreateHTML.WriteLine(\"<STYLE type=text/css>\"«»)
$CreateHTML.WriteLine(\"DIV .expando {DISPLAY: block; FONT-WEIGHT: normal; FONT-SIZE: 8pt; RIGHT: 10px; COLOR: #ffffff; FONT-FAMILY: Tahoma; POSITION: absolute; TEXT-DECORATION: underline}\"«»)
$CreateHTML.WriteLine(\"TABLE {TABLE-LAYOUT: fixed; FONT-SIZE: 100%; WIDTH: 100%}\"«»)
$CreateHTML.WriteLine(\"#objshowhide {PADDING-RIGHT: 10px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; Z-INDEX: 2; CURSOR: hand; COLOR: #000000; MARGIN-RIGHT: 0px; FONT-FAMILY: Tahoma; TEXT-ALIGN: right; TEXT-DECORATION: underline; WORD-WRAP: normal}\"«»)
$CreateHTML.WriteLine(\".heading0_expanded {BORDER-RIGHT: #bbbbbb 1px solid; PADDING-RIGHT: 5em; BORDER-TOP: #bbbbbb 1px solid; DISPLAY: block; PADDING-LEFT: 8px; FONT-WEIGHT: bold; FONT-SIZE: 12pt; MARGIN-BOTTOM: -1px; MARGIN-LEFT: 0px; BORDER-LEFT: #bbbbbb 1px solid; WIDTH: 100%; CURSOR: hand; COLOR: #FFFFFF; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #bbbbbb 1px solid; FONT-FAMILY: Tahoma; POSITION: relative; HEIGHT: 2.25em; BACKGROUND-COLOR: #cc0000}\"«»)
$CreateHTML.WriteLine(\".heading1 {BORDER-RIGHT: #bbbbbb 1px solid; PADDING-RIGHT: 5em; BORDER-TOP: #bbbbbb 1px solid; DISPLAY: block; PADDING-LEFT: 16px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; MARGIN-BOTTOM: -1px; MARGIN-LEFT: 5px; BORDER-LEFT: #bbbbbb 1px solid; WIDTH: 100%; CURSOR: hand; COLOR: #ffffff; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #bbbbbb 1px solid; FONT-FAMILY: Tahoma; POSITION: relative; HEIGHT: 2.25em; BACKGROUND-COLOR: khaki}\"«»)
$CreateHTML.WriteLine(\".heading2 {BORDER-RIGHT: #bbbbbb 1px solid; PADDING-RIGHT: 5em; BORDER-TOP: #bbbbbb 1px solid; DISPLAY: block; PADDING-LEFT: 16px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; MARGIN-BOTTOM: -1px; MARGIN-LEFT: 5px; BORDER-LEFT: #bbbbbb 1px solid; WIDTH: 100%; CURSOR: hand; COLOR: #ffffff; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #bbbbbb 1px solid; FONT-FAMILY: Tahoma; POSITION: relative; HEIGHT: 2.25em; BACKGROUND-COLOR: #A5A5A5}\"«»)
$CreateHTML.WriteLine(\".tableDetail {BORDER-RIGHT: #bbbbbb 1px solid; BORDER-TOP: #bbbbbb 1px solid; DISPLAY: block; PADDING-LEFT: 16px; FONT-SIZE: 8pt;MARGIN-BOTTOM: -1px; PADDING-BOTTOM: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #bbbbbb 1px solid; WIDTH: 100%; COLOR: #000000; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #bbbbbb 1px solid; FONT-FAMILY: Tahoma; POSITION: relative; BACKGROUND-COLOR: #f9f9f9}\"«»)
$CreateHTML.WriteLine(\".filler {BORDER-RIGHT: medium none; BORDER-TOP: medium none; DISPLAY: block; BACKGROUND: none transparent scroll repeat 0% 0%; MARGIN-BOTTOM: -1px; FONT: 100%/8px Tahoma; MARGIN-LEFT: 43px; BORDER-LEFT: medium none; COLOR: #ffffff; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: medium none; POSITION: relative}\"«»)
$CreateHTML.WriteLine(\".Solidfiller {BORDER-RIGHT: medium none; BORDER-TOP: medium none; DISPLAY: block; BACKGROUND: none transparent scroll repeat 0% 0%; MARGIN-BOTTOM: -1px; FONT: 100%/8px Tahoma; MARGIN-LEFT: 0px; BORDER-LEFT: medium none; COLOR: #000000; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: medium none; POSITION: relative; BACKGROUND-COLOR: #000000}\"«»)
$CreateHTML.WriteLine(\"td {VERTICAL-ALIGN: TOP; FONT-FAMILY: Tahoma}\"«»)
$CreateHTML.WriteLine(\"th {VERTICAL-ALIGN: TOP; COLOR: #cc0000; TEXT-ALIGN: left}\"«»)
$CreateHTML.WriteLine(\"</STYLE>\"«»)
$CreateHTML.WriteLine(\"</HEAD>\"«»)
$CreateHTML.WriteLine(\"<BODY bgcolor=\"\"#DDDDDD\"\">\"«»)
$CreateHTML.WriteLine(\"<p><b><font face=\"\"Aria\"\"l\"\" size=\"\"5\"\">\"«»)
$CreateHTML.WriteLine(\"Notification de rappel <hr size=\"\"8\"\" color=\"\"#CC0000\"\"></font></b>\"«»)
$CreateHTML.WriteLine(\"<font face=\"\"verdana\"\" size=\"\"1\"\"><b><i>Microsoft Exchange 2007</i></b></font><br>\"«»)
$CreateHTML.WriteLine(\"<font face=\"\"verdana\"\" size=\"\"1\"\">Domaine ==>$domain\"«»)
$CreateHTML.WriteLine(\"</font></p>\"«»)
$CreateHTML.WriteLine(\"<TABLE cellSpacing=0 cellPadding=0>\"«»)
$CreateHTML.WriteLine(\"<TBODY>\"«»)
$CreateHTML.WriteLine(\"<TR>\"«»)
$CreateHTML.WriteLine(\"<TD>\"«»)
$CreateHTML.WriteLine(\"<DIV id=objshowhide tabIndex=0><FONT face=Arial></FONT></DIV>\"«»)
$CreateHTML.WriteLine(\"</TD>\"«»)
$CreateHTML.WriteLine(\"</TR>\"«»)
$CreateHTML.WriteLine(\"</TBODY>\"«»)
$CreateHTML.WriteLine(\"</TABLE>\"«»)
$CreateHTML.WriteLine(\"<DIV class=heading0_expanded>\"«»)
#######################################
# Information Compte utilisateur #
$CreateHTML.WriteLine(\"<SPAN class=sectionTitle tabIndex=0><center>$AccountUser</center></SPAN>\"«»)
#######################################
$CreateHTML.WriteLine(\"<A class=expando href='#'></A>\"«»)
$CreateHTML.WriteLine(\"</DIV>\"«»)
$CreateHTML.WriteLine(\"<DIV class=filler></DIV>\"«»)
$CreateHTML.WriteLine(\"<DIV class=container>\"«»)
$CreateHTML.WriteLine(\"<DIV class=heading1>\"«»)
$CreateHTML.WriteLine(\"<SPAN class=sectionTitle tabIndex=0><font face=\"\"verdana\"\" color=\"\"black\"\" \"\"size=\"\"1\"\">Etat de votre compte</font></SPAN>\"«»)
$CreateHTML.WriteLine(\"<A class=expando href='#'></A>\"«»)
$CreateHTML.WriteLine(\"</DIV>\"«»)
$CreateHTML.WriteLine(\"<DIV class=container>\"«»)
$CreateHTML.WriteLine(\"<DIV class=tableDetail>\"«»)
$CreateHTML.WriteLine(\"<TABLE>\"«»)
$CreateHTML.WriteLine(\"<tr>\"«»)
#######################################
# Information PasswordLastSEt #
$CreateHTML.WriteLine(\"<th width='25%'><b>Date d'initialisation de votre MOT DE PASSE:</b></font></th>\"«»)
$CreateHTML.WriteLine(\"<td width='75%'> \"«»)
$CreateHTML.WriteLine(\"$PasswordLastSet \"«»)
#######################################
$CreateHTML.WriteLine(\"</font></td>\"«»)
$CreateHTML.WriteLine(\"</tr>\"«»)
$CreateHTML.WriteLine(\"<tr>\"«»)
#######################################
# Information Password Expire #
$CreateHTML.WriteLine(\"<th width='25%'><b>Date d'expiration de votre MOT DE PASSE:</b></font></th>\"«»)
$CreateHTML.WriteLine(\"<td width='75%'>$PasswordExpires </font></td>\"«»)
#######################################
$CreateHTML.WriteLine(\"</tr>\"«»)
$CreateHTML.WriteLine(\"<tr>\"«»)
#######################################
# Information Password expire dans tant de jour #
$CreateHTML.WriteLine(\"<th width='25%'><b>Votre MOT DE PASS expire dans </b></font></th>\"«»)
$CreateHTML.WriteLine(\"<td width='75%'>\"«»)
$CreateHTML.WriteLine(\"$PasswordAge jours !!\"«»)
#######################################
$CreateHTML.WriteLine(\"</font></td>\"«»)
$CreateHTML.WriteLine(\"</tr>\"«»)
$CreateHTML.WriteLine(\"</tr>\"«»)
$CreateHTML.WriteLine(\"</TABLE>\"«»)
$CreateHTML.WriteLine(\"</DIV>\"«»)
$CreateHTML.WriteLine(\"<font face=\"\"verdana\"\" color =\"\"blue\"\" size=\"\"3\"\"> <b><center>Veuilez changer votre mot de passe avant que celui-ci arrive a terme</center></b></font>\"«»)
$CreateHTML.WriteLine(\"<font face=\"\"verdana\"\" color =\"\"black\"\" size=\"\"1\"\"> <b><center>par le biais de Outlook Web Acces pour les utilisateurs externe/interne</center></b></font>\"«»)
$CreateHTML.WriteLine(\"<font face=\"\"verdana\"\" color =\"\"black\"\" size=\"\"1\"\"> <b><center>ou via l'option Modifier le mot de passe à l'aide des combinaison de touche CTRL+ALT+SUPR de votre clavier pour les utilisateurs interne(Clichy) uniquement</center></b></font>\"«»)
$CreateHTML.WriteLine(\"</DIV>\"«»)
#########################\"OPTIONAL LOGO COMPAGNY #########################
#$CreateHTML.WriteLine(\"<center><img src=\"\"http://url.jpg\"\" </></center>\"«»)
$CreateHTML.WriteLine(\"</body>\"«»)
$CreateHTML.WriteLine(\"</html>\"«»)
# fermeture de la création du fichier
$CreateHTML.close()
# Lecture du fichier HTML puis on envoi
if (Test-Path $HTML_FileMsg)
{
$ReadHTML = Get-Content \"$HTML_FileMsg\"
(Get-Email -server $SMTP_Server -From $From -To $userMail -Subject $Subject -body \"$readHTML\"«»).waitforexit
Start-Sleep 2
Remove-Item \"$HTML_FileMsg\" -Confirm:$false
}
else {}
}
}
}
if ($AdminUserPassword -gt 0)
{
$DaysUntilExpiration = @{n=\"Days Until Expiration \";e={$PasswordAgeMax-$_.passwordAge.days}}
$StatisticForAdmin = Get-QADUser -WebPage \"$webpage\" -enabled -size 0 | where {$_.passwordAge -gt
0 -AND ($PasswordAgeMax -$_.passwordAge.days) -le $PasswordAge} | select-object name,email,passwordAge,$DaysUntilExpiration | Sort-Object -Property name
\"Total Account User : $AdminUserCount \" > $HTML_FileAdmin
\"Number Users Cannot change password in 100 days: $AdminUserPassword \" >> $HTML_FileAdmin
$StatisticForAdmin | ConvertTo-Html >> $HTML_FileAdmin
$ReadHTMLAdmin = Get-Content \"$HTML_FileAdmin\"
(Get-Email -server $SMTP_Server -From $FromAdmin -To $ToAdmin -Subject $SubjectAdmin -body \"$ReadHTMLAdmin\"«»).waitforexit
Start-Sleep 2
Remove-Item \"$HTML_FileAdmin\" -Confirm:$false}
else
{}[/code:1]<br><br>Message édité par: chris, à: 21/05/09 16:40
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 16 ans 10 mois #4698
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Get-PasswordAge
Joli !
Tu devrais placer le code dans une section de code, voir le placer en pièce jointe.
Tu devrais placer le code dans une section de code, voir le placer en pièce jointe.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- maycry
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 119
- Remerciements reçus 0
il y a 16 ans 9 mois #4699
par maycry
Réponse de maycry sur le sujet Re:Get-PasswordAge
c'est fait et c'est plus propre pour le visualiser
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.073 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Contributions à la communauté
- Get-PasswordAge