Trier des informations récupérées dans l'AD

Résolu/Fermé
Utilisateur anonyme - Modifié par Daphmo le 9/09/2013 à 16:57
akewl Messages postés 244 Date d'inscription lundi 9 mars 2009 Statut Membre Dernière intervention 26 août 2015 - 26 août 2015 à 09:38
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

Utilisateur anonyme
9 sept. 2013 à 16:56
C'est bon, j'ai trouvé la réponse.

Il suffisait de rajouter la ligne
Sort-Object 'Jours restants'|
0
maeldu Messages postés 1 Date d'inscription mardi 1 juillet 2014 Statut Membre Dernière intervention 1 juillet 2014
1 juil. 2014 à 16:39
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 |
0
akewl Messages postés 244 Date d'inscription lundi 9 mars 2009 Statut Membre Dernière intervention 26 août 2015 27
25 août 2015 à 10:47
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
0
akewl Messages postés 244 Date d'inscription lundi 9 mars 2009 Statut Membre Dernière intervention 26 août 2015 27
26 août 2015 à 09:38
petit up :)
0