Bonjour à tous,
Pas de repos pour les geek ! Toujours dans l’objectif de créer un super script d’audit, j’ai besoin de stocker quelques données que des collègues (ou des clients) pourront renseigner facilement (puisque je vais crypter le contenu de mon script powershell). Du coup, il y aura besoin de pouvoir stocker ces données dans un fichier, type fichier d’init et d’aller les lire avec mon script pour les stocker sous forme de variables réutilisables.
Je ne parlerais pas de la façon d’encrypter / décrypter le fichier ou les variables « sensibles » (puisque je n’y suis pas encore), mais ce petit bout de code pourra vous aider si c’est ce que vous cherchez à faire :
Prérequis :
- créer et renseigner le fichier « audit-config.ini » (voir dans l’article comment est fait ce fichier)
- ajouter le répertoire qui contient ce fichier dans votre variable PATH (ça normalement, pas besoin de moi pour savoir le faire)
- ajouter le bout de code powershell dans le début de votre script (puisqu’il vous fournira certaines variables … idéalement toutes les variables qui ne peuvent pas être récupérées automatique)
Contenu du fichier « audit-config.ini » :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [AUDITV1] ;Nota - Ce fichier contient les paramètres du script d'audit ;Si ce fichier n'existe pas ou n'est pas renseigné, l'audit se fait de façon locale seulement et dans le répertoire C:\Temp ;Compte exécutant le script sur chaque serveur. Utiliser un compte ayant les droits Administrateur Username =DOMAINE\AdminUser Password =P@55w0rd ;Serveurs à auditer Servers ="SRVAPPLI1", "SRVDATA2" ;Répertoire temporaire d'écriture sur chaque serveur WorkingFolder =C:\Temp\ ;Répertoire de centralisation des dépots (le compte Username/Password doit pouvoir y accéder) RepositoryFolder =\\SRVAUDIT\PartageAudit$ ;Lettre de lecteur utilisée par chaque serveur audité pour mapper ce lecteur. Utiliser un lecteur non utilisé NetworkLetterToMap =Z: |
Explications du fichier .ini :
- après « = » on met directement la valeur de la variable sans mettre un espace avant (sinon il faut modifier le substring de mon powershell, et vous ne voulez pas faire ça 😉 )
- les lignes commençant par « ; » sont des commentaires
- la ligne du haut « [AUDITV1] » permet d’indiquer la version de mon audit … je crois qu’il y aura plusieurs versions d’audit un jour
- les paramètres à trouver dans mon script commencent pas un nom à chercher et on aussi le symbole « = » qui sépare le nom du paramètre de la variable à stocker
- je n’ai pas fait beaucoup de contrôles (genre variable vide, etc) donc attention aux erreurs « humaines »
Contenu du script powershell :
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 | # recherche du fichier de parametres $ListePath=gci Env:\PATH $ListePath = $ListePath.value -split ";" $ParamAudit='non' $FichierAudit='.' foreach ($chemin in $ListePath) { $fichier=$chemin+'\audit-config.ini' if (Test-Path $fichier) { $ParamAudit='oui' ; $FichierAudit=$fichier } } if ($ParamAudit -eq 'non') { Write-Host ('Pas de fichier audit-config.ini dans la variable PATH') } if ($ParamAudit -eq 'oui') { Write-Host ('Hostname: '+$Ordinateur+' - Utilisation du fichier audit - Path: '+$FichierAudit) # recuperation des variables du fichier de paramères $DonneesAudit=get-content $FichierAudit foreach ($ligne in $DonneesAudit) { try { if ($ligne.ToUpper() -eq "[AUDITV1]") {'parametres audit v1'} } catch {} try { if ($ligne.Substring(0,$ligne.IndexOf('=')).ToUpper() -like 'USERNAME*') { $username=$ligne.Substring($ligne.IndexOf('=')+1); write-host('ligne username: '+$username)}} catch {} try { if ($ligne.Substring(0,$ligne.IndexOf('=')).ToUpper() -like 'PASSWORD*') { $password=$ligne.Substring($ligne.IndexOf('=')+1); write-host('ligne password: '+$password)}} catch {} try { if ($ligne.Substring(0,$ligne.IndexOf('=')).ToUpper() -like 'SERVERS*') { $serveurs=$ligne.Substring($ligne.IndexOf('=')+1); write-host('ligne serveurs: '+$serveurs)}} catch {} try { if ($ligne.Substring(0,$ligne.IndexOf('=')).ToUpper() -like 'WORKINGFOLDER*') { $workingfolder=$ligne.Substring($ligne.IndexOf('=')+1); write-host('ligne workingfolder: '+$workingfolder)}} catch {} try { if ($ligne.Substring(0,$ligne.IndexOf('=')).ToUpper() -like 'REPOSITORYFOLDER*') { $repositoryfolder=$ligne.Substring($ligne.IndexOf('=')+1); write-host('ligne repositoryfolder: '+$repositoryfolder)}} catch {} try { if ($ligne.Substring(0,$ligne.IndexOf('=')).ToUpper() -like 'NETWORKLETTERTOMAP*') { $networklettertomap=$ligne.Substring($ligne.IndexOf('=')+1); write-host('ligne networklettertomap: '+$networklettertomap)}} catch {} } } |
Explications :
- on récupère la variable PATH et on y cherche le fichier audit-config.ini
- on récupère le contenu du fichier puis on le lit, ligne par ligne
- on vérifie si les paramètres cherchés existent, et si oui on récupère la partie qui nous interesse
- les variables que je récupère sont donc : $username, $password, $serveurs, $workingfolder, $repositoryfolder et $networklettertomap
Je crois que c’est une bonne base pour faire joujou. Il y a toujours moyen de faire mieux (ajouter des log, empecher les erreurs de saisie ou variables nulles, encrypter / décrypter les variables sensibles (genre mot de passe, username, etc.)
Alors amusez-vous bien les amis 🙂
Laisser un commentaire ...