Script powershell et fichier CSV - Shell/Batch - Programmation
Marsh Posté le 05-08-2015 à 12:22:54
je sais pas trpo, mais déjà le $lettre = $lettre.lettre, tu perds ta variable là ... si tu avais une collection avec différents champs, tu te retrouves avec un char ou une string de longueur 1, si ça fais bien ce que tu veux ... tu devrais peut-etre tenter de renommer une des 2 variables ... style $action plustot que $lettre
donc faire en sorte que ta variable avec A S ou M soit "$action", et ton champs soit $lettre.action par exemple
Marsh Posté le 11-02-2015 à 09:51:42
Bonjour, Bonjour !
Je travail actuellement sur un script powershell pour mon entreprise.
Le but du script est d'ajouter/supprimer ou modifier des comptes AD à l'aide d'un fichier .CSV qui contient des informations.
Le script doit permettre de différencier l'action ajouter/supprimer ou modifier grâce à la première lettre de chaque ligne du fichier .CSV qui sera soit un A pour ajouter, soit un S pour supprimer soit un M pour modifier.
Voici a quoi ressemble le contenu du fichier test.CSV :
lettre;Description;Surname;GivenName;Displayname;AccountExpirationDate;Name;Password;
A;1264684;CATHELAINE;roger;18/10/1960;03/05/2015;L008922;78901940;
S;45634646;NICOLE;florent;17/07/1976;15/03/2014;L001204;45671966;
M;25326341;MEHMACHE;Leila;07/06/1966;26/11/2015;L004505;12361956;
On peut voir que les informations son séparés par des ";" et placés de façon à être récupérés par colonne grâce aux attribut AD de la première ligne :
lettre;Description;Surname;GivenName;Displayname;AccountExpirationDate;Name;Password;
Et voici la partie de mon script qui pose problème :
$lettre=$lettre.lettre #Attribut permettant de déclaré que le mot "lettre" du fichier .CSV correspond a la variable $lettre
$x = get-content "C:\test.csv" #récupération du fichier .CSV dans l variable $x
$x[1..$x.count] | foreach-object {$lettre.lettre -cmatch "S" -in $x} | out-file "C:\test10.csv"
#Ci dessus la partie qui ne fonctionne pas
Je m'explique, le but étant de différencier les actions en fonction de la première lettre de chaque ligne, j'ai donc imaginer qu'il fallait utiliser la variable $lettre qui contiendrai alors la première lettre de chaque ligne. Pour cela j'ai utilisé une logique semblable à celle utilisé avec les attribut AD, c'est à dire : -Name $Name.name mais sous la forme $lettre.lettre de manière à récupéré les lettres présentes dans la colonne "lettre" le lettre se comporterai comme un attribut. Et cela ne fonctionne pas.
Pour info, voici la boucle pour le reste de mon script ;
$Users=import-csv -delimiter ";" -Path "C:\test0.csv"
foreach ($lettre in $Users){
if ($lettre -match "M" ){
foreach ($User in $Users){
Set-ADUser -Name $User.Name -Description $User.Description -Surname $User.Surname -GivenName $User.GivenName -Displayname $User.Displayname -AccountExpirationDate $User.AccountExpirationDate -Path "OU=test,DC=MED,DC=FR"
#Add-ADGroupMember -Identity "utilisateur de la med" -Members $User.SamAccountName
}}
}
if ($lettre -match "S" ){
foreach ($User in $Users){
Remove-ADUser -Name $User.Name -Description $User.Description -Surname $User.Surname -GivenName $User.GivenName -Displayname $User.Displayname -AccountExpirationDate $User.AccountExpirationDate -Path "OU=test,DC=MED,DC=FR"
#Add-ADGroupMember -Identity "utilisateur de la med" -Members $User.SamAccountName
}}
if ($lettre -match "A" ){
foreach ($User in $Users){
New-ADUser -Name $User.Name -Description $User.Description -Surname $User.Surname -GivenName $User.GivenName -Displayname $User.Displayname -AccountExpirationDate $User.AccountExpirationDate -Path "OU=test,DC=MED,DC=FR"
#Add-ADGroupMember -Identity "utilisateur de la med" -Members $User.SamAccountName
}}
}
Pouvez-vous m'aider? Merci d'avance !