Question
Association 2 colonnes dans CSV
- David
- Auteur du sujet
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 31
- Remerciements reçus 0
il y a 3 ans 10 mois #30575
par David
Association 2 colonnes dans CSV a été créé par David
Bonsoir,
Je dois déployer un outil (Maileva). Cet outil s'installe via GPO. Il s'agit d'un exe que l'on vient associer avec un fichier xml pour le paramétrage (compte, facturation...)
Pour cela je souhaite scanner mon OU, repérer les utilisateurs et identifier leur service (department dans l'AD).
Voici mon premier script, mais non fonctionnel car il faut importer et executer le module AD sur chaque machine mais avec des droits élevés
Je vais donc changer de fonctionnement, je vais enregistrer ces associations dans un *.csv et je souhaite que au démarrage du script, je check l'user en cours, et je vais chercher dans le csv le service correspondant.
J'espère être clair ...
Est -ce possible ?
Auriez vous pistes éventuellement ?
Merci par avance de votre aide
Bonne soirée
Goro
Je dois déployer un outil (Maileva). Cet outil s'installe via GPO. Il s'agit d'un exe que l'on vient associer avec un fichier xml pour le paramétrage (compte, facturation...)
Pour cela je souhaite scanner mon OU, repérer les utilisateurs et identifier leur service (department dans l'AD).
Voici mon premier script, mais non fonctionnel car il faut importer et executer le module AD sur chaque machine mais avec des droits élevés
Set-ExecutionPolicy -scope CurrentUser -executionpolicy bypass -Force
#variables
$pc = $env:computername
$session = $env:USERNAME
$date = Get-Date -format dd.MM.yyyy:hh.mm
$Log = "\\nancy5\deploiement$\MailevaOffice\Logs\$session on $pc\$session on $pc.txt"
$fileToCheck = "\\nancy5\deploiement$\MailevaOffice\Logs\$session on $pc"
$Path = "\\nancy5\deploiement$\MailevaOffice\Entete.jpg"
$dest = "C:\MAILEVA"
$user = get-aduser -Identity "$env:USERNAME" -Properties *
start-transcript -path $Log
switch($user.Department)
{ "AGENCE ESSEY LES NANCY" {$fichierconf = "\\xxxxxx.local\NETLOGON\[BTG]DeploiementMailevaOffice\Conf\BTGSA.ESSEY.xml"}
"AGENCE FAMECK" {$fichierconf = "\\xxxxxxxx.local\NETLOGON\[BTG]DeploiementMailevaOffice\Conf\BTGSA.FAMECK.xml"}
}
if (Test-Path $fileToCheck -PathType leaf){ Remove-Item $fileToCheck -ErrorAction Ignore}
New-Item -ItemType File -path "\\nancy5\deploiement$\MailevaOffice\Logs\$session on $pc" -name launch.bat -value "\\xxxxxx.local\NETLOGON\[BTG]DeploiementMailevaOffice\MailevaOfficeSetup.exe -s -i$dest\MailevaOffice -p$fichierconf"
Start-Process "\\nancy5\deploiement$\MailevaOffice\Logs\$session on $pc\launch.bat" -Wait
new-item 'C:\MAILEVA\A_Envoyer' -itemtype directory
new-item 'C:\MAILEVA\Envoyes' -itemtype directory
new-item 'C:\MAILEVA\FondDePage' -itemtype directory
Copy-Item –Path $Path –Destination 'C:\MAILEVA\FondDePage\'
Remove-Item -Path "\\nancy5\deploiement$\MailevaOffice\Logs\$session on $pc\launch.bat" -Recurse
stop-transcript
Je vais donc changer de fonctionnement, je vais enregistrer ces associations dans un *.csv et je souhaite que au démarrage du script, je check l'user en cours, et je vais chercher dans le csv le service correspondant.
J'espère être clair ...
Est -ce possible ?
Auriez vous pistes éventuellement ?
Merci par avance de votre aide
Bonne soirée
Goro
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 3 ans 10 mois #30579
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Association 2 colonnes dans CSV
>>Est -ce possible ?
Oui, si c'est une relation 1,n (1 User = 1 ou N service) une hashtable sera bien plus efficace lors de la recherche.
Pour le csv, une lecture dynamique de l'AD est possible, sinon au lieu d'enregistrer en .csv tu crées une hashtable et tu la sérialise ( Export-cliXML).
Mais un .csv est plus facilement modifiable au cas où.
Oui, si c'est une relation 1,n (1 User = 1 ou N service) une hashtable sera bien plus efficace lors de la recherche.
Pour le csv, une lecture dynamique de l'AD est possible, sinon au lieu d'enregistrer en .csv tu crées une hashtable et tu la sérialise ( Export-cliXML).
Mais un .csv est plus facilement modifiable au cas où.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- David
- Auteur du sujet
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 31
- Remerciements reçus 0
il y a 3 ans 10 mois #30582
par David
Réponse de David sur le sujet Association 2 colonnes dans CSV
Bonjour Laurent,
Merci pour ta réponse qui je l'avoue me perd encore plus lol.
L'idéal pour moi serait de pouvoir checker direct dans l'AD mais mes users ne sont pas admins et il faut ces droits pour installer et utiliser le module AD. C'est pour cela que je suis parti sur une autre solution.
Si je comprends bien, je peux sans soucis récupérer le nom de l'utilisateur qui a ouvert la session et aller voir dans le csv le service correspondant ? Ok mais en pratique comment puis-je faire ? Je ne comprends pas vraiment. Comment après faire correspondre avec le fichier xml car en réalité il y a 3 données : le nom de l'utilisateur -> le service -> le fichier de configuration à appliquer
Du coup je ne sais pas si j'ai été clair dans ma demande. Donc je souhaite :
J'ouvre une session avec mon $env:USERNAME je vais voir dans ce csv, il correspond au service marketting donc je vais appliquer le fichier xml dédié au marketting que j'ai mis en place dans mon switch.
Merci à toi pour tes éclaircissements
Bonne journée
Merci pour ta réponse qui je l'avoue me perd encore plus lol.
L'idéal pour moi serait de pouvoir checker direct dans l'AD mais mes users ne sont pas admins et il faut ces droits pour installer et utiliser le module AD. C'est pour cela que je suis parti sur une autre solution.
Si je comprends bien, je peux sans soucis récupérer le nom de l'utilisateur qui a ouvert la session et aller voir dans le csv le service correspondant ? Ok mais en pratique comment puis-je faire ? Je ne comprends pas vraiment. Comment après faire correspondre avec le fichier xml car en réalité il y a 3 données : le nom de l'utilisateur -> le service -> le fichier de configuration à appliquer
Du coup je ne sais pas si j'ai été clair dans ma demande. Donc je souhaite :
J'ouvre une session avec mon $env:USERNAME je vais voir dans ce csv, il correspond au service marketting donc je vais appliquer le fichier xml dédié au marketting que j'ai mis en place dans mon switch.
Merci à toi pour tes éclaircissements
Bonne journée
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 3 ans 10 mois #30583
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Association 2 colonnes dans CSV
Salut,
un exemple :Pour
>>Comment après faire correspondre avec le fichier xml car en réalité il y a 3 données : le nom de l'utilisateur -> le service -> le fichier de configuration à appliquer
S'il y a une correspondance entre un nom de fichier XML est un nom de service, on peut avoir qq chose comme cela :De trois données tu réduis, si possible, à deux:
le nom de l'utilisateur -> (le nom de service = une partie du nom de fichier de configuration à appliquer).
Sinon il faut un autre hashtable de correspondance entre un nom de service et un nom de fichier :Autre solution ton csv, contient les trois données mais sa maintenance peut s'avérer laborieuse.
un exemple :
@'
"SamAccountName";"Department"
"User1";"Dpt1"
"User2";"Dpt2"
"User3";"Dpt3"
"User4";"Dpt4"
'@ > C:\temp\datas.csv
$list=import-csv C:\temp\datas.csv -Delimiter ';'
$H=@{}
Foreach ($Item in $List)
{
$H.Add($Item.SamAccountName,$Item.Department)
}
$H
>>Comment après faire correspondre avec le fichier xml car en réalité il y a 3 données : le nom de l'utilisateur -> le service -> le fichier de configuration à appliquer
S'il y a une correspondance entre un nom de fichier XML est un nom de service, on peut avoir qq chose comme cela :
$Filename=$h.User1
$Fullpath='c:\temp\${Filename}.xml"
le nom de l'utilisateur -> (le nom de service = une partie du nom de fichier de configuration à appliquer).
Sinon il faut un autre hashtable de correspondance entre un nom de service et un nom de fichier :
$KeyFilename=$h.User1 #récupère le nom de service
$H2.$KeyFilename # récupère le nom du fichier pour le service précisé
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- David
- Auteur du sujet
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 31
- Remerciements reçus 0
il y a 3 ans 10 mois - il y a 3 ans 10 mois #30587
par David
Réponse de David sur le sujet Association 2 colonnes dans CSV
Bonjour Laurent et merci pour ta réponse.
J'ai refait mon script en intégrant tes indications.
J'ai aussi refait mon CSV et faisant correspondre manuellement mon user avec le fichier de configuration à utiliser :
"SamAccountName";"Department""User1";"xxx1.xml"
"User2";"xxx2.xml"
"User3";"xxx3.xml"
Maintenant ce qu'il faut que je fasse c'est récupérer l'info "xxx3.xml" pour venir mettre à jour cette commande :
New-Item -ItemType File -path "\\nancy5\deploiement$\MailevaOffice\Logs\$session on $pc" -name launch.bat -value "\\xxxxx.local\NETLOGON\[BTG]DeploiementMailevaOffice\MailevaOfficeSetup.exe -s -i$dest\MailevaOffice -p$fichierconf"
Le gras doit être mon fichier de configuration.
C'est la que je suis perdu
Merci d'avance
Bonne journée
J'ai refait mon script en intégrant tes indications.
Set-ExecutionPolicy -scope CurrentUser -executionpolicy bypass -Force
#variables
$chem1list='\\nancy5\deploiement$\MailevaOffice\Liste.csv'
$list=import-csv $chem1list -Delimiter ';'
$pc = $env:computername
$session = $env:USERNAME
$date = Get-Date -format dd.MM.yyyy:hh.mm
$Log = "\\nancy5\deploiement$\MailevaOffice\Logs\$session on $pc\$session on $pc.txt"
$fileToCheck = "\\nancy5\deploiement$\MailevaOffice\Logs\$session on $pc"
$Path = "\\nancy5\deploiement$\MailevaOffice\Entete.jpg"
$dest = "C:\MAILEVA"
$user = get-aduser -Identity "$env:USERNAME" -Properties *
start-transcript -path $Log
$H=@{}
Foreach ($Item in $List)
{
$H.Add($Item.SamAccountName,$Item.Department)
}
if (Test-Path $fileToCheck -PathType leaf){ Remove-Item $fileToCheck -ErrorAction Ignore}
New-Item -ItemType File -path "\\nancy5\deploiement$\MailevaOffice\Logs\$session on $pc" -name launch.bat -value "\\xxxxx.local\NETLOGON\[BTG]DeploiementMailevaOffice\MailevaOfficeSetup.exe -s -i$dest\MailevaOffice -p$fichierconf"
Start-Process "\\nancy5\deploiement$\MailevaOffice\Logs\$session on $pc\launch.bat" -Wait
new-item 'C:\MAILEVA\A_Envoyer' -itemtype directory
new-item 'C:\MAILEVA\Envoyes' -itemtype directory
new-item 'C:\MAILEVA\FondDePage' -itemtype directory
Copy-Item –Path $Path –Destination 'C:\MAILEVA\FondDePage\'
Remove-Item -Path "\\nancy5\deploiement$\MailevaOffice\Logs\$session on $pc\launch.bat" -Recurse
stop-transcript
J'ai aussi refait mon CSV et faisant correspondre manuellement mon user avec le fichier de configuration à utiliser :
"SamAccountName";"Department""User1";"xxx1.xml"
"User2";"xxx2.xml"
"User3";"xxx3.xml"
Maintenant ce qu'il faut que je fasse c'est récupérer l'info "xxx3.xml" pour venir mettre à jour cette commande :
New-Item -ItemType File -path "\\nancy5\deploiement$\MailevaOffice\Logs\$session on $pc" -name launch.bat -value "\\xxxxx.local\NETLOGON\[BTG]DeploiementMailevaOffice\MailevaOfficeSetup.exe -s -i$dest\MailevaOffice -p$fichierconf"
Le gras doit être mon fichier de configuration.
C'est la que je suis perdu
Merci d'avance
Bonne journée
Dernière édition: il y a 3 ans 10 mois par David.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 3 ans 10 mois #30589
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Association 2 colonnes dans CSV
Avec ceci :mais renommer cette variable en :rend le code plus 'lisible' ( compréhensible). $Session contient un nom d'utilisateur pas un
token
de session.
Ensuite,car $UserName contient un nom de clé de la hashtable, on utilise cette construction :
$session = $env:USERNAME
$CurrentUserName=$env:USERNAME
#ou
$UserName=$env:USERNAME
Ensuite,car $UserName contient un nom de clé de la hashtable, on utilise cette construction :
-i $dest\MailevaOffice -p $H.$UserName
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.145 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Association 2 colonnes dans CSV