• Administration Systèmes
  • Administration Réseaux
  • Administration Bases de Données

Aide Informatique N°1

  • Actualités
  • Cours
    • ASR
    • TSRIT
  • Entraide
  • Contact
  • Crédits photo

Powershell – Stocker des variables dans un fichier de paramètres (type .ini)

08/05/2017 · by Dehecq Olivier · Leave a Comment

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 🙂

  • delicious Bookmark on Delicious
  • digg Digg this post
  • facebook Recommend on Facebook
  • reddit share via Reddit
  • stumble Share with Stumblers
  • twitter Tweet about it
  • rss Subscribe to the comments on this post

Partager :

  • Cliquez pour partager sur Facebook(ouvre dans une nouvelle fenêtre)
  • Cliquez pour partager sur Twitter(ouvre dans une nouvelle fenêtre)
  • Cliquez pour partager sur LinkedIn(ouvre dans une nouvelle fenêtre)
  • Cliquer pour imprimer(ouvre dans une nouvelle fenêtre)

Filed Under: Administration Systèmes · Tagged: powershell

Laisser un commentaire ...

Veuillez Connexion pour commenter
  Subscribe  
Notify of

Recherche

Cours à la une

11 – Cisco1 – Routeurs et Commutateurs

Bonjour, J'ai tardé à remettre en page ce cours puisque la refonte de ce cours avait été perdue en même temps qu'une … Lire tout

Entraide à la une

i like to live dangerously

Powershell script 2 – recopie de fichiers vers un autre serveur

Bonjour à tous, Toujours dans l'optique de passer à tout powershell, je programme des scripts à destination des … Lire tout

Articles au hasard

Data (C) CyberHades

Sauvegarde des bases SQL Server

01/05/2015 By Dehecq Olivier 1 Comment

16 – Network Access Policy

30/10/2013 By Dehecq Olivier Leave a Comment

Wanna know how i feel with grace period ?

Réinitialiser la licence WS RDS

29/08/2016 By Dehecq Olivier Leave a Comment

Copyright © 2019 Olivier Dehecq

  • follow:follow:
  • RSS RSS
wpDiscuz