Trier des informations récupérées dans l'AD
Résolu
Utilisateur anonyme
-
akewl Messages postés 244 Date d'inscription Statut Membre Dernière intervention -
akewl Messages postés 244 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai fait un script PowerShell récupérant dans l'active directory les dates d'expirations des utilisateurs du mois à venir, les mettant dans un tableau et les envoyant par mail.
Les informations de mon tableau sont triées de la sorte :
Nom Date de création Date d'expiration Jours restants
Je souhaiterai que les utilisateurs soient triés en fonction du nombre de jours restants avant la désactivation du compte mais je n'y arrive pas ;(
Voici mon script :
Import-Module ActiveDirectory
$date = Get-Date # met la date dans la variable date
$exp = $date.AddMonths(1) # Ajoute un mois à la date pour prendre tout ce qui est entre aujourd'hui et un mois de plus
$file = "$HOME\Expiresous1mois.htm"
$comptes = Get-ADUser -Filter {AccountExpirationDate -ge $date -and AccountExpirationDate -le $exp} -Properties Name,WhenCreated,AccountExpirationDate
$head = @'
<head>
<title>Compte expire sous 1 mois</title>
<style = type="text/css">
body {
background-color:white;
}
table {
border-width: 3px; border-style: solid;border-color: black;border-collapse: collapse;
}
th {
border-width: 1px;padding: 0px;border-style: solid;border-color: blue;
}
td {
text-align: center;border-width: 1px;padding: 5px;border-style: solid;border-color: blue;
}
</style>
</head>
<body>
<H2>Expiration prochaine des comptes AD (<1mois)</H2>
</body>
</html>
'@
$comptes |
select-object @{e={$_.Name};n='Nom commun'},
@{e={$_.whencreated};n='Date de création'},
@{e={$_.AccountExpirationDate};n='Expire'},
@{e={(($_.AccountExpirationDate) - $date).days};n='Jours restants'}|
Sort-Object (($_.AccountExpirationDate) - $date).days,
ConvertTo-Html '
-Property "Nom commun","Date de création","Expire","Jours restants" '
-head $head |
Out-File $file
$mail_from = "xxxxxxx"
$mail_to = "xxxxxxx"
$mail_server = "xxxxxxx"
$mail_object = 'Expiration prochaine des comptes AD'
$mail_content = get-content $file
$message = new-object System.Net.Mail.MailMessage $mail_from, $mail_to, $mail_object, $mail_content
#$attachment = new-object System.Net.Mail.Attachment $file
#$message.Attachments.Add($attachment)
$message.IsBodyHtml = $true
$SMTPclient = new-object System.Net.Mail.SmtpClient $mail_server
$SMTPclient.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
$SMTPclient.Send($message)
J'ai fait un script PowerShell récupérant dans l'active directory les dates d'expirations des utilisateurs du mois à venir, les mettant dans un tableau et les envoyant par mail.
Les informations de mon tableau sont triées de la sorte :
Nom Date de création Date d'expiration Jours restants
Je souhaiterai que les utilisateurs soient triés en fonction du nombre de jours restants avant la désactivation du compte mais je n'y arrive pas ;(
Voici mon script :
Import-Module ActiveDirectory
$date = Get-Date # met la date dans la variable date
$exp = $date.AddMonths(1) # Ajoute un mois à la date pour prendre tout ce qui est entre aujourd'hui et un mois de plus
$file = "$HOME\Expiresous1mois.htm"
$comptes = Get-ADUser -Filter {AccountExpirationDate -ge $date -and AccountExpirationDate -le $exp} -Properties Name,WhenCreated,AccountExpirationDate
$head = @'
<head>
<title>Compte expire sous 1 mois</title>
<style = type="text/css">
body {
background-color:white;
}
table {
border-width: 3px; border-style: solid;border-color: black;border-collapse: collapse;
}
th {
border-width: 1px;padding: 0px;border-style: solid;border-color: blue;
}
td {
text-align: center;border-width: 1px;padding: 5px;border-style: solid;border-color: blue;
}
</style>
</head>
<body>
<H2>Expiration prochaine des comptes AD (<1mois)</H2>
</body>
</html>
'@
$comptes |
select-object @{e={$_.Name};n='Nom commun'},
@{e={$_.whencreated};n='Date de création'},
@{e={$_.AccountExpirationDate};n='Expire'},
@{e={(($_.AccountExpirationDate) - $date).days};n='Jours restants'}|
Sort-Object (($_.AccountExpirationDate) - $date).days,
ConvertTo-Html '
-Property "Nom commun","Date de création","Expire","Jours restants" '
-head $head |
Out-File $file
$mail_from = "xxxxxxx"
$mail_to = "xxxxxxx"
$mail_server = "xxxxxxx"
$mail_object = 'Expiration prochaine des comptes AD'
$mail_content = get-content $file
$message = new-object System.Net.Mail.MailMessage $mail_from, $mail_to, $mail_object, $mail_content
#$attachment = new-object System.Net.Mail.Attachment $file
#$message.Attachments.Add($attachment)
$message.IsBodyHtml = $true
$SMTPclient = new-object System.Net.Mail.SmtpClient $mail_server
$SMTPclient.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
$SMTPclient.Send($message)
A voir également:
- Trier des informations récupérées dans l'AD
- Excel trier par ordre croissant chiffre - Guide
- Reconsidérer le traitement de vos informations à des fins publicitaires - Accueil - Réseaux sociaux
- Entrer les informations d'identification reseau - Guide
- Ad aware - Télécharger - Sécurité
- Logiciel pour trier les photos automatiquement - Guide
3 réponses
Bonjour,
Je me suis inspiré de votre script pour mettre en place un équivalent sur mon SI.
Cependant j'ai l'erreur suivante quand je l'exécute :
Avez-vous eu le même problème ?
Voici le bout du code incriminé (très similaire au votre sur cette partie) :
Je me suis inspiré de votre script pour mettre en place un équivalent sur mon SI.
Cependant j'ai l'erreur suivante quand je l'exécute :
Sort-Object : Impossible de convertir System.Int32 dans l'un des types suivants {System.String, System.Management.Automation.ScriptBlock}.
Au caractère C:\Users\administrateur.GOBE\Desktop\scriptExpirationADUser-Mail.ps1:35 : 1
+ Sort-Object (($_.AccountExpirationDate) - $date).days,
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument : (:) [Sort-Object], NotSupportedException
+ FullyQualifiedErrorId : DictionaryKeyUnknownType,Microsoft.PowerShell.Commands.SortObjectCommand
Avez-vous eu le même problème ?
Voici le bout du code incriminé (très similaire au votre sur cette partie) :
select-object @{e={$_.Name};n='Nom commun'},
@{e={$_.whencreated};n='Date de création'},
@{e={$_.AccountExpirationDate};n='Expire'},
@{e={(($_.AccountExpirationDate) - $date).days};n='Jours restants'}|
Sort-Object 'Jours restants'
Sort-Object (($_.AccountExpirationDate) - $date).days,
'-Property "Nom commun","Date de création","Expire","Jours restants" '
ConvertTo-Html -head $head |
Bonjour,
Je trouver votre script et je recherche exactement la même choses.
Je donc voulu faire un test sur un de mes AD de test mais je rencontre un problème lors de l'exécution de celui-ci et je ne comprend pas vraiment pour quoi.
Voila l'erreur que je rencontre :
C:\>powershell c:\script.ps1
Expression manquante après l'opérateur unaire « - ».
Au niveau de C:\script.ps1 : 37 Caractère : 2
+ - <<<< head $head |
+ CategoryInfo : ParserError: (-:String) [], ParseException
+ FullyQualifiedErrorId : MissingExpressionAfterOperator
Je suis un peut comme dire ... nul en PS donc impossible a mon niveau de comprendre l'erreur mais quand je retire la ligne -head $head | je reçoit bien le mail mais vide, puis quand je change la variable : Out-File $file
par Out-File c;\test.htm le ficher crée et vide.
Avez-vous une idée du problème ?
Par avance je vous remercie
et merci pour le partage de votre script.
Cordialement
Akewl
Je trouver votre script et je recherche exactement la même choses.
Je donc voulu faire un test sur un de mes AD de test mais je rencontre un problème lors de l'exécution de celui-ci et je ne comprend pas vraiment pour quoi.
Voila l'erreur que je rencontre :
C:\>powershell c:\script.ps1
Expression manquante après l'opérateur unaire « - ».
Au niveau de C:\script.ps1 : 37 Caractère : 2
+ - <<<< head $head |
+ CategoryInfo : ParserError: (-:String) [], ParseException
+ FullyQualifiedErrorId : MissingExpressionAfterOperator
Je suis un peut comme dire ... nul en PS donc impossible a mon niveau de comprendre l'erreur mais quand je retire la ligne -head $head | je reçoit bien le mail mais vide, puis quand je change la variable : Out-File $file
par Out-File c;\test.htm le ficher crée et vide.
Avez-vous une idée du problème ?
Par avance je vous remercie
et merci pour le partage de votre script.
Cordialement
Akewl