Bonjour à tous,
J'aimerais savoir si ce que je souhaite réaliser est faisable.
Je vous explique la situation :
Un fichier est généré par un AS400 chaque jour avec une liste d'utilisateur dans un fichier TXT.
Je manipule le fichier de sorte à obtenir le résultat souhaité et dans un format CSV.
sur un format comme celui-ci :
Ce qui me permet ensuite d'envoyer ces informations par mail et de récupéré la liste des prochains départ utilisateurs (sur 3 mois) et de les anticiper.nom;prenom;matricule;DateDeDepart
Je rencontre ceci dit une difficulté car ma liste est très longue car elle prend en compte l'intégralité des personnes de l'entreprise et je souhaiterais la raccourcir en filtrant via les comptes Active Directory selon les critères suivants :
J'aimerais ensuite comparer les entrées reçu en fonction de la colonne Surname de la requête AD et la colonne Surname du fichier CSV et de récupérer uniquement les lignes du fichier CSV qui match avec le Surname.
Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $date = Get-Date Get-ADUser -filter * -Properties * | where-object {$_.Enabled -eq "True"} | where-object {$_.EmailAddress -notlike ""} | where-object {$_.AccountExpirationDate -notlike ""} | where-object {$_.AccountExpirationDate -gt "$date"} | Select Surname,Enabled
Je suis conscient que l'explication peut-être difficile à comprendre mais je pense que la demande l'est aussi.
Je suis également ouvert à d'autres approche qui me permettrait d'atteindre mon but. Si vous avez des idées je suis preneur !
je précise que je ne suis pas un utilisateurs expérimenté en Powershell et que je réalise actuellement que des scripts basiques.
Voici mon script actuel :
Merci à tous,
Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 #insert à la ligne 0 $i = 0 #Récupération de la date du jour avec le même format que le fichier généré par l'AS400 $datedujour=(Get-Date).ToString('yyyyMMdd') #Récupération du contenu du fichier $a=get-content "T:\Dsi\transfert\AD\Departs\DSI003PF_$datedujour*.txt" $b=$a.count #Ajout des en-tête dans le fichier txt set-content "T:\Dsi\transfert\AD\Departs\dsi003pf-2.txt" ('Prenom;Surname;Matricule;DateDepart;datedepart2;Site;Poste;matriculeN+1') #Ré-ajoute le contenu du fichier après l'insertion des en-tête add-content "T:\Dsi\transfert\AD\Departs\dsi003pf-2.txt" $a[$i..$b] #Récupération du contenu du fichier précédemment créé $fichier = Get-Content "T:\Dsi\transfert\AD\Departs\dsi003pf-2.txt" $body ="" #Il va le lire ligne par ligne du txt foreach ($ligne in $fichier){ #on split la ligne en une liste, et on utilise ";" comme séparateur puis on recupere la date $date = ($ligne -split ";")[3] #Si la date est differente de 00/00/0000 if($date -notmatch "00/00/0000"){ #On ajoute la ligne à notre corps de mail avec un retour à la ligne à la fin. $body+="$ligne `n" } } # On supprime tout les espaces blancs $body2 = $body.Replace(' ','') # On ajoute le contenu dans un fichier CSV $csv = Set-Content "T:\Dsi\transfert\AD\Departs\dsi003pf-3.csv" $body2 # On récupére toute les entrées des 3 prochains mois (90 jours) $date2 = (Get-Date).AddDays(+90).ToString('yyyyMMdd') # On récupére le contenu du CSV avec notre filtre précédent et on tri les entrées par date de départ du plus proche au plus lointain $csv2 = Import-Csv "T:\Dsi\transfert\AD\Departs\dsi003pf-3.csv" -Delimiter ';' | Where-Object {$_.datedepart2 -lt $date2} | Sort-Object -Property datedepart2 | Select-Object Prenom,Nom,Matricule,DateDepart,Site,Poste,matriculeN+1 | out-string # Envoi du résultat par Mail Send-MailMessage -Encoding UTF8 -SmtpServer XXX -Body $csv2 -From XXX -To XXX -Subject "Liste des prochains départs collaborateurs" # Suppression des fichiers créés pour les modifications Remove-Item -Path "T:\Dsi\transfert\AD\Departs\dsi003pf-3.csv" Remove-Item -Path "T:\Dsi\transfert\AD\Departs\dsi003pf-2.txt"
Partager