0% ont trouvé ce document utile (0 vote)
67 vues179 pages

Automatisation Windows avec PowerShell

Ce document décrit l'introduction à Powershell et le principe des objets dans Powershell. Powershell est un langage orienté objet qui permet de manipuler des objets .NET pour automatiser l'administration de Windows.

Transféré par

B
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
67 vues179 pages

Automatisation Windows avec PowerShell

Ce document décrit l'introduction à Powershell et le principe des objets dans Powershell. Powershell est un langage orienté objet qui permet de manipuler des objets .NET pour automatiser l'administration de Windows.

Transféré par

B
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Powershell Automatiser l'administration Windows

Gaël Marot Loïc Thomas


1

Powershell Automatiser l'administration Windows

ƒ Les bases du langage 6


Š Introduction à Powershell 7
Š Le principe de l'objet 12
Š Les applets de commandes “cmdlet” 24
Š Le pipeline 30
Š La gestion des sorties 33
Š Prises en main de Powershell à travers la navigation dans les dossiers/fichiers 36
ƒ Le types et opérateurs 54
Š Les règles programmatiques 55
Š Variables et constantes 60
Š La gestion des dates 76

ƒ Les structures de contrôles et fonctions 91


Š L'opérateur "if" 92
Š Les boucles "for", "foreach" 95
Š Les fonctions 103
Š La gestion des fichiers texte 111
Š La gestion des fichiers CSV 126
Š Export des données en tant que page HTML 131
Š Scripts avec authentification 137
Š Exécution de script à distance 143
2
Powershell Automatiser l'administration Windows

ƒ Utilisation des cmdlets et des modules 150


Š Le principe du module 151
Š Gestion des archives 154
Š Les cmdlets de gestion web 157
Š Quelques cmdlets pour gérer vos serveurs et vos stations de travail 163
Š Les cmdlets de gestion du réseaux 176
Š Les cmdlets du pare-feu 188
Š Windows defender 198
Š La gestion des journaux 202
Š Gérer les points de restauration sur une station 205
Š Gestion des packages –OneGet 207

ƒ Utilisation des objets WMI 217


Š Le modèle de données 218
Š Listage des classe WMI 226
Š Administrer Windows avec WMI 233

Powershell Automatiser l'administration Windows

ƒ Utilisation de .NET et COM via PowerShell 238


Š Utilisation du .NET 237
Š Utilisations de formulaires 253
Š Les objets COM 267
Š Traitement des fichiers XML 274

ƒ Utilisation des modules spécifiques systèmes PowerShell 278


Š Le module Active Directory 279
Š Le module DHCP 303
Š Le module DNS 310
Š Le module Hyper V 318

ƒ Cmdlets utiles et astuces PowerShell 329


Š Quelques commandelettes 330
Š PsEdit 347
Š Fonction d'administration quotidienne 350
Š Chaine de texte, cmdlets ConvertFrom-Strings 352

4
Powershell Automatiser l'administration Windows

Powershell Automatiser l'administration Windows

6
Powershell Automatiser l'administration Windows

Introduction à Powershell

Powershell Automatiser l'administration Windows

ƒ Que peut apporter Powershell ?

Š L'invite CMD ne fournit que peu de commandes.

Š Les administrateurs se sont orientés vers des langages de programmations tel que :

• VBScript

• Perl

• KixStart

• ….

Š Langage de développement utilisés pour réaliser parfois des choses simples.

8
Powershell Automatiser l'administration Windows

ƒ Apparu avec vista, Powershell est devenu aujourd’hui incontournable.

Š Windows 2016 propose plus de 1600 cmdlets de base et plus de 60 modules

• Windows Powershell
• est orienté objet
• donne accès aux objets .Net
• offre une cohérence des commandes et des paramètres associés
• offre une aide sur les commandes digne de ce nom

Powershell Automatiser l'administration Windows

ƒ PowerShell est :
Š Un interpréteur de commande

Š Et un langage de script

Š Sa puissance provient du Framework. Net

Š Connu des développeurs mais moins des administrateurs

Š Le Framework .NET est une énorme bibliothèque de classes à partir duquel nous
allons utiliser des objets.

Š Avec Powershell, on manipule donc des objets sans vraiment sans rendre compte

Š Nous sommes à la version 5 de Powershell

Š Windows Powershell ISE 5 a été repensé


10
Powershell Automatiser l'administration Windows

ƒ Toutes les commandes cmdlets ont été écrites en s’appuyant sur les classes d’objet .Net

Š Ceci donne un accès à l’intégralité des classes du Framework .Net (ce qui offre des
fonctionnalités étendues par rapport à WMI)

Š Powershell est également capable de faire appel à des objets

• WSH,

• COM,

• WMI

11

Powershell Automatiser l'administration Windows

Le principe de l'objet

12
Powershell Automatiser l'administration Windows

ƒ En Powershell tout est objet:


Š On manipule uniquement des objets c'est-à-dire des ensembles groupés de
variables et de méthodes associées à des entités
Š Le principe de fonctionnement du mode objet peut être décomposé de la façon
suivante:

• Classe
¾ Schéma de conception, c'est ce que l'on appel le type de données
• Instance
¾ Objet construit à partir d'un classe
• Collection
¾ Ensemble d'objet
• Variable
¾ Mise en mémoire d'un objet ou d'une collection
• Membres
¾ Caractéristiques et méthodes applicable à un objet, c'est ce que l'on appel
communément les propriétés et méthodes

13

Powershell Automatiser l'administration Windows

ƒ Prenons l'exemple d'une voiture

Š Une classe de type “Voiture”, permet de construire une ou plusieurs voitures


similaires (instance).

Š Il est ensuite possible de visualiser les caractéristiques que l'on appel Propriétés
telles que le format(berline, break), la couleur, etc...

Š De la même manière, nous pouvons agir sur une voiture et ses capacités »
(Méthodes) telles que la faire avancer, reculer, etc…

Š Les propriétés et méthodes sont appelés les membres

• Les membres (propriétés ou méthodes) sont liés à leur parent (l’instance) par
un point “[Link]”et par un double ”::” pour les objets du
framework .NET “[[Link]]::Membre”

14
Powershell Automatiser l'administration Windows

ƒ Un objet est une variable complexe qui encapsule des données ou attributs ainsi que
les fonctions membres pour y accéder.

Š Dans le monde orienté objet, les fonctions s’appellent aussi des méthodes.

Š Powershell peut de plus, permettre de modifier un objet à posteriori et y ajouter


des méthodes ou des variables, ceci peut s’avérer très utile dans des cas précis.

Š Créons un objet :

• $objet = 1

¾ Nous créons une variable $objet qui contient l'entier 1.

¾ Powershell va en fait créer un objet de type Int32 et y stocker la valeur


assignée.

15

Powershell Automatiser l'administration Windows

ƒ Tous les objets Powershell définissent une méthode membre appelée GetType(),
Š cette fonction ne prend pas de paramètres et retourne le type d’objet de l’objet en
question.

• $[Link]()

• Cette fonction retourne ceci :

• Nous pouvons faire de même avec une variable d’un autre type, par exemple
une chaîne de caractères :

16
Powershell Automatiser l'administration Windows

ƒ Nous pouvons utiliser les méthodes de la classe String directement sur l’objet.
Š Par exemple si nous voulons savoir si $liste contient le caractère «g» on appelle la
méthode ‘Contains’ :

Š Puisque c’est le cas, Powershell retourne True.

Š Les objets permettent de cacher la complexité de l’implémentation des fonctions.


• Ceci s’appelle l’abstraction, c’est un concept important de l’orienté objet.

Š Dans notre exemple nous voulions savoir si le caractère g se trouvait dans la chaîne
$liste, le comment du pourquoi du détail de l’implémentation de la fonction
Contains ne nous intéresse pas.

• On voulait le résultat c’est tout. C’est ça l’abstraction.

17

Powershell Automatiser l'administration Windows

ƒ Autre exemple. Imaginons maintenant la string suivante:


Š $chaine = "Ceci est une chaine de caractère"

Š Si on veut récupérer les mots, un par un, de cette chaîne, nous pouvons utiliser la
méthode Split:

• $[Link](" ")
• Powershell retourne un array de n éléments et les affiche un par un.

18
Powershell Automatiser l'administration Windows

Š $a=$[Link](" ")
Š $[Link]()

Š Du coup on peut demander à l’array combien d’éléments il possède :


• $[Link]

• Count est une variable membre de l’objet Array. Et nous avons bien 4 mots
dans notre string.

19

Powershell Automatiser l'administration Windows

ƒ Nous pouvons créer nos propres objets.


Š Cela est les données de scripts d’une façon organisée et ainsi exécuter des
fonctions sur l’ensemble des objets tels que l’export vers le HTML ou le CSV.

ƒ Pour créer un objet nous utilisons la cmdlet New-Object :


Š Elle prend comme paramètres le type ainsi qu’une hash table définissant les
méthodes et variables membres.

$contact = New-Object -TypeName PSCustomObject -Property @{


Prenom = "Loic";
Nom = "Thomas";
Numero = "06xxx";
Adresse = "125..."
}

20
Powershell Automatiser l'administration Windows

ƒ Ajoutons maintenant une nouvelle variable membre à l'objet.


Š Nous utilisons pour ceci la cmdlet Add-Member.
Add-Member -MemberType ScriptProperty -InputObject $contact -Name "Date" -Value
{Get-Date}

ƒ Le type de membre qu’on ajoute est un script.


ƒ Le nom est « Date » et la valeur est un script block qui appelle la cmdlet Get-
Date qui retourne la date et l’heure actuelle.

ƒ Nous pouvons accéder aux propriétés membres en utilisant leurs noms, exemple :

• $[Link]
• $[Link]

21

Powershell Automatiser l'administration Windows

ƒ Imaginons maintenant qu’on veut traiter une liste de contacts et pas un seul.

Š Pour cela nous allons créer une array vide appelée $contacts :
• $contacts = @()

Š Nous pouvons ajouter les objets $contact créés à notre array avec l’opérateur += :
• $contacts += $contact

22
Powershell Automatiser l'administration Windows

ƒ Avec cette liste de contacts nous pouvons faire plusieurs opérations, par exemple nous
pouvons l’exporter vers un fichier de type CSV :

Š $contacts | Select Prenom,Nom,Adresse | Export-Csv -Path


"c:\temp\[Link]"

Š Select-Object nous permet de sélectionner les propriétés membres ainsi que leur
ordre.

• Ainsi nous voulons, le Prenom en premier suivi du Nom et de l’Adresse. Nous


ne voulons pas par exemple sélectionner la date, elle ne sera pas sauvegardée.

Š Si nous voulons récupérer notre liste de contacts à partir d’un fichier CSV, nous
pouvons utiliser la cmdlet Import-Csv:
• $contacts = Import-Csv -Path "c:\temp\[Link]"

23

Powershell Automatiser l'administration Windows

Les applets de commandes “cmdlet”

24
Powershell Automatiser l'administration Windows

ƒ En Powershell on agit sur les objets à l'aide d'applet de commande que l'on appelle cmdlet
ƒ les applets de commandes sont toujours composé de :
Š Verbe – Nom
Š Exemple :
• get-process
¾ Ici on récupère (get) les processus en fonctionnement sur la machine (process)
• Le résultat renvoie une “collection d’instances"

Propriétés
Collections
d'instances

Valeurs 25

Powershell Automatiser l'administration Windows

ƒ Avec Powershell on retrouve les verbes :


Š Get (récupérer)
Š Set (Action sur l’objet)
Š Add (ajouter)
Š Remove (effacer)
Š …
ƒ Tous ces verbes sont associés avec des noms comme :
Š Path
Š Variable
Š Item
Š Object
Š …

ƒ En croisant les verbes et les noms, on peut se souvenir de beaucoup de commandes

ƒ PowerShell ne respecte pas la casse


Š GET-Command = Get-command = get-command
26
Powershell Automatiser l'administration Windows

ƒ Dans un premier temps il est important de bien connaitre les commandes suivantes
Š Get-Command
Š Get-Help
Š Get-Member
ƒ Get-command
Š Permet de trouver les commandes
Š Trouver les commandes dont le verbe est write
• Get-command –verb write

• Renvoi toutes les cmdlet mais aussi le alias et les fonction commençant par
write
27

Powershell Automatiser l'administration Windows

ƒ Trouver les commandes dont le nom est service


ƒ Get-command –noun service

ƒ Renvoi les cmdlet permettant de travailler sur les services

ƒ Get-help
ƒ Permet d'obtenir de l’aide sur une cmdlet particulière, on peut utiliser ensuite –
examples, –full, -detailled ou encore –online pour une aide avec différents niveaux.
Š Depuis la version 3, il faut charger les mise à jour avec update-help
Š Cette commande force a récupérer les mises à jour des fichiers d’aide en français
• update-help -Force -Module [Link] -UICulture fr-FR
Š Vous pouvez utilisez update-help pour mettre à jour les aides de vos cmdlettes.

28
Powershell Automatiser l'administration Windows

ƒ Get-Member :
Š Elle permet d'explorer les objets et donc de visualiser les propriétés et méthodes
applicable à l'objet.
Š Exemple : Get-Service| Get-Member

Š On retrouve:
• Les méthodes applicables aux objets de type service (close, continue, start…)
• Les propriétés (caractéristiques) de objets de types services (CanShutdown,
CanStop, DisplayName…)
29

Powershell Automatiser l'administration Windows

Le pipeline

30
Powershell Automatiser l'administration Windows

ƒ Le pipeline est utilisé pour connecter la sortie d’une applet de commande à l’entrée
d’une autre applet de commande
ƒ La combinaison de la première applet de commande, du canal, et de la deuxième
applet de commande crée un pipeline

Š obtenir la liste de tous les utilisateurs dans le domaine, puis envoyez la liste dans
un pipeline à l'applet de commande Enable-ADAccount, en exécutant la
commande suivante :
• Get-ADUser –Filter * | Enable-ADAccount

Š Pour activer les comptes qui sont désactivés, vous pouvez utiliser l'applet de
commande Where-Object pour renvoyer uniquement les comptes qui sont
désactivés. Pour ce faire, exécutez la commande suivante
• Get-ADUser –Filter * | Where-Object {$_.Enabled –eq $false} | Enable-
ADAccount

31

Powershell Automatiser l'administration Windows

