Trier des informations récupérées dans l'AD [Résolu/Fermé]

Signaler
-
Messages postés
244
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
26 août 2015
-
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)

3 réponses


C'est bon, j'ai trouvé la réponse.

Il suffisait de rajouter la ligne
Sort-Object 'Jours restants'|
Messages postés
1
Date d'inscription
mardi 1 juillet 2014
Statut
Membre
Dernière intervention
1 juillet 2014

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 :

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 |
Messages postés
244
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
26 août 2015
27
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
Messages postés
244
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
26 août 2015
27
petit up :)