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

Résolu
Utilisateur anonyme -  
akewl Messages postés 270 Statut Membre -
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

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

    Il suffisait de rajouter la ligne
    Sort-Object 'Jours restants'|
    0
  2. maeldu Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  3. akewl Messages postés 270 Statut Membre 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
    0
    1. akewl Messages postés 270 Statut Membre 27
       
      petit up :)
      0