PowerShell
Introduction
La ligne de commande sous Windows a un peu évolué ; nous sommes passés du prompt MS-DOS (présent depuis 1981) à PowerShell en 2006. Le but :
- Avoir plus de fonctionnalités (clairement inspiré des systèmes UNIX)
- Avoir un langage objet
- S'interfacer avec de nombreux outils Microsoft et autre
- Avoir quelque chose de modulable et d'évolutif
Les versions
- PS vers. 2 : Win7, 2008R2
- PS vers. 3 : Win8, 2012
- PS vers 4 : Win8.1, 2012 R2
- PS vers 5 : Win10
Les fichiers powershell sont au format .ps1
Les cmdlet
Powershell est orienté objet, tout objet dans powersehll a des attributs / méthodes. On a le concept de cmdlet (commandlet) : c'est la plus petite unité de fonctionnalité dans PowerShell. Les cmdlet ne sont pas ensisbles à la casse et on l'autocomplétion. Les cmdlet sont constitués sous la forme verbe-nom, le verbe décrivant l'action à appliquer sur le nom.
Exemples de verbes : Add, Set, Get, Remove, Enable, Export...
Exemples de cmdlet : Add-Computer, Remove-ADUser, Get-ADUser, etc...
Get-childitem-----------> Sert à lister le contenu d’un repertoire
New-Item aaa.txt -type file –force -----------> Créer un nouveau fichier txt
Variables
Une variable est composée d'un $ suivi d'un nom, d'une affectation (=) et d'une valeur:
$mavariable = valeur
Ex : $maChaine = "abc"
Write-Host $maChaine
Quelques commandes
- Get-ChildItem(Alias: gci, ls, dir): Cette cmdlet permet d’obtenir la liste des fichiers et dossiers présents dans le système de fichiers.
- Ex: Get-ChildItemC:\Windows
- Set-Location (Alias: sl, cd, chdir): Permet de se déplacer dans les l’arborescence des répertoires.
- Ex: Set-Location C:\Windows
- Get-location (Alais: gl, pwd): Retourne l’emplacement actuel à l’intérieur d’une arborescence.
- Ex: Get-Location
- New-Item (Alias: ni, md): Permet de créer des répertoires et des fichiers.
- Ex: New-Item –ItemType directory –Name Example
- Write-Output (echo) : Ecrit dans la console (gère la redirection)
- Ex: Write-Output "Hello World"
- Get-command: Cette commande permet de découvrir toutes les commandes Powershell, les alias, les fonctions et les workflows sont également retournés.
- Ex: Get-command –commandTypecmdlet; Get-command get-*
- Get-Help: Fourni une aide sur les commandes. Windows PowerShell offre plusieurs niveaux de documentation d'aide: standard, détaillé (-Detailed) ,exemple (-Examples),full (-Full)...
- Ex: Get-Help write-host –examples
- Get-Member: Cette commande retourne toutes les propriétés et méthodes d’un objet ainsi que son type.
- Ex: $a = ‘Hello world’$a | get-member
- Ex: Get-Process | get-member
- Get-Alias: Permet d’obtenir les alias de la session. Un alias est un autre nom que l’on attribue à une commande, une fonction, un script, un fichier exécutable ou un autre élément de commande.
- Ex: gci l’alias de get-childit
- Get-Process (alias ps) : équivalent d'un ps -e, liste les processus
! Contrairement à Bash, les arguments même longs ne prennent qu'un seul tiret : -commandType et pas --commandType
Le pipe |
Le pipe permet de passer un ou plusieurs objets à la commande qui suit.
Exemples:
<syntaxhighlight lang="powershell">
- Get-Service WinRM| Restart-service
- Ici on récupère le service WinRM et on le redémarre.
Get-ChildItem| Where-Object {$_.Length –gt32KB}
- Ici on liste le contenu du repertoire courant uniquement pour les fichiers pesant plus de 32KB.
Get-Service | Where-Object {$_.Name -eq"WinRM"}
- Ici on liste le service qui porte le nom WinRM
- Note: $_ correspond à l’objet courant. Si c’est une liste on traite les objets les uns après les autres.
</syntaxhighlight>
Tri et forme
- Format-List (Alias : fl) : Formate la sortie comme une liste de propriétés.
- Ex : Get-ChildItem| fl
- Format-Table (Alias : ft) : Formate la sortie comme une table avec les propriétés sélectionnées des objets dans chaque colonne.
- Ex : Get-ChildItem| ft
- Format-Wide (Alias : fw) : Formate la sortie comme une table multi colonne, mais seulement une propriété de chaque objet est affiché.
- Ex : Get-ChildItem| format-wide-column2
- Ex : Get-Service | fw-Property displayName–autosize
- Select-Object (Alias : select) : Sélectionne des objets ou des propriétés
- Ex : Get-ChildItem C:\Windows | Select-Object Name
- Sort-Object (Alias : sort): Trie des objets dans l'ordre croissant à partir des valeurs de propriétés de l’objet.
- Ex : Get-ChildItemC:\Windows | sort length -Descending
- Where-Object (Alias : ?): Selectionne un object ense basantsur sespropriétés
- Ex : Get-ChildItemC:\Windows | Where-Object {$_.name -like "system*"}
Formatage des données : Import / Export
- Get-Content (alias gc): permet de lire le contenu d’un fichier texte ou binaire
- Ex: Get-Content –path c:\doc.txt
- Il est possible de faire une recherche dans le contenu d’une chaine de caractères ou d’un fichier.
- Out-File Redirige les données vers un fichier spécifique
- Ex :Get-Service | Out-file C:\Windows\log_service.txt
- Equivalent d'un bon vieux > Linux, d'ailleurs le > marche aussi
Travailler avec le CSV
- Export-CSV : permet d’exporter des données au format CSV
- Ex: Get-Process | select-object ProcessName,ID| export-csv-path data.csv
- Import-CSV : permet depuis un fichier csv de récupérer les données de celui-ci.
- Ex :$a = Import-Csv-Delimiter “;” -path “.\data.csv”
- $a
- $a.ID
Sécuriser une chaîne
Pour sécuriser une chaine de caractère il existe deux méthodes :
- Utiliser la cmdlet ConvertTo-SecureString avec les deux paramètres :
- -Asplaintext (indique que l’on souhaite convertir une chaine standard en sécurisée)
- –Force (Confirme l’utilisation de la première option).
- Ex: $pw= ConvertTo-SecureString"password" -Asplaintext-Force ($pwest de type System.Security.SecureString)
- -Sécuriser la chaine lors de la saisie avec la cmdlet Read-Host et le paramètre -AsSecureString
- Ex: $pw= Read-Host –AsSecureString
Powershell et Active Directory
<pdf>Fichier:Psad.pdf</pdf>