SISR4 Scripting
Table des matières
1. Commandes pour obtenir de l’aide.........................................................................................................2
2. Commandes pour gérer les fichiers et les dossiers.................................................................................2
3. Alias.........................................................................................................................................................2
4. Initiation aux variables, aux propriétés et aux méthodes des objets......................................................2
5. Accéder aux ressources du système d’exploitation Windows................................................................3
6. Scripts......................................................................................................................................................4
Script WMI...................................................................................................................................................4
Script de création de comptes utilisateurs à partir d'un fichier texte au format CSV.................................5
Idem mais avec les tests d'existence de l'unité d'organisation et des comptes utilisateurs...................6
Une autre façon de faire.............................................................................................................................6
Remarques sur le CSV..............................................................................................................................6
Le script...................................................................................................................................................6
Script qui liste tous les noms de poste qui ne sont pas des serveurs..........................................................7
7. Accès distant avec PowerShell................................................................................................................7
1. Introduction....................................................................................................................................................7
2. Démarrer le service WinRM............................................................................................................................7
3. Connexion interactive (1:1)............................................................................................................................ 8
4. Accès à distance un-à-plusieurs (1:n).............................................................................................................8
Ce document est un condensé du cours Powershell du Certa
http://www.reseaucerta.org/content/fiches-d’explor ation-du-langage-powershell
1
Page
Sophie Stitou - 2017
SISR4 Scripting
1.Commandes pour obtenir de l’aide
• Afficher de l’aide sur une commande : Get-Help Commande (ex : Get-Help Get- ChildItem)
• Afficher les exemples : Get-Help Commande –Examples
• Afficher les alias : Get-Alias
• Afficher la liste des méthodes et des propriétés des objets : Commande | Get-member
2.Commandes pour gérer les fichiers et les dossiers
Se déplacer dans les dossiers : Set-Location chemin (ex : Set-Location c:\temps)
Afficher le chemin du dossier courant : Get-Location
Afficher le contenu d’un dossier : Get-ChildItem
Créer un dossier : New-Item nomDossier -ItemType directory
Créer un fichier avec du texte New-Item nomFichier.txt -ItemType file –Value "texte"
Supprimer un fichier ou un dossier : Remove-Item nomFichier.txt
Déplacer un fichier : Move-Item nomFichier.txt -Destination chemin\nomFichier.txt
Déplacer un dossier : Move-Item nomDossier -Destination chemin\nomDossier
Renommer un fichier ou dossier : Rename-Item nomFichier.txt -NewName nomFichier2.txt
Copier un fichier : Copy-Item nomFichier.txt -Destination nomFichier2.txt
Copier un dossier avec ses fichiers : Copy-Item nomDossier -Destination nomDossier1 –Recurse
Tester l’existence d’un fichier ou dossier : Test-Path chemin/nomFichier.txt
3.Alias
Il est possible de créer ses propres alias avec la commande Set-Alias.
Exemple, la commande suivante permet de créer l'alias gd vers la commande Get-Date :
Set-Alias -Name gd -Value Get-Date
4. Initiation aux variables, aux propriétés et aux méthodes
des objets
Le nom d’une variable commence toujours par $, il peut inclure tout caractère alphanumérique ou le trait
de soulignement.
2
Page
Sophie Stitou - 2017
SISR4 Scripting
Windows PowerShell permet de créer des variables qui sont pour l'essentiel des objets nommés. La sortie
de toute commande Windows PowerShell valide peut être stockée dans une variable.
Exemple : $loc = Get-Location
Il est possible d’utiliser Get-Member pour afficher des informations sur le contenu de variables.
Exemple : $loc | Get-Member ( idem Get-Location | Get-Member )
Le nom de la variable suivi du point permet d’accéder aux propriétés de l’objet référencé par la variable,
Exemple pour la propriété Path de la variable $loc. : $loc.Path
Remarque : l’usage de la touche tabulation [tab] permet de compléter le nom de la propriété.
De même, l’exécution d’une méthode (action) d’un objet
: Exemple : $fichier.Delete()
Remarque : Pour les méthodes, ne pas oublier les parenthèses avec ou sans paramètre.
5. Accéder aux ressources du système d’exploitation
Windows
Les classes WMI (Windows Management Instrumentation) décrivent les ressources qui peuvent être gérées.
Il existe des centaines de classes WMI, certaines d'entre elles contenant des dizaines de propriétés.
La commande principale est Get-WmiObject, elle permet de lire ces ressources. List affiche l’ensemble des
propriétés.
Get-WmiObject -List
La liste étant importante, il est possible de ne rechercher que certaines classes avec la commande Select-
String.
Exemple, recherche des classes sur le poste local, comportant la chaine "networkadapter":
La commande Get-Member permet de consulter la liste des propriétés et méthodes de la classe spécifiée.
Il est possible de réduire les propriétés à lister avec la commande Select-Object et le paramètre –
Property.
Exemple, lister seulement le lecteur et l'espace disque libre avec la classe WMI win32_logicalDisk :
Get-WmiObject Win32_LogicalDisk | Select-Object -Property DeviceID, FreeSpace
3
Page
Sophie Stitou - 2017
SISR4 Scripting
Exemple pour lister l'adresse MAC, l'adresse IP et les données DHCP avec la classe
WMI Win32_NetworkAdapterConfiguration :
Get-WmiObject Win32_NetworkAdapterConfiguration -Filter IPEnabled=True | Select-Object -
Property MACAddress, IPAddress, DHCP*
Il est toujours possible d’affecter le résultat de la commande Get-WmiObject à une variable, et de
consulter les propriétés et les méthodes de l’objet à l’aide de la commande Get-Member.
Si le résultat de la commande est un ensemble d’objets, la variable affectée est un tableau d’objet, l’accès
au premier élément se fait alors de la manière suivante $var[0], au second élément : $var[1], etc..
6.Scripts
Utiliser Powershell ISE pour écrire vos scripts.
Dans PowerShell, il existe quatre paramètres de stratégie d'exécution des scripts qui sont :
- Restricted : paramètre par défaut, n'autorise pas l'exécution des scripts,
- AllSigned : n'exécute que les scripts de confiance, donc signés,
- RemoteSigned : exécute les scripts locaux sans obligation de confiance et les scripts de
confiance issus d'Internet,
- Unrestricted : autorise l'exécution de tous les scripts.
Démarrer Windows PowerShell en tant qu’administrateur, puis utiliser la commande suivante pour définir
la stratégie :
- Commande pour connaître la stratégie en cours : Get-ExecutionPolicy
- Commande pour modifier la stratégie : Set-ExecutionPolicy RemoteSigned
Script WMI
à partir de noms de postes contenus dans un fichier texte
Une première version sans pipeline
Cette classe WMI permet de faire un test
de connexion vers le poste avec un filtre
construit à partir du nom. La connexion est
OK si StatusCode est égal à 0.
Cette classe WMI retourne une collection
d'objet (configuration adaptateur réseau)
du
Pour chaque configuration retournée, écriture
4
Page
Remarque : Ne sont pas traités les différents tests d'existence des fichiers.
Sophie Stitou - 2017
SISR4 Scripting
Une autre version avec un pipeline pour récupérer la configuration des cartes réseaux :
Chaque objet (configuration adaptateur réseau)
Chaque objet transmis est référencé par $_
Script de création de comptes utilisateurs à partir d'un fichier texte au format
CSV
Valeurs de userAccountControl, voir site :
Cette commande permet de lire un fichier
CSV, chaque objet (ligne) est transmis au
pipeline.
Chaque élément du compte utilisateur est accessible
par la désignation définie dans le fichier (1ère ligne) et
la variable $_ qui représente la ligne en cours. 5
Page
Sophie Stitou - 2017
SISR4 Scripting
Idem mais avec les tests d'existence de l'unité d'organisation et des comptes utilisateurs
Extrait du script :
En fait, on teste l'existence de l'unité ou du domaine.
Avec la version 2.0 : ldapDomaine=[ADSI]"LDAP://labo.ig"
Cet objet permet de faire une recherche dans tout le
Remarque : Ligne 23, on peut aussi écrire : "cn=$cn", comme à la ligne 20, ce qui facilite le traitement ses parenthèses ()
dans la chaîne de caractères.
Une autre façon de faire
Avoir un fichier csv (champ séparé par des virgules ou point virgule)
Remarques sur le CSV
• Attention supprimer les espaces, les accents dans les champs (utiliser la fonction rechercher
remplacer)
• Pour passer un champ en majuscule : utiliser la fonction =majuscule sur la cellule, puis copier
la cellule et pour la coller utiliser Coller la valeur.
• Faire attention à la 1ere ligne (nommage des champs) : doit correspondre a ceux donné
dans le script
Le script
A démarrer dans Powershell ISE (et non dans powershell)
Le script a adapter : (modifier les zones surlignées)
Import-Module ActiveDirectory
$Users = Import-Csv -Delimiter ";" -Path "c:\scripts\user.csv"
foreach ($User in $Users)
{
$ou = "OU=sio14-16,DC=SIO,DC=NET"
# l’uo ou doivent être crée les utilisateurs : créer une uo spécifique, l’import dans users ne fonctionne pas)
$domain = '@sio.net'
$password =$User.password
# (déclaration de la variable a aller chercher dans le fichier user champ password)
$detailname = $user.name + " " +$user.givenname
# ((déclaration de la variable a aller chercher dans le fichier user champ name concatené avec le champ
givenname)
$userfirstname = $user.givenname
$userlastname = $user.name
$UPN = $lastname + "."+ $domain
$SAM = $userlastname
6
Page
Sophie Stitou - 2017
SISR4 Scripting
New-ADUser -name $detailname -sAMAccountname $SAM -userPrincipalName $SAM -displayName
$detailname -Enabled $True -AccountPassword (ConvertTo-SecureString $password -AsPlainText -force) -
ChangePasswordAtLogon $True -Path $ou
}
Script qui liste tous les noms de poste qui ne sont pas des serveurs.
Le filtre sélectionne les objets de la catégorie
'computer' avec un 'operatingsystem' différent (!) de
Le résultat de la méthode est transmis au pipeline
'*server*'.
qui
Le résultat de cette recherche peut être placé dans un fichier texte avec Add-content, mais aussi avec
Export-Csv :
Remarques : Ne sont sélectionnées que les propriétés noms et date de création du poste. La transmission est réalisée
avec 2 pipelines.
7.Accès distant avec PowerShell
1. Introduction
La gestion distante permet d'exécuter des commandes sur un ou plusieurs ordinateurs distants à partir d'un
seul ordinateur. PowerShell permet plusieurs moyens de connexion, interactif (1:1) ou un- à-plusieurs (1:n).
2. Démarrer le service WinRM
Sur les ordinateurs distants (serveurs), utiliser la commande Enable-PSRemoting pour démarrer le service
WinRM.
Rmq : –force permet de ne pas répondre aux invites. Par défaut, vous êtes invité à confirmer chaque opération.
Dans Windows 7 et Windows server 2008 R2, pour utiliser cette commande, il faut lancer PowerShell en tant que
administrateur (clic droit, exécuter en tant que ….)
Ce service utilise Kerberos par défaut pour l'authentification. Quand Kerberos n'est pas disponible (postes non
intégrés à un domaine), WinRM utilise un transport HTTPS basé sur un certificat SSL installé sur le poste distant.
Pour simplifier, cette fiche est donc réalisée avec un domaine Active Directory.
7
Page
Sophie Stitou - 2017
SISR4 Scripting
3. Connexion interactive (1:1)
Sur l'ordinateur client, exécuter l'instruction $session=New-PSSession –computername NomOrdinateur et
utiliser la commande Enter-PSSession $session pour se connecter de manière interactive avec le poste distant.
Maintenant, les
commandes seront
exécutées dans la
console distante
de
La commande Exit-PSSession permet de quitter la console distante et revenir à la console locale.
Rmq : Il est possible de spécifier un nom d'utilisateur pour les sessions avec le paramètre –Credential
4. Accès à distance un-à-plusieurs (1:n)
L'accès à distance de PowerShell permet aussi d'exécuter une ou un ensemble de commandes
simultanément sur plusieurs ordinateurs. La technique est très simple, il suffit de spécifier la liste des ordinateurs
concernés avec le paramètre –computername NomOrdi1,NomOrdi2,NomOrdi3.
Exemple avec un fichier texte : $session=New-PSSession –computername (Get-Content c:\listeOrdi.txt)
Pour exécuter une commande sur l'ensemble des postes, il faut utiliser : Invoke-Command –Scriptblock
{cmd}
Exemple pour exécuter IPconfig sur chaque poste : Invoke-Command –Scriptblock {ipconfig} –session
$session
Cette commande affiche le résultat des deux ipconfig lancés à partir de chaque poste distant.
Il est possible d'utiliser Invoke-Command sans sessions ouvertes préalablement et de spécifier directement la
liste des postes avec –computername, dans ce cas les sessions sont ouvertes au début et fermées juste après
l'exécution.
Exemple : Invoke-Command –Scriptblock {ipconfig} –computername NomOrdi1,NomOrdi2,NomOrdi
En général, on crée une session uniquement lorsqu'on exécute une série de commandes sur l'ordinateur distant.
8 Page
Sophie Stitou - 2017
SISR4 Scripting
Par défaut, le nombre de connexions simultanées est de 32, cette valeur peut être modifiée avec le
paramètre –throttlimit de la commande Invoke-Command.
Autres exemples avec Invoke-command :
Exécute le script local sur le poste distant :
Invoke-Command -filepath c:\scripts\test.ps1 -computerName NomOrdi1
Plein d’exemples dans le point zip mis à disposition sur le serveur (Sisr4 -scripts)
Pour aller plus loin
http://www.reseaucerta.org/content/fiches-d’explor a tion-du-langage-powershell
9
Page
Sophie Stitou - 2017