ƒ Depuis la V4, une nouveauté très intéressante est la possibilité de mettre des variables
dans le pipeline.
ƒ Exemple :
Get-adcomputer –filter * -pv comp | foreach-object{gwmi
win32_logicalDisk –computername $_.name} |
ForEach-Object { Write-host "Analyse de l’ordinateur $[Link]
Write-host " " nom du disque: $($_.deviceid)"}

32
Powershell Automatiser l'administration Windows

La gestion des sorties

33

Powershell Automatiser l'administration Windows

ƒ Applets de commande pour mettre la sortie en forme:

Format-Wide Format-Table Format-List Format-Custom


(FW) (FT) (FL) (FC)
ƒ Applets de commande pour manipuler la sortie

Measure-Object Sort-Object Select-Object Where-Object


(measure) (sort) (select) (where)
34
Powershell Automatiser l'administration Windows

ƒ Pour rappel :
Š Get-command retourne les cmdlettes

Š Get-help Cmdlettes obtenir de l’aide sur une cmdlette particulière, utiliser ensuite
–examples ou –full pour une aide avec seulement les exemples ou détaillées

Š Cmdlet | get-member pour obtenir les propriétés et méthodes sur une cmdlet

Š Tout est objet en PowerShell, pensez systématiquement propriétés et méthodes


sur ces objets

Š Le | permet de récupérer les objets courants passé dans le pipe

Š La variable $_ est la variable la plus importante, elle récupère l’objet courant passé
dans le pipe

Š Les filtres utilise where-object ou where ou ?

Š Les collections sont récupérés avec la boucle foreach-object ou foreach ou %


35

Powershell Automatiser l'administration Windows

Prises en main de Powershell à travers la


navigation dans les dossiers et les fichiers

36
Powershell Automatiser l'administration Windows

ƒ Les anciennes commandes de l'invite cmd fonctionnent toujours avec PowerShell.

Š Par ex la commande dir fonctionne mais en réalité renvoi à un alias nommé Get-
childItem
• Pour vérifier taper get-alias dir

37

Powershell Automatiser l'administration Windows

ƒ Le tableau suivant donne l’alias des principales commandes cmd

CMD CMDLET Description


DIR Get-childitem Lister le contenu d’un dossier
CD Set-location Changer de dossier courant
MD New-item Créer un fichier /dossier
RD Remove-item Supprimer un fichier/dossier
Move Move-item Déplacer un fichier/dossier
Ren Rename-item Renommer un fichier/dossier
Copy Copy-item Copier un fichier/dossier

38
Powershell Automatiser l'administration Windows

Š Permet d’obtenir la liste des fichiers et dossiers


Š Ex : Get-ChildItem -Path 'E:\01_Support Formation\00 - Intervention Orsys'
ƒ La colonne « Mode » la nature des objets à l’intérieur du système de fichiers, les valeurs
possibles sont :
• d pour dossier
• a pour archive
• r pour lecture seule
• h pour objet caché
• s pour objet système

39

Powershell Automatiser l'administration Windows

ƒ Pour afficher la liste des fichiers cachés, taper:


• Get-childitem –force
• Le fait de ne pas préciser de dossier, retourne la racine de c:

Š Ex sur un fichier, nommé powershell_intro.ppt.


Š On stocke dans une variable $b le résultat ensuite on affiche $[Link] pour la
longueur
Š $[Link] pour date de création …

40
Powershell Automatiser l'administration Windows

ƒ Afficher récursivement tous les fichiers du dossier e:\lotus avec l’extension *.doc et
*.ppt
Š Get-childitem e:\lotus –recurse –include *.doc, *.ppt

41

Powershell Automatiser l'administration Windows

ƒ Afficher tous les fichiers du dossiers lotus sauf les *.jpg, *.doc
Š Get-childitem e:\lotus –recurse –exclude *.jpg, *.doc

y Obtenir les fichiers dont la taille est supérieur à 100ko

y Get-childitem e:\lotus | where-object {$_.length –gt 1000KB}

1000KB peut être


remplacé par 1MB.

Attention KB et MB sont
collés avec le chiffre
Gt pour greater than

42
Powershell Automatiser l'administration Windows

ƒ Afficher tous les fichiers du dossiers lotus dont la date de dernier enregistrement est
postérieur au 01/06/2008
Š (attention format de date américain (Mois/jours/année)
Š Get-childitem | where-object {$_.LastWriteTime -gt ‘06/01/2008’}

Š Le pipe « | » permet de passer un ou plusieurs objets à la commande.


Š Dans nos exemple nous passons la commandelette « Where-Object » (filtre).
Š Where-object analyse les propriétés Length et LastWriteTime et les compare au
test (1000KB ou ’06/01/2008) et retourne l’objet si le test est vrai.
Š Le $_ retourne l’objet courant
• -gt signifie (greater than, plus grand que ou strictement supérieur), -ge
(supérieur ou égal)
• -eq (=)
• -lt (strictement inférieur) , -le (inférieur ou égal)
43

Powershell Automatiser l'administration Windows

ƒ La commande suivante permet de lister le répertoire courant puis de faire un tri


décroissant et enfin affiche les 5 premiers éléments

Š Sort-object permet de faire un tri

Š Select-object permet de sélectionner des objets agrès le pipe.

Š Ces 2 cmdlets pourraient être utiliser avec autre chose que get-childitem comme
get-process par exemple

44
Powershell Automatiser l'administration Windows

ƒ Pour afficher les propriété et méthode de Get-childitem, n’oubliez pas la


commandelette get-member
Š Get-childitem | get-member

45

Powershell Automatiser l'administration Windows

Š Cette commandelette permet de se déplacer dans une arborescence de dossier


Š Ex: Set-location e:

Š Retourne l’emplacement actuel à l’intérieur d’une arborescence.

46
Powershell Automatiser l'administration Windows

Š Permet de créer des dossier, des fichiers


Š Il est possible de créer un fichier et remplir ce fichier.
Š Les paramètres que nous utilisons sont :
• Path -> chemin d’accès de l’élément à créer (ex: c:\temp. Le « . » indique ce
dossier

• Itemtype ou type -> type d’élément à créer : file pour fichier, directory pour
dossier

• Name -> nom du nouvel élément à créer

• Value contenu de l’élément (ex: « hello the world » dans le cas d’un fichier
texte

47

Powershell Automatiser l'administration Windows

ƒ Création d’un dossier sous le répertoire courant


Š New-item –type directory "dossier pwshell"

y Création d’un dossier sous le dossier e:\lotus\lotus


y New-item –path e:\lotus\lotus –type directory –name « dossier pwshell 2»

48
Powershell Automatiser l'administration Windows

ƒ Création d’un fichier sous e:\scripts nommé [Link] dans lequel on ajoute une
phrase « Powershell est un outil puissant ».

Š New-item –type file –name [Link] –value « Powershell est un outil puissant »

49

Powershell Automatiser l'administration Windows

Š Permet de supprimer ou des dossiers.


Š Ex : supprimer tout les fichiers avec l’extension *.log
• remove-item c:\temp\*.log

Ex : supprimer tout les fichiers avec l’extension *.txt contenu dans tout les dossiers et sous
dossier de c:\temp
y Get-childitem c:\temp –recurse –include *.txt | remove-item

ƒ Nous utilisons ici Get-childitem pour lister les fichier *.txt (ceux à supprimer), ensuite
pour chaque fichier txt trouvé, nous utilisons remove-item.
ƒ On aurait pu ajouter l’option –force pour effacer les fichiers cachés

50
Powershell Automatiser l'administration Windows

Š Déplacer un fichier ou un dossier d’un emplacement vers un autre emplacement.


Š Dans le cas d’un dossier, le contenu du dossier est également déplacé.
Š Move-item permet également de renommer l’objet
• Ex: déplacement des fichiers *.txt vers un autre dossier
• Move-item –path c:\temp\temp1\*.txt –destination c:\temp\temp2

Š Ex: Déplacer un dossier ver un autre dossier, indiquer simplement les noms de
dossier
• Move-item –path c:\temp\temp1 –destination c:\temp\temp2

51

Powershell Automatiser l'administration Windows

Š Ex: renommer le fichier [Link] en [Link]


• Rename-item –path c:\temp\[Link] –newname [Link]

• Le path et newname ne sont pas obligatoire

• Rename-item c:\temp\[Link] [Link]

Š Ex: renommer un dossier


• Rename-item -path c:\temp\temp1 temp2

52
Powershell Automatiser l'administration Windows

Š Permet de copier des fichiers et dossiers

Š Ex : copier un fichier d’un dossier vers un autre dossier


• Copy-item –path c:\temp\[Link] –destination c:\temp\temp1

Š Ex: copier une arborescence de dossier (dossiers et sous-dossier)

• Copy-item –path c:\temp –destination c:\test -recurse

• Si le dossier n’existe pas, il est automatiquement créé

53

Powershell Automatiser l'administration Windows

54
Powershell Automatiser l'administration Windows

Les règles programmatiques

55

Powershell Automatiser l'administration Windows

ƒ Dans Powershell, 2 méthodes peuvent être utilisées pour les chaînes de caractères:

Š Les guillemets " " doubles ("Bonjour")


Š Les guillemets simples ' ' ('Bonjour')
Write-host permet d'écrire, a priori pas de
différence entre " " et ' '.
Cependant il y'a une différence si nous
travaillons avec des variables

Š Les doubles guillemets remplace une variable par son contenu (nommé
substitution de variable).

Š Les guillemets simple ignorent les variables et conservent la chaine qu'ils


contiennent

56
Powershell Automatiser l'administration Windows

Vérification des différences entre " " et


''

Si vous souhaitez un caractère spéciale dans une variable comme le $ par


ex, il devra être précédé du caractère spécial "`" (backtick)

Avec et sans " `" (équivalent de \ en C)

57

Powershell Automatiser l'administration Windows

ƒ Liste des caractère d'échappement et leurs descriptions


Š `n -> saut de ligne
Š `f -> saut de page
Š `r -> retour chariot
Š `a -> bip sonore
Š `b -> retour arrière
Š `t -> tabulation horizontale
Š `v -> tabulation verticale
Š `0 (zéro) -> Null ou espace
Š `' -> guillemet simple
Š `"" -> guillemet double
Š `` -> backtick simple

58
Powershell Automatiser l'administration Windows

ƒ Le backtick utilisé en fin d'une ligne de commande indique à PowerShell que la


commande continue sur la ligne suivante.

Š Lorsque vous souhaitez afficher la propriété d'un objet, il faut utiliser la syntaxe :
$([Link]été).

59

Powershell Automatiser l'administration Windows

Variables et constantes

60
Powershell Automatiser l'administration Windows

ƒ Powershell ne dispose pas d'un langage typé, vous n'avez pas besoin de définir
et de typer vos variable (integer, string …)
Š La syntaxe sera toujours :
• $Mavariable = valeur quelconque
Š Powershell reconnaitra automatiquement les types de variables (string,
entier …)
Š Dir variable: (permet d'afficher toutes les variables)
Š Del variable:test (effacer la variable test)

Cet exemple montre que


Powershell a reconnu les
types de variables

61

Powershell Automatiser l'administration Windows

ƒ En utilisant la méthode GetType, PW vous indique le type de votre variable

Š Type reconnu :
• Int32 (entier sur 32 bits soit 4 Milliards de -2 à +2 milliards )
• Double
• String (chaine de caractère)

62
Powershell Automatiser l'administration Windows

ƒ Il est parfois utile pour des traitements importants ou pour ne pas avoir
d'erreur de calcul et pour une facilité de lecture des scripts de vouloir typer
une variable.
Š Utiliser pour ceci avant votre variable :
• [int]$var
• [char]$var
• [double]$var
Š Ex: vous souhaitez que l'utilisateur saisisse un chiffre sur la console, cela se
fait avec read-host, si vous saisissez dans votre code $nbre, l'utilisateur
peut saisir dix ou 10, le code script acceptera les 2.
Š Si vous entrez dans votre code [int]$nbre, l'utilisateur ne peut plus que
saisir du chiffre
Ex avec et sans le [int]
En ajoutant [int],
l'utilisateur ne peut
saisir que du chiffre

63

Powershell Automatiser l'administration Windows

ƒ Vous avez la possibilité d'utiliser également le typage pour convertir des chiffres ou
inversement du code Ascii:
Š Ex : [char]$x = 65
• $x affichera la lettre A majuscule

Š Ex: [int][char]$x = "A"


• $x affichera le n° Ascii 65

64
Powershell Automatiser l'administration Windows

y Le Framework n'est pas limité au système décimal et il est possible d'utiliser ou de


convertir au format :
y Hexadécimal
y Octal (base 8)
y Binaire

Š Conversion du chiffre 1000 en octal


Š [[Link]]::ToString(chiffre, base)

65

Powershell Automatiser l'administration Windows

ƒ Conversion en binaire

ƒ Conversion en hexadécimal

66
Powershell Automatiser l'administration Windows

ƒ Powershell dispose d'un nombre de variable prédéfini


Š $Error -> variable type tableau listant les erreurs affichées lors de la session
Š $false -> contient faux
Š $true -> contient vraie
Š $home -> chemin du dossier de base de l'utilisateur
Š $host -> information sur l'hôte

67

Powershell Automatiser l'administration Windows

ƒ Les opérateurs standard possibles sont :


Š + -> addition ou concaténation
Š - -> soustraction
Š * -> Multiplication
Š / -> Division
Š % -> Modulo

68
Powershell Automatiser l'administration Windows

ƒ Les opérateurs de comparaison régulièrement utilisés sont:


Š -like comparaison d'une chaine (accepte les caractères générique comme *, ?)

Š -notlike comparaison d'inégalité

Š -match comparaison d’une chaine (équivalent de contient)

69

Powershell Automatiser l'administration Windows

ƒ Ils permettent de couvrir une plage

Š Les opérateurs de plage se note : ".." (point point).

Š Ex sur Powershell: 1 .. 5

70
Powershell Automatiser l'administration Windows

ƒ Permet de remplacer tout ou une partie d'une chaine

Š Ex: remplace "société RECA" par "société GTEK"


• $soc = "Société RECA"
• $soc –replace "RECA" , "GTEK" ou $[Link]("RECA","GTEK")

71

Powershell Automatiser l'administration Windows

ƒ Ils permettent de vérifier le typage d'une variable

Š Ex: $x = 12

• $x –is [int] retourne true si x est un entier ou false dans le cas contraire

72
Powershell Automatiser l'administration Windows

ƒ Permettent de comparer et vérifier une expression

Š -and Æ Et logique
Š -or Æ Ou logique
Š -not ou ! Æ non logique
Š -xor Æou exclusif

73

Powershell Automatiser l'administration Windows

ƒ Permet d'affecter une valeur à une variable


Š $x = $x +2 -> $x += 2
Š $x = $x -2 -> $x -= 2
Š $x = $x *2 -> $x *= 2
Š $x = $x / 2 -> $x /= 2
Š $x = $x % 2 -> $x %= 2
Š $x = $x +1 -> $x ++ -> $x += 1
Š $ x = $x -1 -> $x-- -> $x -=1

74
Powershell Automatiser l'administration Windows

Opérateur Description Exemple


* Répète une chaine "-" * 20
+ Concatène des chaines "Bonjour " + "Pierre"
"Bonjour Pierre" -replace
-replace Remplace une chaine (Insensible à la case)
"Pierre","Paul"
"Bonjour Pierre" -replace
-creplace Remplace une chaine (Sensible à la case)
"pierre","paul"
-eq Vérifie l'égalité (Insensible à la case) "Pierre" -eq "pierre"
-ceq Vérifie l'égalité (Sensible à la case) "Pierre" -ceq "pierre"
Vérifie qu'une chaine contient une autre chaine
-like (Insensible à la case, Accept *)
"Pierre" -like "Pier*"
Vérifie qu'une chaine contient une autre chaine
-clike (Sensible à la case, Accept *)
"Pierre" -clike "Pier*"
Vérifie qu'une chaine ne contient pas une autre
-notlike chaine (Insensible à la case, Accept *)
"Pierre" -notlike "Pier*"
Vérifie qu'une chaine contient une autre chaine
-cnotlike (Insensible à la case, Accept *)
"Pierre" -cnotlike "Pier*"
Vérifie qu'une chaine contient une autre chaine
-match (Insensible à la case)
"Pierre" -match "rr"
Vérifie qu'une chaine contient une autre chaine
-cmatch (Sensible à la case)
"Pierre" -cmatch "rr"
Vérifie qu'une chaine ne contient pas une autre
-notmatch chaine (Insensible à la case)
"Pierre" -notmatch "rr"
Vérifie qu'une chaine contient une autre chaine
-cnotmatch (Insensible à la case)
"Pierre" -cnotmatch "rr" 75

Powershell Automatiser l'administration Windows

La gestion des dates

76
Powershell Automatiser l'administration Windows

ƒ La date et l'heure sont gérées par la cmdlet get-date


Š Un get-date retourne le jour, l'heure

ƒ Get-date est de type dateTime offrant un nombre de méthode et de propriété


très importante.
Š Get-date | get-member

77

Powershell Automatiser l'administration Windows

ƒ Propriétés:
• (get-date).hour -> retourne l'heure
• (get-date).minute -> retourne les mns
• (get-date).second -> retourne les
secondes
• (get-date).month -> retourne le mois
en cours
• (get-date).day -> retourne le jour (1 à
31)
• (get-date).DayOfWeek -> retourne le
jour de la semaine (dimanche à
Samedi)
• (get-date).DayOfYear -> retourne le
jour de l'année (1 à 365).

78
Powershell Automatiser l'administration Windows

ƒ L'unité de temps la plus basse dans le système se nomme tick

ƒ Un tick correspond à dix millionièmes de s.


Š 10 000 000.
Š (get-date).addseconds(1).ticks – (get-date).ticks

ƒ Le calcul ici ajoute une seconde à la date actuelle avec addseconds puis soustrait avec
la date actuelle. On calcul enfin le nbre de ticks pour 1 seconde

79

Powershell Automatiser l'administration Windows

ƒ Les méthodes les plus courantes sont :

Méthode Description
AddDays Ajouter ou retirer une unité de temps. Pour retirer utiliser
AddHours le "-"
AddMonths Ex: (Get-date).addMonths(-2) -> retire 2 mois par rapport
AddYears à la date du jour
AddSeconds
AddMilliseconds
AddMinutes
AddTicks

CompareTo Compare une date à une autre


-1 -> date antérieure à celle comparée
0 -> date égale
1 -> date postérieure à celle comparée
Equals True ou false compare 2 dates
GetDateTimeFormats Retourne les formats dispo pour l'objet DateTime

80
Powershell Automatiser l'administration Windows

ƒ Les méthodes les plus courantes sont :

Méthode Description
Get_date Retourne une variable contenant l'unité de temps.
Get_day
Get_dayOfWeek Ex : $jour = (get-date).get_day() retourne le jour
Get_dayOfYear
Get_hour
Get_millisecond
Get_month
Get_ticks
Get_timeOfDay

Retourne une valeur booléenne qui indique si l'heure
isDayLightSavingTime actuelle est ajustée à l'heure d'été
Subtract Soustrait un date
ToLongDateString Retourne la date format long type chaine ex: Mercredi 11
démbre 2008
ToLongTimeString Retourne l'heure format long type chaine ex: 13:58:15
81

Powershell Automatiser l'administration Windows

ƒ Les méthodes les plus courantes sont :

Méthode Description
ToOAdate Retourne le nombre de jour depuis le 30 décembre 1899 à
minuit
toShortDateString Retourne une chaine contenant le format court
(12/10/2008)
ToShortTimeString Retourne une chaine contenant le format court (14:04)
ToString Retourne une chaine contenant la date et l'heure au format
standard (20/12/2008 14:04:23)

82
Powershell Automatiser l'administration Windows

ƒ Il existe une soixantaine de standard concernant les dates.


Š Tapez (get-date).GetDateTimeFormats()
Format Description
d Format date courte (20/10/2008)
D Format date longue (mercredi 10 décembre 2008)
f Date longue et heure abrégé (mercredi 10 décembre
2008 13:15)
F Date longue et heure complète (mercredi 10 décembre
2008 13:15:10)
g Date courte, heure abrégé (10/12/2008 13:14)
G Date courte, heure complète (10/12/2008 13:14:50)
M ou m Mois et jour (10 décembre)
R ou r Date au spécif RFC 1123 (wed, 10 Dec 2008 14:22:17
GMT)
t Format heure abrégé (14:12)
T Format heure complète (14:12:34)
Y ou y Format mois et année
83

Powershell Automatiser l'administration Windows

ƒ Ex de format de date

84
Powershell Automatiser l'administration Windows

ƒ En plus des formats standard, vous pouvez personnaliser les formats de date:

Format Desc Format Desc


d Nbre compris entre 1 et 31 M Mois entre 1 et 12
dd Nbre compris entre 01 et 31 MM Mois entre 01 et 12
ddd Jour abrégé (lun, mar, mer …) MMM Mois abrégé (janv…)
dddd Jour complet (lundi, mardi) MMMM Mois complet (Janvier…)
h Heure compris entre 0-12 Y Année abrégé 0 à 99
hh Heure compris entre 00-12 YY Année abrégé (00 à 99)
H Heure compris entre 0-23 YYYY Année complète (2008)
HH Heure compris entre 00-23 s Seconde 0 à 59
m Minute entre 0-59 ss Seconde de 00 à 59
mm Minute entre 00-59

85

Powershell Automatiser l'administration Windows

ƒ Cet exemple créé un fichier nommé rapport_dateDuJour.txt


Š Ex: rapport_10-[Link]

86
Powershell Automatiser l'administration Windows

ƒ La méthode la plus simple pour créer une date est d'utiliser Get-date
Š Get-date sans rien retourne la date système.
Š Si vous omettez un paramètre, c'est celui du système qui est pris, ici les heures
minutes et seconde ont été pris de l'heure système

Š Pour modifier une date, utiliser les méthode Add


• Ajout de 2 mois par rapport à la variable $date

87

Powershell Automatiser l'administration Windows

ƒ Ex: connaitre le jour de la semaine d'une date de naissance.

Š $date est la variable récupérant la date

Š [DateTime]"07/20/1969" récupére au format date la date du 20 juillet 1969


(attention format américain mm/jj/aa)

Š $[Link] récupère le jour de la semaine

88
Powershell Automatiser l'administration Windows

ƒ Ex d'utilisation avec CompareTo

2 variables stockent les dates de création de 2


fichiers. La méthode utilisée est Get-
creationTime().
Ensuite on compare en utilisant compareTo

L'exemple suivant permet en


plus de comparer
uniquement le jour/mois/an
sans tenir compte des heures
et minutes
89

Powershell Automatiser l'administration Windows

ƒ Le calcul du temps se fait avec la cmdelette new-timeSpan


Š newTimeSpan (date-debut) (date_fin)
Š Ex: calcul le temps écoulé entre votre jour de naissance et la date du jour

90
Powershell Automatiser l'administration Windows

91

Powershell Automatiser l'administration Windows

Les opérateurs if

92
Powershell Automatiser l'administration Windows

ƒ Permet de tester une condition et réaliser une action par rapport à cette condition.

• if (<test1>)
• {<bloc_code1>}
• [elseif (<test2>)
• {<bloc_code2>}]
• [else
• <bloc_code3>}]

ƒ Ex: entrez un chiffre entre 1 et 10, si le chiffre est supérieur à 5, entrez "supérieur"
sinon "inférieur"

93

Powershell Automatiser l'administration Windows

Autre exemple avec Elseif

Pour exécuter le script, se placer


à l'endroit du script puis tapez
.\if.ps1.

94
Powershell Automatiser l'administration Windows

Les boucles for, foreach

95

Powershell Automatiser l'administration Windows

ƒ L'instruction for crée une boucle exécutant les commandes d'un bloc de commandes
tant qu'une condition spécifiée prend la valeur true (vrai).

Š for (<init>; <condition>; <répétition>)


• {<bloc_commandes>}

Š Init initialise une variable = $i=0


• Condition $i<20;
• Répétition $i++
• For(i=0;i<20;i++)

Ce premier exemple créé une boucle


infini en initialisant le compteur $i à 0
et s'incrémentant de 1 (condition
nulle
CTRL + C pour stopper

96
Powershell Automatiser l'administration Windows

ƒ Cet exemple créé une boucle de 10 valeur –le (<=)

Š For(i=0;i<=10;i=i+1)

97

Powershell Automatiser l'administration Windows

ƒ Commande de langage permettant de parcourir tous les éléments d'une collection


(stockée par ex dans un tableau).

ƒ Le type de collection le plus simple et le plus classique à parcourir est le tableau.

ƒ Dans une boucle foreach, il est fréquent d'exécuter une ou plusieurs commandes sur
chaque élément d'un tableau.

Š Instruction :
• foreach ($<élément> in $<collection>)
• {<bloc_commandes>}

98
Powershell Automatiser l'administration Windows

ƒ Cet exemple remplit des valeurs dans un tableau nommé $tab.

Š Pour chaque élément du tableau on affiche la valeur stockée dans la tableau.

• X est un simple pointeur permettant de scruter le tableau

99

Powershell Automatiser l'administration Windows

ƒ L'exemple suivant utilise get-childitem sur le dossier courant.

Š Pour chaque élément trouvé avec $fichier, on affiche la valeur trouvé à l'écran.

100
Powershell Automatiser l'administration Windows

ƒ Exemple de script boucle foreach

Š L'instruction foreach parcourt un tableau (une collection), élément par élément, en


attribuant une variable nommée spécifiquement pour l'élément actuel de la
collection

# Obtenir une liste des membres du groupe Administrateurs du domaine


$DAdmins = Get-ADGroupMember "Domain Admins"
# Parcourir tous les membres et définir la description
foreach ($user in $DAdmins)
{
Set-ADUser $user -Description “In the Domain Admins Group”
}

101

Powershell Automatiser l'administration Windows

ƒ Foreach-Object permet également l’usage de 3 blocs

Š Un bloc begin exécuté une seule fois au début


Š Un bloc process exécuté à chaque entrée d’objet dans le pipeline
Š Un bloc end exécuté une seule fois à la fin

ƒ L’exemple suivant retourne les adresses mac de type Ethernet de la machine locale

Š Attention toutefois, le bloc begin et end ne sont pas transmis au pipeline suivant. Si
par ex nous ajoutions | out-file c:\temp\[Link] ne stockerai pas le bloc début
"Adresse mac" ni le bloc de fin "fin"

102
Powershell Automatiser l'administration Windows

Les fonctions

103

Powershell Automatiser l'administration Windows

ƒ Une fonction est un ensemble d'instruction auquel est associé un nom


ƒ On peut ensuite appeler cette fonction par son nom à plusieurs reprise permettant un
gain de ligne de code et une clarté dans vos scripts
ƒ Une fonction est constituée :
Š Un nom
Š Un type de portée (facultatif)
Š Un ou plusieurs argument (facultatif)
Š Un bloc d'instruction

ƒ Une fonction à la structure suivante


Function [<portée> :] <nom de fonction> (<argument>)
{
param (<liste des paramètres>)
# bloc d’instructions
}

104
Powershell Automatiser l'administration Windows

ƒ Le premier exemple affiche via une fonction la date du jour

Š Pour exécuter la fonction, il suffit de l'appeler par son nom

105

Powershell Automatiser l'administration Windows

ƒ Ce deuxième exemple permet de se positionner rapidement dans un dossier

ƒ La fonction se nomme "rep".

Š Function rep {set-location g:\lotus\lotus}

ƒ Tapez ensuite rep pour revenir dans votre dossier rapidement

106
Powershell Automatiser l'administration Windows

ƒ Les arguments dans les fonctions permettent le passage de variables, de valeurs.

ƒ Ils se placent derrière la fonction

Š Function (arg1, arg2, argn)

ƒ Lorsque des arguments sont placés dans une fonction, ils sont stockés dans un tableau
nommé $args

Š $args[0] correspond au premier argument

Š $args[1] correspond au Deuxième argument

Š …

107

Powershell Automatiser l'administration Windows

ƒ Cet ex permet de saisir 2 chiffres, de les passer à la fonction calcul puis d'effectuer la
somme et la multiplication
-foregroundColor couleur
permet de modifier la couleur
de texte avec Write- host

ƒ L'utilisateur saisit d'abord les 2 chiffres. Les arguments sont ensuite passé (calcul $val1
$val2).
Š $args[0] contient $val1
Š $args[1] contient $val2

108
Powershell Automatiser l'administration Windows

ƒ Une façon de transmettre les variables à une fonction ou un script est d'utiliser des
paramètres.
ƒ La syntaxe d'appel d'une fonction avec paramètre est :
Š NomFonction –paramètre "valeurduparamètre"

ƒ Création d'une fonction globale (permettant de s'exécuter en dehors du script).


[string]$titre="titre" déclare un paramètre type string avec valeur par défaut à Titre

Param indique les valeur


qui peuvent être ajouter
après la fonction

Pour lancer un popup, on utilise le


[Link].
New-object –ComObject permet
d'instancier l'objet
109

Powershell Automatiser l'administration Windows

ƒ Les paramètres sont optionnels si ils sont saisi dans l'ordre

110
Powershell Automatiser l'administration Windows

La gestion des fichiers

111

Powershell Automatiser l'administration Windows

ƒ La gestion des fichiers avec PS est plus simple que VBScript.

Š Il n'y'a pas besoin d'instancier les objets avec FileSystem ni de spécifier le mode
d'accès (lecture, écriture).

Š Powershell utilise un jeu de commandelette dédié à la gestion des fichiers.

Š Powershell traite les fichiers texte en unicode de façon native contrairement à


CMD qui ne traite que l'ASCII.

Š On peut forcer les commandelettes à utiliser d'autres encodages comme ASCII,


UTF8, UTF32 …

112
Powershell Automatiser l'administration Windows

ƒ 2 cmdlets pour écrire des données dans un fichier :

Š Set-content

Š Out-file.

ƒ Lorsque out-file est utilisé, elle tente comme toutes les commandes out-* de formater
le flux avant de l'écrire dans le fichier.

ƒ Set-content ne cherche par à formater le flux mais applique la méthode ToString pour
écrire des caractères.

113

Powershell Automatiser l'administration Windows

Cet ex liste sous le dossier courant


les fichiers et dossiers et les
enregistre avec set-content dans
un fichier [Link].
Get-content permet de lire le
contenu du fichier

Le 2eme ex utilise cette


fois out-file.
Notez la différence

114
Powershell Automatiser l'administration Windows

ƒ Pour obtenir les 2 mêmes résultats, il faut "transtyper" l'objet avant de l'écrire avec set-
content.

Š Get-childitem | out-string –stream | set-content [Link].

Š Out-string permet de convertir les objets sous forme de chaine et stocké dans un
tableau de chaine.

Š -stream permet avec out-string d'envoyer au pipe suivant la chaine reçu plutôt que
d'envoyer tout dans un tableau de chaine unique.

ƒ Une différence importante existe entre Set-content et out-file. Set-content permet


d'écrire directement des octets dans un fichier avec le paramètre –encoding byte
permettant de travailler sur des fichiers autres que du texte.

ƒ On préférera utiliser out-file pour des fichiers type texte et set-content pour des fichiers
binaires.

115

Powershell Automatiser l'administration Windows

ƒ Out-file permet de créer des fichiers, d'associer dans ce fichier créé un contenu.

Š Out-file utilise les paramètres suivant :

Paramètre Description
Filepath Fichier de destination
Encoding Type d'encodage (par défaut unicode)
Append Ajoute du contenu à un fichier existant
Width Nombre de caractère par ligne
InputObject Objet à écrire dans le fichier
noClobber Indique de ne pas remplacer le fichier existant

116
Powershell Automatiser l'administration Windows

ƒ Les paramètres d'encodage possibles sont:

Nom Description
Ascii Encodage ascii (jeu de caractères de 0 à 127,
7bits)
UTF7 Encodage unicode UTF7 (Unicode Transformation
Format
UTF8 Encode unicode UTF8
Unicode Encode unicode UTF16 LittleEndian
BigEndianUnicode Encode unicode UTF16 BigEndian

UTF32 Encode unicode UTF32


default Code ANSI
OEM Utilise l'identificateur de de code du fabricant OEM
actuel pour le système d'exploitation

Š Microsoft travaille en unicode UTF32


117

Powershell Automatiser l'administration Windows

ƒ Création du fichier ascii [Link] dans le dossier c:\temp.


Š Ce fichier contient la liste des processus

Š Ajout de date dans le fichier avec –append, une fois en ascii, une fois en utf32 (par
défaut)

118
Powershell Automatiser l'administration Windows

ƒ Set-content écrit les données telle qu'elle les reçoit sans les reformater.

ƒ Cette commande écrit donc des octets dans un fichier quelque soit le type de fichiers
(texte ou binaire).

ƒ Set-content écrase le contenu du fichier de destination (pas de switch –append comme


out-file).

ƒ Set-content fait partie de la famille des commandelettes *-content :

Š Add-content (ajouter des données dans un fichier


• Add-content c:\temp\[Link] "nouvelle données…"

Š Get-content (lire le contenu d'un fichier)


• Get-content [Link]

Š Clear-content (effacer les données d'un fichier)

119

Powershell Automatiser l'administration Windows

ƒ Création d’un fichier nommé [Link] dans le dossier courant avec set-content.
Š On entre la ligne »Bienvenue….fichier »
Š Ajout ensuite avec Add-content d’une autre ligne

120
Powershell Automatiser l'administration Windows

ƒ Les paramètres utilisables avec set-content sont :

Paramètre Description
Path Fichier de destination recevant les données
Value Données à écrire
Include Modifie uniquement les élément spécifiés
Exclude Omet les éléments spécifiés
Filter Spécifie un filtre dans le format ou le langage du
fournisseur
PAssThru Passe l'objet créé à travers le pipeline
Force Force la commande à réussir
Credential Utiliser des informations d'identification pour valider l'accès
au fichier
Encoding Type d'encodage.

121

Powershell Automatiser l'administration Windows

ƒ Utilisation de Set-content et Add-content

Š -encoding byte permet de voir les caractères en ascii. 65=A, 66=B …


ƒ Nous remarquons qu'il ya 2 octets systématiquement ajouté 13 et 10
Š 13 correspond à CR (retour chariot)
Š 10 correspond a LF (Retour ligne)

122
Powershell Automatiser l'administration Windows

ƒ Permet de recherche dans un ou plusieurs fichiers une chaine de caractère.

Š Connu sous unix comme commande grep


Š Paramètre de select string

Paramètre Description
Pattern Chaine ou Expression régulière à rechercher
Path Cible de la recherche : chaine ou fichier
Include Récupère uniquement les éléments spécifiés
Exclude Omet les éléments spécifiés
CaseSensitive Respecte la casse
List Specifie qu'une seule correspondance doit être retourné
par fichier
Quiet Retourne une valeur booléenne vrai si la chaine est trouvé

123

Powershell Automatiser l'administration Windows

ƒ Exemple : recherche dans le dossier Temp tout les fichiers *.txt contenant le mot clé
"formation"

Š Retourne 2 fichiers contenant formation [Link] et [Link] :5 indique le n° de


ligne ou se trouve le mot recherché

ƒ Cet exemple permet de rechercher également dans les sous-dossiers le mot clé
formation. Ajouter le | fl pour avoir un format sous fore de liste.

ƒ Ci-dessous expression régulière pour la recherche d'adresse

124
Powershell Automatiser l'administration Windows

ƒ Affichage des processus en cours contenant les mot clé avg*


Š En tapant get-process « avg* », nous aurions obtenu les process aussi, affiché
différemment.

Š Cet exemple recherche tous les processus commençant par mst* puis arrête ces
processus avec la commandelette stop-process

Š Cet exemple force l'arrêt d'un processus n'appartenant pas à l'utilisateur

get-process lsass | stop-process -force

125

Powershell Automatiser l'administration Windows

La gestion des fichiers CSV

126
Powershell Automatiser l'administration Windows

ƒ Les fichiers CSV (Comma Separated Values) sont des fichiers texte séparés par des
virgules.

ƒ La première ligne représente souvent l'en-tête (nom des colonnes), les lignes suivantes
représentent les données.

ƒ Exemple :
Š Nom, prénom, fonction
Š Marot, Gaël, Consultant SI
Š Jegu, Pierrick, Consultant SCM

ƒ Pour gérer les fichiers CSV, PW utiliser les cmdlets


Š Export-csv
Š Import-csv

127

Powershell Automatiser l'administration Windows

ƒ Les paramètres pour Export-csv sont :

Paramètre Description
Path Chemin du fichier de destination
InputObject Accepte un objet comme entrée
Force Remplace le fichier si celui existe déjà
Encoding Type d'encodage (voir Out-file). Par défaut Ascii
NoTypeInformatio Ne prend pas en compte l'en-tête
n
NoGlobber Ne pas écraser le fichier si il existe

ƒ Les paramètres pour import-csv sont :

Paramètre Description
Path Chemin du fichier source

128
Powershell Automatiser l'administration Windows

ƒ Cet exemple liste le journal des événements applications, et enregistre les 100 premiers
événement dans un fichier [Link]

Š Get-eventlog application –newest 100 | select-object TimeGenerated, EntryType,


Source, EventID | export-csv c:\temp\[Link]

Š Select-object permet de sélectionner les objets que l'on souhaite récupérer.

129

Powershell Automatiser l'administration Windows

ƒ Pour importer des fichiers csv.


Š $journal = import-csv c:\temp\[Link]
Š $journal

130
Powershell Automatiser l'administration Windows

Export des données en tant que page HTML

131

Powershell Automatiser l'administration Windows

ƒ La cmdlet ConvertTo-HTML permet de générer des pages HTML.

Š Les paramètres sont :

Paramètres Description
Property Propriété de l'objet passé en paramètre à écrire dans la page
HTML
InputObject Accepte un objet comme entrée
Body Spécifie le texte à inclure dans la balise <Body>
Head Spécifie le texte à inclure dans la balise <head>
Title Spécifie le texte à inclure dans la balise <title>

132
Powershell Automatiser l'administration Windows

ƒ L'exemple suivant liste les services de votre OS puis les enregistre au format HTML dans
un fichier nommé [Link]

Š Get-service | convertTo-html –property name, displayname, status –title "service


de l'os" | out-file [Link]
Š -property prend les propriétés de l'objet get-service

133

Powershell Automatiser l'administration Windows

ƒ Utilisation de Body, il est possible de spécifier le contenu supplémentaire qui apparaitra


dans le corps de la page juste avant les données de l'objet
Š Exemple:
• Get-service | convertTo-HTML –property name, displayname, status –title
"Service de l'os" –body "<CENTER><H2> Etat des services de
l'os</H2></CENTER>"

134
Powershell Automatiser l'administration Windows

ƒ Cet exemple permet d'afficher une couleur en fonction de l'état des services.
Š $_ représente l'objet testé

ƒ Par défaut convertTo-html travaille sur des tableaux

Š Pour chaque objet testé, on vérifie si le service est Arrêté ou en fonctionnement

Š -match permet de contrôler cet état (contient "Running)

135

Powershell Automatiser l'administration Windows

136
Powershell Automatiser l'administration Windows

Scripts avec authentification

137

Powershell Automatiser l'administration Windows

ƒ Il est possible de retourner des informations ou d'agir sur un ordinateur distant

Š Vous devez au préalable vous authentifier

Š On utilise pour cela le "credential"

Š Le credential permet une authentification comme par ex:

• interroger une liste de serveurs distants avec get-wmiobject sachant que notre
propre compte n'ait pas accès à ces serveurs, on utilise alors la commande get-
credential pour saisir un nouveau couple username/password, et à passer le
résultat à get-wmiobject via son paramètre –credential :

138
Powershell Automatiser l'administration Windows

ƒ Tapez la commande suivante: Saisir un login et mot de


Š $auth=get-credential (ouvrira la fenêtre d'authentification) passe pour
s'authentifier auprès
des serveurs distants

Š Nous pouvons maintenant utiliser get-wmiobject en utilisant notre authentification


• $auth=get-credential
• Get-wmiobject win32_logicalDisk –computername win-tcko58cnjlj -
credential $auth

139

Powershell Automatiser l'administration Windows

ƒ Possibilité d'utiliser le paramètres –computername pour définir plusieurs serveurs

ƒ Cet exemple permet de s'authentifier sur des serveurs distants.


Š Le nom des serveurs est stocké dans un fichier texte nommé [Link] appelé
par la get-content
Š Pour chaque pc, nous retournons la liste des disques logiques.

140
Powershell Automatiser l'administration Windows

ƒ Possibilité de renseigner le nom de l'utilisateur et le domaine avec :


Š get-credential "domaine\nomutil".
Š La saisie d'un mot de passe avec get-credential n'est pas possible, nous devons
passer par une autre commande

ƒ Nous allons maintenant utiliser une authentification entièrement automatisée


permettant une exécution du script sans besoin de renseigner un mot de passe (diapo
suivante)

141

Powershell Automatiser l'administration Windows

ƒ Cette commande doit être utiliser pour chiffrer le mot de passe avant de s'authentifier
Š ConvertTo-SecureString convertit une chaine de texte standard en une chaine
sécurisée
Š La première étape consiste à chiffrer le mot de passe, la seconde permet
l'authentification en passant le login et le mot de passe , nous faisons appel pour
cela à un objet nommé [Link]

Š On n'est pas obligé de mettre les paramètres –typename et -argumentlist

142
Powershell Automatiser l'administration Windows

Exécution de script à distance

143

Powershell Automatiser l'administration Windows

ƒ L'utilisation de PowerShell est une autre méthode permettant l'administration à


distance,

Š soit grâce à l'argument computername,

Š soit via la commande invoke-command,

Š la commande enter-pssession ou l'argument cimsession.

ƒ Cela nécessite la configuration de WinRm (Windows Remote Management) grâce à la


commande suivante :
Enable-PSRemoting

ƒ Cette commande :
ƒ Démarre le service WinRM et le définit en automatique,
ƒ Crée un écouteur WinRM pour accepter les demandes sur toute adresse IP,
ƒ Active une exception dans le parefeu…

144
Powershell Automatiser l'administration Windows

ƒ Il est possible d'ouvrir une session interactive à distance avec la commande Enter-
Pssession :

Š Enter-PSsession -ComputerName Win8-01

Š [Win8-01]: PS C:\Users\Administrateur\Documents>

Š Vous devez spécifiez le nom de l'hôte tel qu'il apparait dans Active Directory ou
dans la liste d'hôte de confiance (par défaut les IP ou les Alias DNS ne fonctionnent
pas).

145

Powershell Automatiser l'administration Windows

ƒ Point à prendre en compte sur les connexions distantes :

Š Par défaut vous ne pouvez pas exécuter de commande qui initie une autre session
distante à partir d'une session distante (second hop).

Š Vous ne pouvez pas lancer des applications graphiques.

Š Vous ne pouvez exécuter de commande qui possèdent leur propre shell tel que
nslookup ou netsh.

Š La connexion est considérée comme "network logon" au même titre qu'un accès à
un partage.

Š Rien de ce que vous effectuez n'est visible par un utilisateur en session interactive.

146
Powershell Automatiser l'administration Windows

ƒ Certaines commandes disposent de l'argument -computername permettant ainsi de


l'exécuter à distance
Š Get-process -computername srv-1

Š Il est possible de transmettre une ou plusieurs commandes à plusieurs hôtes


distants grâce à la commande Invoke-Command :

• Invoke-Command -ScriptBlock { Get-Process -name s* } -computername


localhost,win8-01

Š Les commandes issues de la V3 disposent de l'argument cimsession qui permet


d'exécuter la commande sur l'ordinateur distant :
• Get-SmbShare -CimSession srv-1

147

Powershell Automatiser l'administration Windows

ƒ Il est possible d'ouvrir des sessions et de les réutiliser simplement


Š $win8 = New-PSsession -ComputerName win8
Š $domaincontrollers = New-PSsession -ComputerName win8,windc1
Š Enter-PSSession -Session $win8
Š Invoke-Command -Session $domaincontrollers -ScriptBlock { get-eventlog `
Š -LogName security -Newest 50 }

ƒ Afficher la liste des sessions


Š Get-PSSession

ƒ Utiliser une session existante


Š Enter-PSSession –Session (Get-PSSession –computername WINDC1)
Š Fermer toutes les sessions
Š Get-PSSession | Remove-PSSession

ƒ Fermer une session


Š Get-PSSession -ComputerName win8 | Disconnect-PSSession
148
Powershell Automatiser l'administration Windows

ƒ Utilisation d'une commande avec argument computername :


Add-windowsfeature telnet-client -computer 2012-2

ƒ Utilisation de invoke-command pour éxécuter une commande à distance (équivalent de


la commande précédente) :
Invoke-command -computer 2012-2 -script {Add-windowsfeature telnet-client }

ƒ Utilisation d'un shell distant (équivalent de la commande précédente) :


enter-pssession -computer 2012-2
[2012-2]:PS c:\>Add-windowsfeature telnet-client

ƒ Utilisation d'une commande avec argument cimsession :


Get-Smbshare -cimsession 2012-2

149

Powershell Automatiser l'administration Windows

150
Powershell Automatiser l'administration Windows

Le principe du module

151

Powershell Automatiser l'administration Windows

ƒ Un module est un ensemble de fonctionnalités Windows PowerShell, c'est un package


contenant :
Š des applets de commande
Š des fournisseurs
Š des scripts,
Š des fonctions
Š …
ƒ Un manifeste de module est un fichier qui contient .psd1 une table de hachage. Les clés
et valeurs dans la table de hachage faire les choses suivantes:
Š Décrire le contenu et les attributs du module.
Š Définir les conditions préalables.
Š Déterminer comment les composants sont traités.

ƒ Après avoir importé un module, vous pouvez l'utiliser dans votre session.

ƒ Exemple :
Š import-module activeDirectory pour utiliser des cmdellettes dans l'ad
Š Depuis Windows 2012 (V3) il n'est plus forcément utile d'importer le module avant
d'exécuter la commande
152
Powershell Automatiser l'administration Windows

ƒ Pour lister les modules présent dans votre environnement tapez la commande
Š Get-module

ƒ Pour lister les modules pouvant êtres traités dans votre environnement tapez la
comdlte suivante
Š Get-Module -List

153

Powershell Automatiser l'administration Windows

Gestion des archives

154
Powershell Automatiser l'administration Windows

ƒ Un nouveau module permettant de gérer nativement les archives apparaît dans


Powershell 5.0

Š Ce dernier permet de générer des archives (Compress-Archive) ou de les extraire


(Expand-Archive).

Š Seul le format Zip est actuellement géré. Un paramètre nommé “update” permet
de mettre à jour une archive existante en ajoutant seulement les nouveaux fichiers
et les changements sur les fichiers déjà présents dans l'archive.

• Le paramètre “path” peut définir un ou plusieurs fichiers ainsi qu'un dossier


entier en utilisant le caractère “*” (wildcard).

• Enfin le paramètre “CompressionLevel” permet d'influencer le taux de


compression et la taille finale de l'archive.

155

Powershell Automatiser l'administration Windows

ƒ Les cmdlets de gestion des archives :

Š Compresser le contenu du dossier arbo

• Compress-Archive -Path C:\arbo\* -Update -DestinationPath


C:\Arbo\[Link]

156
Powershell Automatiser l'administration Windows

Les cmdlets de gestion web

157

Powershell Automatiser l'administration Windows

ƒ Invoke-WebRequest
Š Cette cmdlets très puissante permet d’extraire des informations issues de page
web.
Š Le premier exemple très simple permet de récupérer en format text le contenu
d’un site inter

$site = Invoke-WebRequest -URI "[Link]


$[Link]

158
Powershell Automatiser l'administration Windows

Š Le second exemple permet d’utiliser des filtres et d’afficher les derniers numéro du
loto

#"^\d+$" expression régulière le ^ indique le début d'une chaine \d+$ indique que
nous recherchons des chiffres positif
$Site = Invoke-WebRequest -URI "[Link]
tirage/loto/resultats"
#tagname retourne les tagues web comme H1, LINK, P, TABLE, TD, TR, BR, LI ...donc
ici nous recherchons des tagues en <p>
$numLoto = $[Link] | Where-Object {$_.tagName -eq "p"} | Where-Object {
$_.InnerText -match "^\d+$" } | Select-Object -property InnerText -first 6
$numLoto

159

Powershell Automatiser l'administration Windows

Š Ajout de la date du dernier tirage du loto

#"^\d+$" expression régulière le ^ indique le début d'une chaine \d+$ indique que nous recherchons
des chiffres positif
$Site = Invoke-WebRequest -URI "[Link]
#tagname retourne les tagues web comme H1, LINK, P, TABLE, TD, TR, BR, LI ...donc ici nous
recherchons des tagues en <p>
$numLoto = $[Link] | Where-Object {$_.tagName -eq "p"} | Where-Object { $_.InnerText -
match "^\d+$" } |
Select-Object -property InnerText -first 6
$dateloto =$[Link] | Where-Object {$_.tagName -eq "H3"} | Select-Object -property
innertext -first 1
$[Link]
write-host "date du dernier loto: " -nonewline
write-host $[Link] -ForegroundColor Yellow
Write-host "les numéros gagnants: " -NoNewline
write-host $[Link] -f Green

160
Powershell Automatiser l'administration Windows

ƒ L’exemple suivant recherche les adresses IP connectés à votre station et lancer une
recherche pour géolocaliser chaque adresse ip

#get-netTcpConnection | where .... permet de rechercher les adresses


externes connectées
Get-NetTCPConnection | where state -Match established | sort-object -
Property remoteaddress -Unique | %{
$r=invoke-webrequest -uri
"[Link]
$results = $[Link]("TR")
$results | % Innertext
write-host "$("-" * 50)"}

#on peut utiliser [Link] pour filtrer sur les


balises
#H1, LINK, P, TABLE, TD, TR, BR, LI ...

161

Powershell Automatiser l'administration Windows

ƒ L’exemple suivant va chercher une image sur le web et remplace le fond d’ écran avec
cette nouvelle image

$photo=(Invoke-WebRequest -Uri
'[Link] | %{$_.images}).src
#copie de l'image vers c:\temp
Start-BitsTransfer -Source [Link] -
Destination C:\temp

#mise à jour sur le bureau


set-itemproperty -path "HKCU:\Control Panel\Desktop\" -name WallPaper
-value "c:\temp\$($[Link]("/")[-1])"
[Link] [Link], UpdatePerUserSystemParameters ,1, true

162
Powershell Automatiser l'administration Windows

Les cmdlets pour gérer vos serveurs et vos


stations de travail

163

Powershell Automatiser l'administration Windows

ƒ Lister les rôles et fonctionnalités d'un ordinateur distant


Š Get-windowsfeature -computer 2012-2

ƒ Ou pour pouvoir tout lire plus facilement


Š Get-windowsfeature -computer 2012-2 | out-file [Link]

ƒ Ou pour avoir un tableau "intéractif"


Š Get-windowsfeature -computer 2012-2 | out-gridview

ƒ Installer un rôle ou fonctionnalité


Š Add-windowsfeature nom_fonctionnalité -computer 2012-2

ƒ Supprimer un rôle ou fonctionnalité


Š remove-windowsfeature nom_fonctionnalité -computer 2012-2

Š L'argument -IncludeAllSubFeature permet d'inclure les sous-éléments.

164
Powershell Automatiser l'administration Windows

ƒ Gestion des pilotes d'imprimantes :

Š Connaître les pilotes d’imprimantes installés


Get-PrinterDriver

Get-PrinterDriver -Name PDFCreator


Get-PrinterDriver -Name PDFCreator | fl

165

Powershell Automatiser l'administration Windows

Š Ajouter un pilote d’imprimante


• Stagguer le drivers dans le magasin
pnputil -i -a C:\temp\driversHPPCL6\[Link]

Š Ajouter Drivers
Add-PrinterDriver -Name "HP Universal Printing PCL 6"
Get-PrinterDriver

ƒ Supprimer un pilote d’imprimante


Remove-PrinterDriver -Name "HP Universal Printing PCL 6" -
RemoveFromDriverStore

Š RemoveFromDriverStore enleve le drivers du magasin

166
Powershell Automatiser l'administration Windows

ƒ Gestion des ports d'imprimante


Š Obtenir la liste des ports

Get-PrinterPort | Select-Object name, Description

167

Powershell Automatiser l'administration Windows

ƒ Ajouter port TCP/IP

Add-PrinterPort -Name "IP_192.168.0.50" -PrinterHostAddress


[Link]

Get-PrinterPort -Name "IP_192.168.0.51" | Format-List

ƒ Supprimer port TCP/IP

Remove-PrinterPort -Name "IP_192.168.0.50"

168
Powershell Automatiser l'administration Windows

ƒ Ajouter une imprimante


Add-Printer -Name "HP LaserJet CP3525" -DriverName "HP
Universal Printing PCL 6" -PortName "IP_192.168.0.50"

Get-Printer "HP LaserJet CP3525" | fl *| Select-Object


Name,DriverName,PortName

ƒ Modifier les paramètres d'une imprimante


Set-Printer -Name "HP LaserJet CP3525" -Comment "Imprimante HP
ajoutée avec Windows PowerShell" -Location "Bureau 62"

ƒ Supprimer une imprimante


Remove-Printer -Name "HP LaserJet CP3525"

ƒ Définir une imprimante par défaut


(Get-WmiObject -Class Win32_Printer -Filter "Name='Microsoft
XPS Document Writer'").SetDefaultPrinter()

169

Powershell Automatiser l'administration Windows

ƒ Accéder aux certificats utilisateur


Š Set-Location Cert:
Š Get-ChildItem

ƒ créer certificats auto signé:


New-SelfSignedCertificate -DnsName [Link] -
CertStoreLocation Cert:\LocalMachine\My

170
Powershell Automatiser l'administration Windows

ƒ Exporter un certificat :
Export-Certificate -Cert
Cert:\LocalMachine\My\92990111298BC73FBADAF2212BE0424AE20E93DB
-FilePath C:\Users\LoicThomas\Desktop\[Link]

ƒ Exporter un ensemble de certificats dans un seul fichier

Get-ChildItem -Path Cert:\LocalMachine\ My | Export-Certificate


-FilePath C:\Temp\[Link] -Type SST

ƒ Exporter un certificat avec une clé privée


$motdepasse = ConvertTo-SecureString "Password1" -AsPlainText -
Force
Get-ChildItem
Cert:\LocalMachine\My\92990111298BC73FBADAF2212BE0424AE20E93DB
| Export-PfxCertificate -FilePath
C:\Users\LoicThomas\Desktop\[Link] -Password
$motdepasse

171

Powershell Automatiser l'administration Windows

ƒ Importer des certificats


Import-Certificate -FilePath C:\Temp\[Link] -
CertStoreLocation Cert:\LocalMachine\My

ƒ Importer un ensemble de certificats


$certificats = Get-ChildItem -Path C:\Temp\Certificats
$certificats | Import-Certificate -CertStoreLocation
Cert:\LocalMachine\My

ƒ Importer un certificat au format PFX


$motdepasse = ConvertTo-SecureString "Password1" -AsPlainText -Force
Import-PfxCertificate -FilePath C:\Temp\[Link]
Cert:\LocalMachine\My -Password $motdepasse

172
Powershell Automatiser l'administration Windows

ƒ Ces tâches peuvent être déclenchés pour démarrer automatiquement, ou être


effectués selon une planification récurrente.

ƒ Lorsqu'un travail planifié est créé, il est enregistré sur le disque, puis inscrit dans le
Planificateur de tâches.

ƒ La seule différence entre les tâches planifiés et les job en arrière-plan est que les
travaux planifiés enregistrent leurs résultats sur le disque.

Š Register-ScheduledJob –Name LastLogonJob –FilePath c:\script\LastLogon.ps1

173

Powershell Automatiser l'administration Windows

ƒ Pour que le travail planifié puisse s'exécuter, une planification ou un déclencheur


doivent être définis.
Š Les déclencheurs sont créés à l'aide de l'applet de commande:
• New-JobTrigger.

ƒ Avec cette applet de commande, vous pouvez utiliser l'applet de commande Add-
JobTrigger pour ajouter le déclencheur à un travail planifié déjà inscrit, ou utilisez-la
pour attribuer un déclencheur lorsqu'un nouveau travail planifié est inscrit.

ƒ L'exemple suivant montre comment créer un déclencheur qui s'exécute tous les lundis
et vendredis à 9 h 00 du matin, puis inscrit le nouveau travail planifié avec le
déclencheur
$Trigger = New-JobTrigger –Weekly –DaysOfWeek Monday,Friday –At 9:00AM
Register-ScheduledJob –Name ScheduledLastLogonJob –FilePath `
c:\script\LastLogon.ps1 -Trigger $Trigger

174
Powershell Automatiser l'administration Windows

ƒ Vous pouvez également utiliser l'applet de commande Add-JobTrigger pour modifier un


travail planifié existant, comme l'illustre l'exemple suivant:

Add-JobTrigger -Name LastLogonJob -Trigger `


(New-JobTrigger -Daily -At 9:00AM)

ƒ Les travaux planifiés peuvent être utilisés pour exécuter automatiquement la tâche de création des
rapports, de vérification des paramètres de configuration, de réalisation de la maintenance des
utilisateurs et des groupes, et à de nombreuses autres fins

175

Powershell Automatiser l'administration Windows

Les cmdlets de gestion du réseaux

176
Powershell Automatiser l'administration Windows

ƒ Get-netroute permet d’obtenir la table de routage de la station travail ou d’une station


distante.
Get-NetRoute

y Get-NetRoute -DestinationPrefix [Link]/0

New-NetRoute -DestinationPrefix [Link]/24 ` Création d’une nouvelle


-NextHop [Link] `
-RouteMetric 256 ` entrée dans la table de
-InterfaceIndex 4 `
-CimSession MW12100
routage du serveur MW12100
.

177

Powershell Automatiser l'administration Windows

ƒ Pour supprimer une entrée dans la table de routage


remove-netroute -DestinationPrefix [Link]/24 -
Confirm:$false

ƒ Find-netroute permet de trouver une route pour une destination


ƒ Ex, trouver une route pour l’adresse internet [Link]
find-netroute -RemoteIPAddress [Link]

178
Powershell Automatiser l'administration Windows

ƒ Plusieurs cmdlettes permettent de tester les connexions distantes soit par les
protocoles icmp ou tcp
ƒ Test-connection permet d’effectuer un test de ping sur une ou plusieurs stations
Test-Connection [Link] -Count 1 `
-BufferSize 200
ƒ Ce premier test envoi un seul ping (count) à l’adresse ip [Link] avec une taille de
200 octets

y Le second test effectue à partir de plusieurs sources un test ip


#pinguer à partir des différentes adresses source l'adresse computername
$auth=Get-Credential administrateur
Test-Connection -Source [Link], [Link], [Link] `
-ComputerName [Link] `
-Credential $auth `
-Count 1

179

Powershell Automatiser l'administration Windows

ƒ L’exemple suivant testent plusieurs sources et plusieurs destinations


$auth=Get-Credential administrateur
Test-Connection -Source [Link], [Link], [Link] `
-ComputerName [Link], [Link] `
-Credential $auth `
-Count 1

180
Powershell Automatiser l'administration Windows

ƒ La cmdlette test-netconnection permet de tester les connexions sur des ports


Test-netconnection [Link] -informationlevel detailed
Test-NetConnection [Link] -TraceRoute
Test-NetConnection [Link] -Port 80
#ou
Test-NetConnection [Link] -CommonTCPPort HTTP
Test-NetConnection [Link] -port 25 -InformationLevel Detailed

PS F:\Documents\OneDrive\Documents\script powershell\Réseaux> Test-NetConnection [Link] -Port 80 -


InformationLevel Quiet
True

PS F:\Documents\OneDrive\Documents\script powershell\Réseaux> Test-NetConnection [Link] -Port 8025 -


InformationLevel Quiet

AVERTISSEMENT : TCP connect to [Link] failed


False
181

Powershell Automatiser l'administration Windows

ƒ Get-netTcpconnexion permet d’obtenir toutes les connexions tcp sur votre poste
Get-NetTCPConnection

Obtenir toutes connections établies sur Internet


Get-NetTCPConnection -State Established -AppliedSetting Internet

182
Powershell Automatiser l'administration Windows

ƒ Le script suivant permet de géolocaliser les adresses internet présent sur votre poste.
ƒ Pour cela, avant de l’exécuter, connectez vous à internet et exécuter le script suivant
#la première partie récupère les connexions avec internet, sans prendre
[Link]
#on supprime ensuite les doublons avec sort-object
#on utilise la cmdlette invoke-restMethod pour se connecter en json et
rechercher l'adresse ip (contenu dans remoteaddress)
#on affiche ensuite le résultat dans un out-gridwiew
Get-NetTCPConnection -State Established -AppliedSetting Internet | where
remoteAddress -NotLike "[Link]" |
Sort-Object -Property RemoteAddress -Unique | %{
Invoke-RestMethod -uri "[Link] | Out-
GridView -Title "géolocalisation"

183

Powershell Automatiser l'administration Windows

ƒ La cmdlette Get-NetConnectionProfile affiche les connexions et les différents profiles


de vos cartes réseaux (profils public, privé, domaine)

ƒ La cmdlette set-connectionProfile permet de mettre à jour le profile de connexion,


l’exemple suivant permet de changer le profil de private à oublic
Get-NetConnectionProfile | Set-NetConnectionProfile -NetworkCategory Public

184
Powershell Automatiser l'administration Windows

ƒ Plusieurs cmdlettes permettent de reconfigurer l’adressage ip des serveurs et stations


de travail.
ƒ Get-netipaddress permet de voir la configuration ip du poste
ƒ Pour ajouter une nouvelle adresse ip, utiliser new-netipaddress
ƒ L’exemple suivant ajoute 2 adresses ip sur la carte réseau éthernet
New-NetIPAddress -IPAddress [Link] `
-DefaultGateway [Link] `
-AddressFamily IPv4 `
-PrefixLength 24 `
-InterfaceAlias ethernet `

New-NetIPAddress -IPAddress [Link] `


-DefaultGateway [Link] `
-AddressFamily IPv4 `
-PrefixLength 24 `
-InterfaceAlias ethernet `
ƒ Si vous souhaitez mettre à jour une adresse ip, il faudra utiliser la cmdlette set-
netipadress

185

Powershell Automatiser l'administration Windows

ƒ La configuration et la mise à jour des adresses ip DNS sur la carte réseau se fait avec la
cmdlette Set-DnsClientServerAddress
ƒ Set-DnsClientServerAddress -InterfaceAlias ethernet `
-ServerAddresses ("[Link]", "[Link]")

ƒ Get-DnsClientServerAddress affiche les DNS sur vos différents interfaces

ƒ La cmdlette set-dnsclient permet de reconfigurer les paramètres tel que les suffixes dns

set-dnsclient -InterfaceIndex 11 `
-ConnectionSpecificSuffix "[Link]"

La cmdlette get-dnsclient permet de voir la configuration DNS sur votre poste

186
Powershell Automatiser l'administration Windows

ƒ La cmdlette get-dnsclientcache vous donne les résolutions DNS dans le cache DNS du
poste

ƒ
ƒ Clear-DnsClientCache permet de purger le cache DNS, toutes ces cmdlettes peuvent
pour rappel être exécutées sur un ordinateur distant

ƒ La cmdlettes suivantes videraient les caches DNS de toute les stations de l’uo
get-adcomputer -filter * -searchbase "ou=srv,dc=gtek-formation,dc=fr"
| %{Clear-DnsClientCache -CimSession $_.name}

187

Powershell Automatiser l'administration Windows

Les cmdlets du pare-feu

188
Powershell Automatiser l'administration Windows

ƒ Get-netFirewallProfile -all
Š Affiche l'activation du pare-feu et des profiles
ƒ Get-netFirewallProfile | ft name, enabled
Š Affiche l'activation du pare-feu et des profiles en n'affichant que le nom et l'état

Š Le test suivant effectue un contrôle sur tous les serveurs du domaine de type 2012.

189

Powershell Automatiser l'administration Windows

ƒ La cmdelette Set-netFirewallProfile
permet d'activer ou désactiver
votre pare-feu

Activation, désactivation du
pare-feu sur 2 serveurs
Set-NetFirewallProfile -all -
Enabled False -CimSession
srv2K12-R2,
srv2K12R2CD1
Get-NetFirewallProfile -
CimSession srv2K12-R2,
srv2K12R2CD1 | ft name ,
enabled -AutoSize

190
Powershell Automatiser l'administration Windows

ƒ Activer le pare-feu sur le profile de domaine


Š Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True
ƒ L'exemple suivant créé une règle de pare-feu autorisant le ping

Direction inbound pour règle en


entrée
Protocol icmpV4 (TCP, UDP…)
-action allow (pour règle activée)
-interface (pour les interfaces
réseaux)

Vérifier la règle définie dans votre


pare-feu.
191

Powershell Automatiser l'administration Windows

ƒ Cette cmdlet permet d'afficher tout les rôles définit dans votre pare-feu (rôle pouvant
être considéré comme une règle de pare-feu)
ƒ Pour faire ce test, créer une règle entrant autorisant le ping sur le protocole ICMP type
8 code 0

Règle du pare-feu définit


manuellement

Cette première cmdlette permet


d'afficher la règle nommée
"pingDomaineGtek"

192
Powershell Automatiser l'administration Windows

ƒ Cette cmdlet permet d'afficher le rôle PingDomaineGTEK et la config de l'onglet Port


et protocole (rôle pouvant être considéré comme une règle de pare-feu)
ƒ Get-NetFirewallRule -DisplayName "PingDomaineGtek" | Get-NetFirewallPortFilter

Nous retrouvons ici la règle de


pare-feu pour l'autorisation du
Ping

Get-netFirewallPortFilter
permet de voir l'onglet port de
cette règle

193

Powershell Automatiser l'administration Windows

Modifiez votre règle pour l'adresse ip local en


mettant votre id réseaux ([Link]/24)

ƒ Get-NetFirewallRule -DisplayName "PingDomaineGtek" | Get-NetFirewallAddressFilter

194
Powershell Automatiser l'administration Windows

ƒ Pour voir les programmes et service


Š Get-NetFirewallRule -DisplayName "PingDomaineGtek" | Get-
NetFirewallApplicationFilter

195

Powershell Automatiser l'administration Windows

ƒ La commande suivante permet de vérifier sur quel interface réseaux s'applique la règle
Š Get-NetFirewallRule -DisplayName "PingDomaineGtek" | Get-
NetFirewallInterfaceTypeFilter

On voit ici que la règle s'applique sur


les interfaces réseaux ethernet et wifi

196
Powershell Automatiser l'administration Windows

ƒ Get-NetFirewallRule -DisplayName
"PingDomaineGtek" | Get-
NetFirewallSecurityFilter
ƒ Permet de voir la sécurité de votre
règle

197

Powershell Automatiser l'administration Windows

Windows defender

198
Powershell Automatiser l'administration Windows

ƒ Le module defender sur Windows 10 permet de configurer, analyser…windows


defender
Get-Command -Module defender

ƒ Get-MpComputerStatus permet de voir l’état de windows defender, la


derniere mise à jour, la dernière anlayse rapide, détaillée…

199

Powershell Automatiser l'administration Windows

ƒ Get-mpthreat permet de voir les derniers virus, spyware, trojan…détecté par windows
defender
Get-MpThreat

ƒ Afficher la bases de virus pouvant etre détecter par windows defender


Get-MpThreatCatalog | fw threatname -Column 5

ƒ Nombre de virus détectables ds defender


ƒ Get-MpThreatCatalog | measure

200
Powershell Automatiser l'administration Windows

ƒ Start-mpscan permet de lancer windows defender


Š Start-MpScan -ScanType QuickScan (possibilité d’utiliser des paramétres et des
scans distants)

Š Start-MpWDOScan permet de lancer une analyse hors ligne (au redémarrage)

201

Powershell Automatiser l'administration Windows

La gestion des journaux

202
Powershell Automatiser l'administration Windows

ƒ La commandelettes Get-eventLog permet de lire les différents journaux Windows

Š Get-eventLog –list liste les diférents journaux

Š Get-eventLog system liste les évènements systèmes

203

Powershell Automatiser l'administration Windows

ƒ L'exemple suivant liste le journal système contenant le mot clé DHCP dans le
message

ƒ L'exemple retourne les 5 derniers événements de chaque journal

204
Powershell Automatiser l'administration Windows

Gérer les points de restauration sur une station

205

Powershell Automatiser l'administration Windows

ƒ Récupérer les points de restauration existants

Š Get-ComputerRestorePoint

ƒ Activer la protection système


Š Enable-ComputerRestore -drive C:, D:
ƒ désactiver les points de restauration
Š Disable-ComputerRestore -Drive c:
ƒ Restaurer station avec point de restauration
Š Restore-Computer -RestorePoint 11
ƒ statut de la restauration
Š Get-ComputerRestorePoint -LastStatus

206
Powershell Automatiser l'administration Windows

Gestion des packages -OneGet

207

Powershell Automatiser l'administration Windows

ƒ Microsoft permet aujourd'hui comme dans le monde Open Source d'installer des
logiciels à partir de dépôts.

Š Ils permettent d'installer des paquets en évitant les manipulations peu reluisante
comme le téléchargement, et les nombreux suivants, suivants, suivants…

Š Cette fonctionnalité s’apparente aux gestionnaires de packages classiques que l’on


trouve dans les distributions Linux, notamment APT (Advanced Packaging Tool)
sous Ubuntu, Yum sous RedHat ou encore Aptitude sous Debian.

Š Cette fonctionnalité permet, par exemple, de télécharger et d'installer un paquet


sur un ensemble de machines, en une seule commande.

208
Powershell Automatiser l'administration Windows

ƒ Ce gestionnaire de paquet est appelé OneGet,


Š "OneGet est une nouvelle façon de découvrir et installer des paquets logiciels à
travers le Web avec OneGet, vous le pouvez.:
• Gérer une liste de référentiels de logiciels dans lequel les paquets peuvent être
recherchés, acquis et installés
• Rechercher et filtrer vos dépôts à trouver les paquets dont vous avez besoin
• Installer et désinstaller des packages d'un ou plusieurs référentiels avec une
commande PowerShell.

209

Powershell Automatiser l'administration Windows

ƒ Pour obtenir la liste des commandes disponibles :

Š Get-Command -Module Packagemanagement

210
Powershell Automatiser l'administration Windows

ƒ Une des premières étapes intéressante est de lister le sources de paquets disponible
dans votre environnement:
Š Get-PackageProvider
• Permet de lister les dépôts de votre environnement

Š Find-PackageProvider
• Lister les providers de paquets disponible

211

Powershell Automatiser l'administration Windows

ƒ Lister les packages disponibles:


Š Pour trouver ou lister les packages disponibles vous pouvez utiliser la cmdlet find-
packages
Š Lister tous les packages disponibles

Š Lister les packages disponibles pour gérer office365

212
Powershell Automatiser l'administration Windows

ƒ Installer un paquets
Š Ici on désire installer le paquet des service de communications d'Office365
• Install-Package -Name O365ServiceCommunications -Source PsGallery

213

Powershell Automatiser l'administration Windows

ƒ Installer un provider de paquet :


Š Nous allons ici installer le provider Chocolatey
• C'est un gestionnaire de paquets pour Windows

• Un gestionnaire de paquets pour Windows

¾ Chocolatey s’interface avec de nombreuses solutions de gestion de


configuration :
» Ansible : win_chocolatey
» Chef : chocolatey_package
» PowerShell PackageManagement / OneGet :
» provider natif depuis PowerShell 5/Windows 10
» Puppet : module chocolatey
» – Saltstack : module chocolatey
» – SCCM
• Une liste complète : [Link]
eaturesInfrastructureAutomation

214
Powershell Automatiser l'administration Windows

ƒ Installer le provider :
Š Install-PackageProvider -Name chocolatey

ƒ Lister les paquets disponibles depuis le dépôt:


Š Find-Package –ProviderName chocolatey

Š Nbre de paquets disponible

215

Powershell Automatiser l'administration Windows

ƒ Installer 7 zip depuis le provider Chocolatey

Š Install-Package [Link] -ProviderName chocolatey

Application installé

216
Powershell Automatiser l'administration Windows

217

Powershell Automatiser l'administration Windows

Le modèle de données

218
Powershell Automatiser l'administration Windows

ƒ WMI Windows Management Instrumentation permet d'accéder et de partager des


informations liées à l’infrastructure matérielle et logicielle de votre réseau

ƒ WMI permet simplement d'accéder à des informations telles que la taille de la


mémoire, la taille des disques ou le type et le nombre de cartes réseaux installées…

ƒ WMI permet une supervision simplifiée d’événement systèmes

ƒ Les API WMI sont basées sur la technologie COM, sous dotnet on y accède via les
classes de l’espace de nom [Link]

ƒ Pour récupérer l'instance d’une classe donnée (par ex les cartes réseaux, on doit
préciser sa clé. WMI étant un référentiel, c.-à-d. une base de données, chaque instance
possède un identifiant qui peut être une combinaison de clés (précisées lors de la
conception de la classe WMI ici win32_networkadapter)

219

Powershell Automatiser l'administration Windows

ƒ WMI est constitué de 4 composants :

Š Les fournisseurs WMI (appelé Provider) assurent :

• La disponibilité des ressources

• L'adressage dans WMI

Š Le CIMOM (Common Interface Model Object Manager) est un directeur de trafic:


• Il traite les interactions entre les fournisseurs WMI et les consommateurs (dans
notre cas, les scripts WMI sont les consommateurs)

Š Le référentiel CIM

Š La bibliothèque de scripting WMI

220
Powershell Automatiser l'administration Windows

.
ƒ Windows Management Instrumentation (WMI) offre beaucoup de possibilités pour
des scripts qui gèrent le matériel et les logiciels

ƒ WMI est une énorme base de données répondant aux besoins d'uniformisation de la
gestion des accès aux ressources de l'O.S

ƒ WMI est présent depuis NT4 SP4 en tant que composant additionnel et est
aujourd'hui complètement intégré à tous les systèmes d'exploitation

ƒ WMI a été développé en répondant au modèle CIM (Common Information Model)


introduit par le DMTF (Ditributed Management Task Force)

ƒ Le but de cette organisation est d'établir des standards quelques soient l'os
(windows, ibm, …)

221

Powershell Automatiser l'administration Windows

ƒ WMI permet aujourd'hui d'accéder assez simplement à l'ensemble des ressources de


manière unifiée via des scripts.

ƒ WMI est en fait une énorme bibliothèque référençant :

Š Toutes les informations concernant le matériel.


• Pour un disque dur, on retrouve par ex le modèle, le numéro de série, l'espace
disque disponible, le type de partition.
• Pour une carte mère, nous retrouvons le type bios, le numéro de série, les
différents type de ports …

Š Toutes les informations de gestion du système


• On retrouve l'ensemble des composants d'un système W2K comme les
journaux, le système de fichier, la gestion des services (DNS, DHCP,IIS..), …

222
Powershell Automatiser l'administration Windows

ƒ Le modèle CIM:
Š CIM est un modèle orienté objet décrivant l'environnement système et réseau
d'une entreprise (matériel, logiciel et services).

Š CIM peut être considéré comme le schéma de WMI

Š CIM ne stocke pas les informations mais offre un chemin d'accès uniformisé à
l'information recherchée

Š Comme tout schéma (par ex l'ad), CIM est hiérarchisé en classes permettant de
regrouper les ressources WMI par famille

Š Ces classes sont regroupées en espaces de nom (NameSpace) servant à regrouper


les classes sous un label commun.

Š Le plus utilisé est root/cimV2 qui regroupe les classes les plus utilisé

Š Nous retrouvons par ex root/virtualServer regroupant les classes liés à la gestion


des ressources de Virtual server

223

Powershell Automatiser l'administration Windows

ƒ 2 points important à retenir :

Š WMI ne fait que retourner des informations


• Il est toutefois possible d'accéder aux fonctionnalités du système pour modifier
par ex la configuration d'un serveur DNS

Š WMI permet de faire de l'audit en tant réel grâce aux événements WMI

ƒ Toutes ces informations sont classées sur la base du modèle CIM permettant l'échange
d'information quelque soit la plateforme utilisé

224
Powershell Automatiser l'administration Windows

ƒ WMI est très vaste, vous pouvez donc pratiquement retrouver toutes les informations
nécessaires à une bonne gestion de parc comme par ex:
Š Les @mac, IP de vos machines (classe win32_networkadapterConfiguration)
Š Les applications installées aux postes clients (classe win32_product)
Š L'espace dispo sur les disques (win32_logicalDisk)
Š La version du bios, (win32_bios)
Š de votre OS, (win32_operatingSystem)
Š La marque et le modèle du PC (win32_computersystem)
Š Les partages (win32_share)
Š L’état des batteries de portable (win32_battery)

ƒ Chaque classe WMI possède souvent plusieurs propriétés et méthodes

ƒ 2 cmdlettes utilisées avec WMI:


Š Get-wmiobject alias gwmi
Š Get-ciminstance alias gcim

225

Powershell Automatiser l'administration Windows

Listage des classes WMI

226
Powershell Automatiser l'administration Windows

ƒ Sous PowerShell la cmdlet WMI est get-wmiobject (alias gwmi )

ƒ Par défaut gwmi interroge l’espace de nom root\cimv2 de l’ordinateur local


Š Ex: gwmi win32_networkadpater

Gettype() retourne la classe dot net utilisée

__namespace et __class retourne l'espace de


nom sur lequel vous travaillez et la classe
227

Powershell Automatiser l'administration Windows

ƒ L'exemple suivant retourne toutes les propriétés de la station courant

Gwmi –list affiche les classes


disponibles dans le "namespace" (ici
root\cimV2)

Cet ex retourne les classes


win32_network*

228
Powershell Automatiser l'administration Windows

Gwmi NOM_Classe | fl * pour


obtenir toutes les propriétés d'une
classe

"…| gm" (get-member


pour obtenir les
propriétés et méthodes
associées à la classe)

Ex pour afficher les


méthodes utilisables
pour une classe
déterminée
229

Powershell Automatiser l'administration Windows

Cet exemple permet de ne pas afficher les


premières propriétés commme __.name,
__.classe

L'exemple suivant permet de


filtrer avec where-object (alias ?)
les process portant le nom
"powershell"

Vous pouvez aussi utiliser l'option –filter à la place


du where 230
Powershell Automatiser l'administration Windows

ƒ Pour rechercher les données affichées par une classe wmi, prenez le nom de la classe |
fl *:

ƒ Pour rechercher toutes les classes wmi :

231

Powershell Automatiser l'administration Windows

ƒ Get-cimClass permet de faire de la recherche sur des propriétés et méthodes.

Š Rechercher les classes utilisant la méthode reboot (-methodname recherche les


méthodes et -propertyname les propriétés)

ƒ Rechercher les classes utilisant la propriété macaddress

232
Powershell Automatiser l'administration Windows

Administrer Windows avec WMI

233

Powershell Automatiser l'administration Windows

ƒ L'exemple suivant retourne toutes les propriétés des disques locaux

ƒ L'exemple suivant retourne l'espace disponibles sur chaque partition en Go.

ƒ Logiciels installé sur un poste


Š L'exemple suivant recherche une appli nommée "ccc help japanese", cette
application est ensuite désinstallée

Š L'exemple suivant recherche les applications installées au poste contenant les


caractères pc

234
Powershell Automatiser l'administration Windows

ƒ Test de ping sur plusieurs adresses IP avec la classe win32_pingStatus

ƒ And Timeout définit le temps à partir duquel on considère que la machine ne répond
pas, accélère les temps de réponse (TimeOut en ms, par défaut 4000 ms soit 4 s ce qui
est souvent trop long pour l’analyse de centaine de machine
Š if((gwmi win32_pingStatus -filter("Address='" + $pc + "' and Timeout=300"
)).statuscode -eq 0)
235

Powershell Automatiser l'administration Windows

ƒ Outils de monitoring
Š Le script suivant récupère à partir d’un fichier une liste de serveur et retourne des
informations sur ces serveurs (adresse ip, mac, partage, os…)

236
Powershell Automatiser l'administration Windows

ƒ Modifier une adresse IP


Š Activer DHCP
• Get-wmiobject win32_networkadapterconfiguration -filter index=7 | foreach-
object {$_.enabledhcp () }
Š Adresse statique
• Get-wmiobject win32_networkadapterconfiguration -filter index=7 | foreach-
object {$_.enablestatic ('[Link]','[Link]')}
Š Gateway
• Gwmi win32_networkadapterconfiguration –filter index=7 |
%{$_.setGateways('[Link]')}

Pour voir toutes les


propriétés et méthodes,
utiliser le get-member

237

Powershell Automatiser l'administration Windows

238
Powershell Automatiser l'administration Windows

Utilisation du .NET

239

Powershell Automatiser l'administration Windows

ƒ Powershell utilise les classes .NET

Š Pour correctement fonctionner , certaines assemblies sont chargées au démarrage


de PowerShell
Š une assemblie est constitué d’un exécutable et de plusieurs DLL
Š Pour voir les assemblies chargé, tapez la commande suivante

240
Powershell Automatiser l'administration Windows

ƒ Chaque assemblie possède plusieurs méthode.


Š Les méthodes sont lisible avec GetExportedTypes()

241

Powershell Automatiser l'administration Windows

ƒ Charger une assemblie

ƒ Pour charger une assemblie, il n’existe pas de commandelettes mais nous utilisons une
classe .NET :
Š [[Link]]::LoadWithPartialName(nomAssembly)

Š Exemple:

242
Powershell Automatiser l'administration Windows

ƒ L’utilisation du .NET permet d’utiliser des centaines de classes

ƒ Nous allons utiliser plusieurs exemple comme:


Š Utilisation de formulaire pour enregistrer des personnes dans l’ad
Š Envoi de message par smtp
Š …

ƒ Ce premier ex permet de transformer une chaine de type string en type entier

243

Powershell Automatiser l'administration Windows

ƒ Nous allons voir quelques exemples de classes

Š L'option get-member –static permet d'obtenir les classes statique associé avec la
classe math (cos, pow, sqrt..)

Š [[Link]] permet d’appeler la classe math

244
Powershell Automatiser l'administration Windows

ƒ [[Link]] contient des informations générales sur l'environnement de


travail

hasShutDownStarted indique si la
machine est en train de s’arrêter.

245

Powershell Automatiser l'administration Windows

ƒ Les classes du Framework sont extrêmement volumineuses


Š Le site de Microsoft permet de lister les classes utilisables, nous retrouvons par ex
la classe [Link]

Nous pouvons lister toutes les


propriétés méthode de cette
classe
Pour l’utiliser en powershell
[[Link]]:: Méthode
Ou propriété

246
Powershell Automatiser l'administration Windows

ƒ Nous pouvons par exemple de cette classe utiliser les méthode To…

ƒ Exemple
Š $r=[[Link]]::ToInt32($r) convertit la valeur en entier long

[Link]

247

Powershell Automatiser l'administration Windows

ƒ Envoi de mail

248
Powershell Automatiser l'administration Windows

ƒ Réveil ordinateur
Š Le WakeOnLan permet d’allumer un poste éteint via l’envoi sur le réseau d’une
suite d’octet (nommé paquet magique)
Š Suite de 102 octets -> 6 FF puis 16 * @mac

Paquet capturé avec Wireshark, on


retrouve le paquet WOL…

249

Powershell Automatiser l'administration Windows

ƒ Utilisation du DNS
ƒ On peut interroger les serveurs comme le dns par ex
Š L’exemple suivant retourne le nom de la station via dns

L’exemple suivant
retourne les adresses ip
de l’ordinateur courant

250
Powershell Automatiser l'administration Windows

ƒ L’exemple suivant résout une adresse IP en un nom d’hôte

Š (La zone inversée doit être créée sinon netbios)

251

Powershell Automatiser l'administration Windows

ƒ La classe [Link]
Š Cette classe est intéressante retourne des informations sur l’utilisateur courant

252
Powershell Automatiser l'administration Windows

Utilisation des formulaires

253

Powershell Automatiser l'administration Windows

ƒ Pour utiliser les formulaires, on fait appel à l’assemblie [Link]


ƒ Cette classe permet la création d’interface graphique (GUI)
ƒ Le framework .NET utilise cette classe pour la création d’objet graphique

Nous chargeons
l’assembleur pour les
formulaires

Déclaration d’un nouveau


contrôle type formulaire

Titre du formulaire

Showdialog permet enfin d’afficher à l’écran le


formulaire Taille du contrôle (tableau avec
@ pour la hauteur et margeur
Ce premier ex affiche simplement un formulaire.
Chaque objet dans le jargon est appelé un contrôle.
Un contrôle est un objet comme:
. un bouton radio
. Un champ de type texte
. Une liste déroulante
…. 254
Powershell Automatiser l'administration Windows

Cet exemple ajoute un


bouton en bas à droite,
nous codons dans un
événement add_click
(lorsque l’on clique sur
le bouton, on
déclenchera la
fermeture du
formulaire

255

Powershell Automatiser l'administration Windows

ƒ L’exemple suivant utiliser un contrôle label plus un timer.


Š Nous souhaitons dans cet exemple mettre à jour toutes les 2 secondes la date
Š Nous commençons par le même code que tout à l’heure

256
Powershell Automatiser l'administration Windows

Nous ajoutons le contrôle


label, nous le positionnons
dans le formulaire
Autosize permet d’ajuster la
taille du label par rapport au
contenu.
Nous ajoutons avec
[Link] le label dans le
formulaire

Nous déclarons un nouvel objet …[Link]


Add_tick permet d’exécuter du code qui sera
« rafraichit par le timer »
Ici nous souhaitons mettre à jour le label.
$[Link]() déclenche le te=imer
257

Powershell Automatiser l'administration Windows

ƒ L’exemple suivant nous permet d’enregistrer un utilisateur dans l’active directory


Š $obj est notre variable nous permettant de se connecter à l’active directory

Nous déclarons notre


formulaire de type
Forms

258
Powershell Automatiser l'administration Windows

ƒ Nous saisissons ici les différents champs nécessaires pour enregistrer notre user.
Š TextBox est un champ de type Texte

259

Powershell Automatiser l'administration Windows

ƒ Nous ajoutons ici les boutons valider et annuler

260
Powershell Automatiser l'administration Windows

Š Ce code permet en premier d’afficher dans une étiquette le prénom et le nom de


l’utilisateur
Š Ensuite nous enregistrons dans l’AD les informations saisies par dans le formulaire

261

Powershell Automatiser l'administration Windows

ƒ L’exemple suivant permet toujours d’enregistrer des utilisateurs mais cette fois nous
donnons en plus le choix de l’unité d'organisation

262
Powershell Automatiser l'administration Windows

263

Powershell Automatiser l'administration Windows

Š Nous ajoutons ici un contrôle type liste déroulante (combobox)


Š Nous recherchons toutes les uos dans notre active directory
Š Ces uos seront ensuite afficher dans la liste déroulante

264
Powershell Automatiser l'administration Windows

265

Powershell Automatiser l'administration Windows

ƒ Nous enregistrons l’utilisateur dans la bonne uo


Š [ADSI]$uniteorg.Get_text() pemetde se connecter sur la bonne uo

266
Powershell Automatiser l'administration Windows

Les objets Com

267

Powershell Automatiser l'administration Windows

ƒ La technologie COM (Component Object Model) permet la communication entre


différentes applications

ƒ Nous pouvons par exemple aller chercher une info dans un fichier Excel, puis recopier
cette info dans un fichier Word, finir par une présentation Powerpoint, puis une
présentation sur IE…

ƒ Pour appelé un objet COM


Š $MaVar=New-object -ComObject « application »

268
Powershell Automatiser l'administration Windows

ƒ Vous pouvez utiliser la voix des hauts-parleurs,


Š $spVoice = new-object -com "[Link]" $[Link]("Hello the World!")
Š Possibilité de lire un fichier txt comme l'exemple ci dessouset d'entendre le
contenu sur les hauts parleurs

Š Cet exemple retourne sur les haut-parleurs le message "hello Mr Marot", nous
sommes aujourd'hui le puis la date du jour
Š Enfin nous listons tous les utilisateurs de la sam local qui nous sont retournés avec
le H-P

269

Powershell Automatiser l'administration Windows

ƒ Ce premier exemple permet de créer un fichier Excel et d’enregistrer une valeur dans la
cellule A1.

Š Nous déclarons un nouvel Objet Com [Link]


Š Il est visible (en premier plan avec visible = $true
Š Nous ajoutons un nouveau classeur puis nous sélectionnons la première feuille de
ce classeur
Š Nous prenons la cellule 1,1 (A1) dans lequel nous renseignons une valeur puis nous
mettons cette cellule en gras et couleur rouge.
Š Ce classeur est enfin enregistré dans temp

270
Powershell Automatiser l'administration Windows

ƒ Cet exemple ouvre un fichier existant et écrit sur la feuille n°2 en A1 « ceci est
le titre »

271

Powershell Automatiser l'administration Windows

ƒ L’exemple suivant récupère la taille des fichiers et les noms et les stocke dans
un fichier Excel, si la taille dépasse les 10000 octets, on écrit en rouge.

Dimension de la
colonne
272
Powershell Automatiser l'administration Windows

ƒ L’exemple suivant permet de lancer Internet Explorer, de définir une taille puis de
lancer [Link]

273

Powershell Automatiser l'administration Windows

Traitement des fichiers XML

274
Powershell Automatiser l'administration Windows

ƒ Pour lire un fichier XML, utilisez [xml]


Š L'exemple suivant va lire ce fichier

275

Powershell Automatiser l'administration Windows

ƒ Pour lire le contenu

Š Lit le contenu de la balise employe du tableau

276
Powershell Automatiser l'administration Windows

ƒ Nous pouvons rechercher dans notre fichier toutes les personnes de plus de 40 ans

Š L'exemple suivant récupère les données et les envois dans un fichier txt

277

Powershell Automatiser l'administration Windows

278
Powershell Automatiser l'administration Windows

Le module Active Directory

279

Powershell Automatiser l'administration Windows

ƒ Powershell peut être utilisé pour dans un annuaire pour :

Š Créer des utilisateurs

Š Créer des groupes, des uos

Š Installer la corbeille dans l'ad (2008 R2)

Š Modifier des objets dans l'ad

ƒ Le module activedirectory permet de gérer entièrement votre AD, plus de 70 cmdlets


dédiés à l’Active Directory

280
Powershell Automatiser l'administration Windows

ƒ Depuis 2008 R2 il est possible d'ajouter un module Active Directory pour travailler sur
les objets de l'Active Directory

ƒ Pour utiliser les nouvelles cmdlet de l'AD tapez "import-module activedirectory"

Š Get-command –module active directory permet de voir toutes les commandelettes


utilisables dans l'ad

281

Powershell Automatiser l'administration Windows

ƒ Get-AddomainController
Š Affiche des informations sur les contrôleurs de domaine

Š L'exemple ci-dessous affiche des informations sur les CD et demande une


authentification –credential
Š L' option –credential peut être utilisé avec toutes les commandes de l'ad

Š Cette option permet de rechercher les CD qui sont aussi Catalogue global

282
Powershell Automatiser l'administration Windows

ƒ Get-Addomain
Š Obtient des informations sur un domaine comme le nom, les maitre FSMO…

283

Powershell Automatiser l'administration Windows

ƒ Get-AdForest
Š Obtient des informations d'une foret
• Get-Adforest obtient des informations de l'utilisateur courant

Š Cet exemple permet d'avoir des informations sur la forêt nommé [Link]

284
Powershell Automatiser l'administration Windows

ƒ Get-Adcomputer
ƒ Permet de lister les ordinateurs de votre AD
Š Get-adcomputer –filter * (affiche les ordinateurs du domaine, filter filtre sur le
nom)

Š Le prochain exemple permet de rechercher les ordinateurs présent dans l'uo


domain controllers et affiche l'adresse IP des stations
Š Get-Adcomputer –filter * -searchbase "ou=Domain controllers,dc=gtek,dc=local" –
properties ipv4Address

285

Powershell Automatiser l'administration Windows

ƒ Cet exemple permet de récupérer le nom et l'adresse ip

Š Get-adcomputer –filter * -searchbase "ou=Domain controllers,dc=gtek,dc=local" –


properties IPV4address | FT name, IPV4Adress

286
Powershell Automatiser l'administration Windows

ƒ Get-ADAccountAuthorizationGroup
Š Affiche les groupes appartenant à un utilisateur spécifié
Š L'exemple suivant affiche tous les groupe de la personne nommé administrateur
Š Get-ADAccountAuthorizationGroup administrateur

287

Powershell Automatiser l'administration Windows

ƒ Cet exemple affiche le nom du groupe et l'étendue du groupe

288
Powershell Automatiser l'administration Windows

ƒ Get-AdGroup
Š Permet d'obtenir des informations sur les groupes de l'ad
Š Get-Adgroup -filter * affiche tous les groupes de l'ad

Š Get-ADGroup administrateurs affichent des informations sur le groupe


administrateurs

289

Powershell Automatiser l'administration Windows

ƒ Get-ADGroup Administrateurs –properties member permet d'afficher les membres du


groupes administrateurs

Š Get-adGroup –filter {groupScope –eq "Global"} | FT name


Š Affiche le nom de tous les groupe globaux

Š Cet exemple recherche tous les groupe globaux de l'uo production (tiens comptes
aussi des sous uo

290
Powershell Automatiser l'administration Windows

ƒ Get-AdgroupMember
Š Affiche des informations sur les membres d'un groupe
Š Get-adGroupMember –identity administrateurs
• Retourne les membres du groupe administrateurs

Affiche les membres du groupe


administrateurs

L'option –recursive permet de


scruter tous les membres
utilisateurs des groupes enfants,
nous verrons donc tous les users
utilisant ce groupe

291

Powershell Automatiser l'administration Windows

ƒ Get-ADObject
Š Obtient des informations d'un objet de l'ad
Š Get-adobject –filter * affiche tous les objets de votre AD

Š Get-adobject –filter {objectClass –eq "group"} pour afficher les objets de type
group

292
Powershell Automatiser l'administration Windows

ƒ Cet exemple recherche tous les groupes de l'uo et sous uo production

Š Get-AdObject –filter {objectClass –eq "group"} –searchbase


"ou=production,dc=gtek,dc=local"

293

Powershell Automatiser l'administration Windows

ƒ Cet exemple que nous aurions pu utiliser avec les autres commandes get permet
d'afficher les propriétés et méthodes que l'on peut utiliser
Š Get-adObject –filter {ObjectClass –eq "user"} –properties * | get-member

294
Powershell Automatiser l'administration Windows

Š Get-adobject –filter {objectclass –eq "user"} –properties pwdlastset, ObjectSid,


Lastlogon … affichent des propriétés comme la dernière connexion, le SID….

295

Powershell Automatiser l'administration Windows

Š Get-Adobject –filter {ObjectClass –eq "Group" –and Deleted –eq $true} –


includeDeletedObjects

Š Cet exemple filtre les objets groupes effacés, ne pas oublier d'ajouter –
IncludeDeletedObjects qui permet d'afficher les objets effacés de l'AD.

296
Powershell Automatiser l'administration Windows

ƒ Get-AddefaultDomainPasswordpolicy
Š Permet de voir les stratégies de mot de passe
Š Get-AddefaultDomainPasswordPolicy

Š Get-addefaultDomainPasswordPolicy –current loggedOnUser


• Affiche la stratégie de mot de passe pour l'utilisateur connecté

• Même chose pour un domaine

297

Powershell Automatiser l'administration Windows

ƒ exemple de script de création d'utilisateurs

Fichier CSV
d'importation
des utilisateurs

298
Powershell Automatiser l'administration Windows

ƒ L'exemple suivant permet de créer un dossier puis de créer les groupes associés à ce
dossier. Cas fréquemment utilisé en entreprise.

Š Ex: création d'un dossier nommé compta implique la création de 4 groupes globaux
+ 4 groupes Locaux formaté de la manière suivante:
• GG_compta_L
• GG_compta_LE
• -GG_compta_M
• -GG_compta_CT
• -DL_compta_L
• -DL_compta_LE
• -DL_compta_M
• -DL_compta_CT

Š On applique ensuite la règle préconisée par Microsoft, AGDLP. Cad on place les
groupes globaux dans des Groupes locaux.

Š On affecte enfin les permission NTFS avec les groupe du domaine local
299

Powershell Automatiser l'administration Windows

300
Powershell Automatiser l'administration Windows

ƒ New-AdComputer
Š Permet d'ajouter des ordinateurs dans le domaine

Š Cet exemple ajoute un ordinateur nommé PC-DE-G dans l'uo production du


domaine [Link]

Š Get-help new-adcomputer –detailed pour voir l'aide complète

301

Powershell Automatiser l'administration Windows

ƒ Remove-ADUser
Š Vous pouvez supprimer des utilisateurs avec la commande Remove-Aduser
Š Get-AdUser –searchbase "ou=compta,dc=gtek,dc=local" –filter * | remove-ADUser
–confirm:$false

Š Va chercher tous les utilisateurs dans l'uo compta (y compris sous uo) et les efface
(-confirm;$false) permet de ne pas avoir à confirmer la suppression

Š Si l'on souhaite uniquement effacer les users de l'uo compta sans les sous uo,
ajouter –searchscope (0 pour uo mères, 1 pour uo mères et uo enfant, 2 pour tous
les niveaux

302
Powershell Automatiser l'administration Windows

Le module DHCP

303

Powershell Automatiser l'administration Windows

ƒ Depuis l'arrivée de Windows 2012, les modules pour gérer les serveurs ont été
largement enrichi

Š Le module dhcpserver permet de configurer et obtenir des informations détaillées


sur vos serveur DHCP

Š Import-module dhcpserver sur posershell ou powershell Ise.

Š Nous allons utiliser qq commandelettes "get-dhcp xxx"

Get-command –module dhcpserver


permet d'obtenir la liste des cmdlettes
pour DHCP

304
Powershell Automatiser l'administration Windows

ƒ Les commandes suivantes obtiennent des informations de serveurs dhcp

305

Powershell Automatiser l'administration Windows

306
Powershell Automatiser l'administration Windows

ƒ La commande set-dhcp permet de paramétrer un serveur DHCP


Š La première commande paramètre le nbre de ping avant de délivrer un dhcp
Š Set-DhcpServerSetting -ConflictDetectionAttempts 1

Réactualisez sur le nom du serveur puis


ensuite IPV4/propriété/onglet avancé

307

Powershell Automatiser l'administration Windows

ƒ L'exemple suivant mets à jour une réservation d'adresse ip


Š Set-DhcpServerv4Reservation -IPAddress "[Link]" -name "[Link]-
[Link]" -ComputerName "srv2012RC"

308
Powershell Automatiser l'administration Windows

ƒ L'exemple suivant va permettre de créer des réservation en masse

Créer ce fichier csv avec les en-tête


de colonne

ƒ Script:

Après l'exécution du script, les


réservation sont enregistré dans
notre dhcp

309

Powershell Automatiser l'administration Windows

Le module DNS

310
Powershell Automatiser l'administration Windows

ƒ Sur 2012, vous pouvez gérer vos serveurs DNS avec Powershell, plusieurs dizaine de
cmdlette sont dédiées au DNS

get-command -module dnsserver


permet de voir toutes les cmdlettes
utilisables sur un DNS

Show-dnsservercache permet
de voir le cache DNS

Show-DnsServerCache -
ComputerName srv2012-2dc
pour analyser un DND distant

311

Powershell Automatiser l'administration Windows

ƒ L’exemple suivant retourne les enregistrements présents dans la zone [Link]


Š Get-DnsServerResourceRecord -ZoneName [Link]

y L’exemple suivant retourne les enregistrements de type CNAME ou A présents dans la


zone [Link]
y Get-DnsServerResourceRecord -ZoneName [Link] | ?{$_.recordType -eq "CNAME" -or
$_.recordType -eq "A"}

y L’exemple suivant retourne les enregistrements de type A présents dans la zone [Link]
sur le serveur srv2012-2dc
y Get-DnsServerResourceRecord -ZoneName [Link] -ComputerName srv2012-2dc -RRType A

312
Powershell Automatiser l'administration Windows

ƒ Obtenir les serveurs racine paramétrer le DNS srv2012-2dc


Š Get-DnsServerRootHint -ComputerName srv2012-2dc | ft –a

Š L’exemple suivant retourne les redirecteurs sur le DNS courant

313

Powershell Automatiser l'administration Windows

ƒ La commande suivante permet de paramétrer 2 redirecteurs sur le serveur srv2012-2dc


Š Set-DnsServerForwarder -IPAddress [Link], [Link] -ComputerName
srv2012-2dc -UseRootHint $true -Timeout 4

-IPAddress
-timeout

-useRootHint

314
Powershell Automatiser l'administration Windows

ƒ L’exemple suivant permet de créer un enregistrement de type A nommé gaelpc dans la


zone [Link],

Š -creatptr permet de faire un enregistrement inversé (attention, la zone inverse doit


exister)

• Add-DnsServerResourceRecordA -CreatePtr -Name gaelpc -IPv4Address


[Link] -ZoneName [Link]

315

Powershell Automatiser l'administration Windows

ƒ L’exemple suivant permet de créer plusieurs enregistrement de type A dans plusieurs


zone, nous utilisons pour cela un fichier csv.

ƒ Script très simple pour enregistrer plusieurs nome d’hôte

316
Powershell Automatiser l'administration Windows

ƒ L’exemple suivant ajoute l’alias www1 pour l’ordinateur [Link]

Š Add-DnsServerResourceRecordCName -HostNameAlias [Link] -Name www1


-ZoneName [Link]

317

Powershell Automatiser l'administration Windows

Le module Hyper V

318
Powershell Automatiser l'administration Windows

ƒ Windows Server 2012 R2 embarque nativement les « cmdlets PowerShell » d'Hyper-v,


pour l'automatisation de déploiement de VM, pour la gestion de la virtualisation
(snapshot, démarrer ou arrêter une vm, importer ou exporter , live migration,
réplication ...)

La command get-command –module hyper-v permet de trouver


les cmdlettes utilisables avec l’hyperviseur

319

Powershell Automatiser l'administration Windows

ƒ Get-VMHost retourne des informations sur votre server HyperV

320
Powershell Automatiser l'administration Windows

Š La commande Get-VM permet de lister les VM présentes

Š Get-VM –ComputerName Srv2012dc | Where-object {$_.State –eq ‘Running’}

• Cette commande permet de voir les VM qui sont en fonctionnement.

321

Powershell Automatiser l'administration Windows

ƒ Différentes commandelletes permettes d’avoir des informations détaillées sur une VM

322
Powershell Automatiser l'administration Windows

ƒ Les exemples suivants retourne les config d’une VM (réseau, bios, dvd, Disk dur)
nommée 2012-DC
Š Get-VMNetworkadaptater –VMName 2012-dc | ft wrap
Š Get-VMDvdDrive –Name 2012-DC
Š Get-VMBios –VMName 2012-dc
Š Get-VMHardDiskDrive –VMName 2012-DC

323

Powershell Automatiser l'administration Windows

ƒ Information sur la mémoire, le processeur, les snapshot

Š Get-VMMemory –VMName 2012-dc

Š Get-VMProcessor –Name 2012-DC

Š Get-VMBSnapshot –VMName 2012-dc

324
Powershell Automatiser l'administration Windows

ƒ Nous allons maintenant créer de manière basique une nouvelle VM


Š New-VM -name "creation srv vm par ps" -NewVHDPath d:\2K12\[Link] -path
d:\2K12 -NewVHDSizeBytes 25GB -MemoryStartupBytes 1GB

ƒ La commande suivante permet de démarrer une VM


Š get-vm -name W8 | start-vm

Š Stop-VM permet d’arrêter une VM

Š L’option –save permet d’enregistrer l’état de votre VM

325

Powershell Automatiser l'administration Windows

ƒ Commandelletes qui permet de reconfigurer la mémoire de la VM nommée W8


(VMPS), attention, votre VM doit être arrêté

Š Set-VMMemory VMPS -StartupBytes 1.5GB

326
Powershell Automatiser l'administration Windows

ƒ Les quelques commandelletes vue précédemment permettent dans leur ensembles de


récupérer des informations sur les VM ou encore de créer de manière basique une VM.

Š Les commandelletes peuvent vous permettre par exemple de créer une VM et de


configurer de manière affiner les différents paramètres matériels.

Š L'exemple suivant permet de créer une VM nommé 2K12-R3 sur le serveur hôte
HyperV-2

ƒ Créer la VM 2K12R2-3 sur l'hôte HyperV-2


Š New-VM 2K12R2-3 –Path D:\ 2K12R2-3 -ComputerName HyperV-2
ƒ Définir la mémoire sur la VM créée
Š Set-VMMemory -DynamicMemoryEnabled $True -StartupBytes 1024MB -VMName
2K12R2-3 -ComputerName HyperV-2

ƒ Affecter le nombre de processeur logique


Š Set-VMProcessor -Count 4 -VMName 2K12R2-3 -ComputerName HyperV-2

327

Powershell Automatiser l'administration Windows

ƒ Supprimer la carte réseau affectée de base et la remplacer par la carte nommé NIC1 que
l'on attache sur le switch virtuel nommé VLAN_20
Š Remove-VMNetworkAdapter -Name "carte réseau" -VMName 2K12R2-3
-ComputerName HyperV-2
Š Add-VMNetworkAdapter -name NIC1 -SwitchName VLAN_20 -VMName 2K12R2-3 -
ComputerName HyperV-2

ƒ Créer le VHDx dynamique qui sera attaché à la VM


Š New-VHD -Path D:\2K12-3\[Link] -Dynamic -SizeBytes 60GB -ComputerName
HyperV-2

ƒ Attacher le VHDx qui peut être un VHDx issu pré-installé à la VM


Š Add-VMHardDiskDrive -Path D:\2K12-3\[Link] -VMName 2K12R2-3
-ComputerName HyperV-2

ƒ Attacher si besoin est une image iso au lecteur de DVD virtuel de la VM


Š Set-VMDvdDrive -Path D:\ISO\[Link] -VMName 2K12R2-3 -ComputerName
HyperV-2
ƒ Démarrer la VM
Š start-vm -VMName 2K12R2-3 -ComputerName HyperV-2
328
Powershell Automatiser l'administration Windows

329

Powershell Automatiser l'administration Windows

Quelques commandelettes

330
Powershell Automatiser l'administration Windows

ƒ La fonction split permet de séparer une chaine en plusieurs sous chaine

Š L’exemple suivant extrait une chaine puis compte les éléments de cette chaine

• $[Link] retourne le nombre d’élément contenu dans le tableau


• $sep[1].length retourne le nombre de caractère contenu dans l’index 1 du
tableau

331

Powershell Automatiser l'administration Windows

ƒ La première cmdlet permet d’enregistrer tout ce que la console PowerShell affiche et


tout ce que vous tapez

ƒ Nous voyons dans ce fichier ce que nous avons tapé et les résultats

ƒ Stop-transcript pour arrêter l’enregistrement dans le fichier

332
Powershell Automatiser l'administration Windows

ƒ Jusqu’à Powershell v4 la génération de transcript n'était fonctionnelle que dans la


console Powershell.

Š Grâce aux cmdlets “Start-Transcript” / “Stop-Transcript”, il est désormais possible


de générer des fichiers de traces aussi via Powershell ISE.

333

Powershell Automatiser l'administration Windows

ƒ Cette commandelette permet de lire dans un fichier texte ou autre élément comme des
variables
Š Nous allons tester ce fichier
Retourne la liste complète

-totalcount retourne les 4


premiers éléments de la liste

[-1] permet d’afficher un


élément de la liste en
partant du bas

Pour retourner une liste


utiliser [x..y]et

334
Powershell Automatiser l'administration Windows

ƒ Cette commande permet de récupérer par mot clé des listes comme par ex récupérer
les pc contenant MW, grâce à select-string

Š -totalcount permet de prendre dans cet ex les 5 premiers éléments de la liste, puis
de les copier dans un fichier nommé [Link]

335

Powershell Automatiser l'administration Windows

ƒ Get-Hotfix
Š Retourne les correctifs logiciel sur les ordinateurs locaux ou distant

336
Powershell Automatiser l'administration Windows

ƒ Get-random
Š Obtient un nombre aléatoire ou sélectionne aléatoirement des objets dans une
collection

-minimum et –maximum permet de


définir une plage

Création d’un tableau de valeur puis


sélection de 2 valeurs aléatoirement
dans ce tableau

Cet ex scrute le dossier et


sous dossier W2K8 puis
affiche 15 fichiers
aléatoirement

337

Powershell Automatiser l'administration Windows

Š Ce script permet la création de mot de passe aléatoire, l’utilisateur peux choisir la


lg du mot de passe

338
Powershell Automatiser l'administration Windows

ƒ Write-progress affiche une barre de progression qui peut être intéressant lorsque vous
exécutez des scripts nécessitant du temps de calcul
Š -activity indique le nom "Barre de progression" – status affiche en dessous
"%Effectué" et percentComplete $i*2 affiche la boucle avec un incrément de 2
rond à chaque fois

Š Le second exemple est une imbrication de boucle permettant de générer 2 barres


de progression

339

Powershell Automatiser l'administration Windows

ƒ Out-Printer
Š Envoie la sortie à une imprimante
• Le premier imprime sur l’imprimante par défaut la date du jour.
• Le second imprime sur une imprimante réseau

ƒ Impression du fichier [Link]

340
Powershell Automatiser l'administration Windows

ƒ Obtenir la version de Powershell

Š Get-pssessionConfiguration permet de voir la version avec la propriété "psversion"

341

Powershell Automatiser l'administration Windows

ƒ Group-object
Š Permet de regrouper en fonction d'un critère les objets.
Š Cet exemple regroupe par extension et affiche le nombre de fichier par extension

Š L'option -noelement permet de ne pas voir le label "Group"

342
Powershell Automatiser l'administration Windows

ƒ Group-object
Š Cet exemple affiche le nom des processus étant présent plus de 2 fois

343

Powershell Automatiser l'administration Windows

ƒ Cmdlet permettant de comparer des objets


Š La première commande affiche les différences entre les 2 fichiers (regardez le sens
des flèches <= pour le fichier [Link] et => pour le fichier [Link]

Š En ajoutant –includeEqual, nous affichons les égalités. Remarquez que l'ordre n'a
pas d'importance ainsi PC12 sur [Link] se trouve à la fin du fichier et au début avec
[Link]

344
Powershell Automatiser l'administration Windows

ƒ Compare-object
Š Cette cmdlet peut aussi être utilisé pour comparer des propriétés
Š L'ex suivant permet de comparer la taille de 2 fichiers
• On place dans 2 variables les fichiers, ensuite nous utilisons compare-object
avec la propriété length

• Cet exemple compare les process du pc avant et apres le lancement de la


calculatrice

345

Powershell Automatiser l'administration Windows

ƒ Test-Path:
ƒ Cette cmdlet permet de tester l'existence d'un chemin
Š Test-path c: retourne true si c: existe ou false si il n'existe pas

346
Powershell Automatiser l'administration Windows

PSEdit

347

Powershell Automatiser l'administration Windows

ƒ Une nouveauté fait son apparition dans Powershell ISE et le PSRemoting avec la
version 5:
Š PSEdit

ƒ Cet outil existait déjà et permettait d'ouvrir script dans un nouvel onglet dans
Powershell ISE lorsque l'on exécutait la commande suivante :

Š PSEdit chemin_de_mon_script.

ƒ Cependant, dans cette nouvelle version de Powershell ISE, il est possible d'ouvrir des
fichiers à distances.

Š Il n'y a donc plus besoin d'ouvrir Powershell ISE sur la machine où se trouve le
script pour l'éditer. Il suffit d'ouvrir une PSSession puis d'exécuter PSEdit.

348
Powershell Automatiser l'administration Windows

ƒ Pour mettre en œuvre cette fonctionnalité on ouvre une session sur une machine
distante:
$session = New-PSSession -computername 2K16-2
Enter-PSSession $session

ƒ On édite le fichier avec la commande suivante


Š psedit C:\scripts\Deploey_nanoserver.ps1

Le fichier s'ouvre
automatiquement

349

Powershell Automatiser l'administration Windows

Fonction d'administration quotidienne

350
Powershell Automatiser l'administration Windows

ƒ Récupérer la taille d'un dossier :


function Get-Tailledossier {
[CmdletBinding()]
Param (
[Parameter(Mandatory=$true,ValueFromPipeline=$true)]
$Path,
[ValidateSet("KB","MB","GB")]
$Units = "MB"
)
if ( (Test-Path $Path) -and (Get-Item $Path).PSIsContainer ) {
$Measure = Get-ChildItem $Path -Recurse -Force -ErrorAction SilentlyContinue
| Measure-Object -Property Length -Sum
$Sum = $[Link] / "1$Units"
[PSCustomObject]@{
"Path" = $Path
"Size($Units)" = $Sum
}
}
}

351

Powershell Automatiser l'administration Windows

Chaine de texte, cmdlets ConvertFrom-Strings

352
Powershell Automatiser l'administration Windows

ƒ Cette nouvelle cmdlette V5 permet de transformer une chaine de texte en objet, en


ajoutant des propriétés.
ƒ L’exemple suivant permet de lire un fichier texte et d’ajouter une propriété
« Ordinateur » et « adresse »
get-content C:\temp\[Link] |
ConvertFrom-String -Delimiter ";" -PropertyNames "Ordinateur","Adresse"

y L’exemple suivant permet de récupérer les données netstat et de créer des propriétés pour pouvoir utilisé les filtres
$a=netstat
#on suprime les 5 premières lignes qui affichent des espaces et les entêtes
#on utilise ensuite convertFrom-string, la propriété « t » ne sert à rien mais est créé avec
convertfrom-string
$a[4..$[Link]] | ConvertFrom-String `
-PropertyNames "t","protocole","adlocale","addistante","état" |
Select-Object protocole,adlocale,addistante,état | where état -Match established

353

Powershell Automatiser l'administration Windows

ƒ Convertit une chaîne contenant une ou plusieurs paires clé/valeur en une table de
hachage.
ƒ L’exemple suivant récupère dans une table de hash nommé alerte des codes erreurs
stockés dans un fichier
$code=get-content C:\temp\[Link] -Encoding UTF8
$alerte=$code | ConvertFrom-StringData
Write-Warning "la première erreur est : $($alerte.msg1)"

354
Powershell Automatiser l'administration Windows

ƒ Cette cmdlette permet de convertir du texte en html,


ƒ L’exemple suivant utilise une feuille de style pour afficher la page html

get-service -PipelineVariable service | ConvertTo-Html -Property name, displayname, status `


-CssUri c:\temp\[Link] `
-Title "service de l'os $($env:computername)" `
-Body "<H1>Service de l'os</H1>" | %{ Feuille de style
if($[Link] -eq "Running")
{
$_ -replace "<tr>", "<tr class=demarre>"
}
elseif($[Link] -eq "Stopped")
{
$_ -replace "<tr>", "<tr class=arret>"
}
else
{
$_
}} | tee-object c:\temp\[Link]
ii C:\temp\[Link]

355

Powershell Automatiser l'administration Windows

Function Description Example


("Hello").CompareTo("Hell
CompareTo() Compare une chaine avec une autre
o")
Retourne "True" si la cahine de compairaison spécifié est
Contains() présent dans une chaine ou si la chaine de comparaison ("Hello").Contains("ll")
est vide
CopyTo() Copie une partie d'une chaine dans une autre ("User!").CopyTo(0, , 6, 5)
EndsWith() Test si la chaine termine avec la chaine spécifié ("Hello").EndsWith("lo")
Equals() Test si une chaine est identique à une autre chaine ("Hello").Equals()
Retourne l'index de la première occurrence de la chaine
IndexOf() ("Hello").IndexOf("l")
de comparaison
Retourne l'index de la première occurrence de la chaine
IndexOfAny() de comparaisonReturns the index of the first occurrence ("Hello").IndexOfAny("loe")
of any character in a comparison string
("Hello World").Insert(6,
Insert() Insert une chaine à l'index spécifié d'une autre chaine
"brave ")
GetEnumerator Récupère un objet qui peut énumérer tous les
("Hello").GetEnumerator()
() caractères d'une chaîne
Recherche l'index de la dernière occurrence d'un
LastIndexOf() ("Hello").LastIndexOf("l")
caractère spécifié
LastIndexOfAny Recherche l'index de la dernière occurrence d'un ("Hello").LastIndexOfAny("
() caractère d'une chaîne spécifiée loe")
356
Powershell Automatiser l'administration Windows

Remplissage d'une chaîne à une longueur déterminée et qui ajoute des caractères
PadLeft()
blancs à gauche (aligné à droite de chaîne) ("Hello").PadLeft(10)

PadRight()
Remplissage d'une chaîne à une longueur déterminée et qui ajoute des caractères ("Hello").PadRight(10) +
blancs à droite (aligné à gauche de chaîne) "World!"
Remove() Supprime le nombre requis de caractères à partir d'une position spécifiée ("Hello World").Remove(5,6)
Replace() Remplace un caractère par un autre caractère
("Hello World").Replace("l",
"x")
Split() Convertit une chaîne avec des points de séparation spécifiés dans un tableau ("Hello World").Split("l")

StartsWith() Test si une chaîne commence par un caractère spécifié


("Hello
World").StartsWith("He")
Substring() Extrait les caractères d'une chaîne ("Hello World").Substring(4, 3)
ToCharArray() Convertit une chaîne en un tableau de caractères ("Hello World").toCharArray()
ToLower() Convertit une chaîne en minuscules ("Hello World").toLower()
ToLowerInvariant() Convertit une chaîne en minuscules à l'aide des règles de casse de la langue invariant
("Hello
World").toLowerInvariant()
ToUpper() Convertit une chaîne en majuscules ("Hello World").toUpper()
ToUpperInvariant() Convertit une chaîne en majuscules à l'aide des règles de casse de la langue invariant
("Hello
World").ToUpperInvariant()
Trim() Supprime les caractères en blanc à droite et à gauche (" Hello ").Trim() + "World"
TrimEnd() Supprime les caractères vide à droite (" Hello ").TrimEnd() + "World"
TrimStart() Supprime les caractères en blanc à la gauche
(" Hello ").TrimStart() +
"World"
Chars() Fournit un caractère à la position spécifiée ("Hello").Chars(0) 357

Vous aimerez peut-être aussi