Question Association 2 colonnes dans CSV

Plus d'informations
il y a 3 ans 3 semaines #30575 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
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.

Plus d'informations
il y a 3 ans 3 semaines #30579 par Laurent Dardenne
>>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ù.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 3 semaines #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


 

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 3 semaines #30583 par Laurent Dardenne
Salut,
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
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 :
$Filename=$h.User1
$Fullpath='c:\temp\${Filename}.xml"
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 :
$KeyFilename=$h.User1 #récupère le nom de service
$H2.$KeyFilename # récupère le nom du fichier pour le service précisé
Autre solution ton csv, contient les trois données mais sa maintenance peut s'avérer laborieuse.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 3 semaines - il y a 3 ans 3 semaines #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.
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 3 semaines par David.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 3 semaines #30589 par Laurent Dardenne
Avec ceci :
$session = $env:USERNAME
mais renommer cette variable en :
$CurrentUserName=$env:USERNAME
#ou
$UserName=$env:USERNAME
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 :
-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.098 secondes
Propulsé par Kunena