Mise à jour du 13/10 : Désolé pour les écran étroits mais j'ai augmenté la taille de la div de contenu afin de mettre les images de script en taille réelle pour une lécture plus agréable
Bonjour à tous et à toutes.
Première pour moi : me voilà en train de créer un blog, chose que je n'attendais pas de ma part, mais comme on le dit, seuls les idiots...
Travaillant dans l'administration d'un système d'information composé à 99% de produits Microsoft, je suis souvent confronté à des problématiques auxquelles j'ai décidé de répondre par les dernières armes de l'éditeur :
dotnet, C# et PowerShell.
Formé en autodidacte, je créé ce blog pour présenter ces outils à des personnes qui aimeraient les apprendre tout comme moi, et pouvoir échanger sur les méthodes de programmation et les idées. Je vous donnerais des exemples de scripts, en éxpliquant pas à pas le raisonnement et les objets sur lesquels mes scripts s'appuient en éspérants qu'ils puissent vous être utiles, où aumoins vous permettent de comprendre l'outil PowerShell.
A mon clavier pour mon premier script !
PowerShell-Scripting
mardi 11 octobre 2011
Création du blog
lundi 11 octobre 2010
Récupérer les droits d'une arborescence
J'ai récemment développé un script assez utile puisque son rôle est de sauvegarder des droits d'une arborescence. Je l'ai utilisé avant la migration de notre domaine active directory pour avoir un fichier où je pourrais savoir quels droits précis étaient appliqués à chaque répertoire au cas où des droits sauteraient ( ce qui a été le cas ).
Dans ce script qui vous présente un peu la syntaxe de PowerShell nous pouvons voir :
La déclaration d'un objet .Net (System.IO.StreamWriter) : l'utilisation de cet objet améliore de beaucoup le temps nécéssaire pour l'écriture dans un fichier lorsque l'ont doit écrire un gros volume de données. Un simple variable >> fichier aurait marché mais je vous laisse le soin de lire le comparatif d'efficacité des methodes.
L'utilisation de boucles foreach : très utiles pour parcourir tableaux et collections.
Le typage du code ressemblant fortement à tout ce qui est C-like ou Java-like (nottez cependant l'absence de ";" à la fin des instructions qui n'est nécessaire que lorsque vous placez plusieurs instructions sur la même ligne).
La fonction Power-Shell Get-Acl qui permet de récupérer l'ensemble des droits NTFS sur un objet fichier ou répertoire.
Je voudrais également souligner l'extrême importance de la dernière ligne ! Si vous ne fermez pas votre StreamWriter, le pointeur d'écriture restera en attente et vous ne pourrez plus modifier ou manipuler le fichier car celui-ci sera toujours en cours d'utilisation.
Par manque de temps et flemme ce soir je m'arrêterai là mais j'espère que ce premier script vous montre qu'il est possible de faire des choses utiles sans trop de difficultés, et que PowerShell est un outil très puissant à la portée de tous.
Pour vous donner un exemple de résultat du script ci-dessus :
C:\Users\Chrispc\Documents\DeadIsland\out\logs
------
AUTORITE NT\Système : FullControl
BUILTIN\Administrateurs : FullControl
Chrispc-PC\Chrispc : FullControl
_____________________
C:\Users\Chrispc\Documents\DeadIsland\out\Settings
------
AUTORITE NT\Système : FullControl
BUILTIN\Administrateurs : FullControl
Chrispc-PC\Chrispc : FullControl
_____________________
C:\Users\Chrispc\Documents\Mes ordinateurs virtuels\windows 8
------
AUTORITE NT\Système : FullControl
BUILTIN\Administrateurs : FullControl
Chrispc-PC\Chrispc : FullControl
_____________________
Vous comprendrez qu'il est bien plus intéressant de faire tourner ceci sur une vraie arborescence bureautique dans un domaine multi-groupe et multi-utilisateur.
A demain pour une nouvelle aventure : Nous utiliserons des classes réseau pour déterminer les stations disponibles à un instant T sur un domaine , lire leurs enregistrements DNS afin de tester l'existence de fichier dessus !
Dans ce script qui vous présente un peu la syntaxe de PowerShell nous pouvons voir :
La déclaration d'un objet .Net (System.IO.StreamWriter) : l'utilisation de cet objet améliore de beaucoup le temps nécéssaire pour l'écriture dans un fichier lorsque l'ont doit écrire un gros volume de données. Un simple variable >> fichier aurait marché mais je vous laisse le soin de lire le comparatif d'efficacité des methodes.
L'utilisation de boucles foreach : très utiles pour parcourir tableaux et collections.
Le typage du code ressemblant fortement à tout ce qui est C-like ou Java-like (nottez cependant l'absence de ";" à la fin des instructions qui n'est nécessaire que lorsque vous placez plusieurs instructions sur la même ligne).
La fonction Power-Shell Get-Acl qui permet de récupérer l'ensemble des droits NTFS sur un objet fichier ou répertoire.
Je voudrais également souligner l'extrême importance de la dernière ligne ! Si vous ne fermez pas votre StreamWriter, le pointeur d'écriture restera en attente et vous ne pourrez plus modifier ou manipuler le fichier car celui-ci sera toujours en cours d'utilisation.
Par manque de temps et flemme ce soir je m'arrêterai là mais j'espère que ce premier script vous montre qu'il est possible de faire des choses utiles sans trop de difficultés, et que PowerShell est un outil très puissant à la portée de tous.
Pour vous donner un exemple de résultat du script ci-dessus :
C:\Users\Chrispc\Documents\DeadIsland\out\logs
------
AUTORITE NT\Système : FullControl
BUILTIN\Administrateurs : FullControl
Chrispc-PC\Chrispc : FullControl
_____________________
C:\Users\Chrispc\Documents\DeadIsland\out\Settings
------
AUTORITE NT\Système : FullControl
BUILTIN\Administrateurs : FullControl
Chrispc-PC\Chrispc : FullControl
_____________________
C:\Users\Chrispc\Documents\Mes ordinateurs virtuels\windows 8
------
AUTORITE NT\Système : FullControl
BUILTIN\Administrateurs : FullControl
Chrispc-PC\Chrispc : FullControl
_____________________
Vous comprendrez qu'il est bien plus intéressant de faire tourner ceci sur une vraie arborescence bureautique dans un domaine multi-groupe et multi-utilisateur.
A demain pour une nouvelle aventure : Nous utiliserons des classes réseau pour déterminer les stations disponibles à un instant T sur un domaine , lire leurs enregistrements DNS afin de tester l'existence de fichier dessus !
samedi 9 octobre 2010
Changer le mot de passe VNC de tout un parc
Bonjour à tous, même si pour l'instant je n'ai pas de lecture ça viendra :)
Pour le script d'ajourd'hui je vous propose de changer le mot de passe VNC de tout votre parc en une simple boucle sans avoir à passer sur chaque machine. Le principe est simple :
Nous selectionnons la totalité des stations de notre domaine Active Directory , nous pingons chacune d'entre elle afin de coller le fichier .ini contenant le bon mot de passe sur les stations disponibles et ecrivons le nom de stations indisponible dans un log.
Vous pouvez également rajouter la copie de ce fichier.ini dans le script de connexion de vos utilisateurs je vous l'accorde, mais c'est moins drôle et ici nous pouvons cibler par des critères particuliers les machines que nous voulons. L'interet étant de décortiquer les possibilité du powerhsell.
Ce qui est intéressant de noter dans ce script :
-La possibilité de déclarer des fonctions réutilisables ( Mon prochain objectif sera de me pencher sur les include de fichier et la constitution de bibliothèques de fonctions PowerShell)
-La possibilité d'interroger un annuaire par requête LDAP dans le contexte actuel de la machine
-Gérer les exceptions du script : plus d'erreurs d'executions ! dites à votre script comment il doit se comporter pour ne pas quitter son traitement au milieu de celui-ci.
-Effectuer des opérations sur la totalité des ordinateurs du domaine ou par particularité ( ici le sous réseau auquel il appartient )
-Instanciation à la volée d'objets .Net ( [System.Net.Dns]::GetHostAddresses($nomordi) ) sans déclarer l'objet au préalable dans une variable - tel le using de C# - En effet nous n'avons pas instancié dans une variable l'objet System.Net.Dns avant d'appeler une de ses methodes puisque nous appelons une méthode générique.
-Gérer l'état d'une machine afin de constituer un log de suivi de l'impact du script sur celles-ci
Pour notre prochain script nous resterons dans le shell pur et dur puisque nous utiliserons des fonctions génériques et des pipes "|" pour rediriger les sorties de fonctions.
Pour le script d'ajourd'hui je vous propose de changer le mot de passe VNC de tout votre parc en une simple boucle sans avoir à passer sur chaque machine. Le principe est simple :
Nous selectionnons la totalité des stations de notre domaine Active Directory , nous pingons chacune d'entre elle afin de coller le fichier .ini contenant le bon mot de passe sur les stations disponibles et ecrivons le nom de stations indisponible dans un log.
Vous pouvez également rajouter la copie de ce fichier.ini dans le script de connexion de vos utilisateurs je vous l'accorde, mais c'est moins drôle et ici nous pouvons cibler par des critères particuliers les machines que nous voulons. L'interet étant de décortiquer les possibilité du powerhsell.
Ce qui est intéressant de noter dans ce script :
-La possibilité de déclarer des fonctions réutilisables ( Mon prochain objectif sera de me pencher sur les include de fichier et la constitution de bibliothèques de fonctions PowerShell)
-La possibilité d'interroger un annuaire par requête LDAP dans le contexte actuel de la machine
-Gérer les exceptions du script : plus d'erreurs d'executions ! dites à votre script comment il doit se comporter pour ne pas quitter son traitement au milieu de celui-ci.
-Effectuer des opérations sur la totalité des ordinateurs du domaine ou par particularité ( ici le sous réseau auquel il appartient )
-Instanciation à la volée d'objets .Net ( [System.Net.Dns]::GetHostAddresses($nomordi) ) sans déclarer l'objet au préalable dans une variable - tel le using de C# - En effet nous n'avons pas instancié dans une variable l'objet System.Net.Dns avant d'appeler une de ses methodes puisque nous appelons une méthode générique.
-Gérer l'état d'une machine afin de constituer un log de suivi de l'impact du script sur celles-ci
Pour notre prochain script nous resterons dans le shell pur et dur puisque nous utiliserons des fonctions génériques et des pipes "|" pour rediriger les sorties de fonctions.
Inscription à :
Articles (Atom)