Ceci est une ancienne révision du document !
Table des matières
PowerShell
Emplacement de PowerShell :
c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe
Ne pas se fier au répertoire d'installation qui fait référence au moteur d'exécution, toujours en version 1.0
Principe de syntaxe :
commande [-paramètre] <valeur requise> {valeur facultative}
- Dans le système, les commandes sont regroupées par modules correspondant à des familles de ressources (AD, DNS…)
- Chaque commande est composée d'un verbe et d'un nom, séparés par un - (Verb-Noun)
- Certains noms peuvent être préfixés, permettant d'identifier la famille de ressources
Commandes de base
Commandes PowerShell (également appelées CMDLETS) | |
---|---|
$PSVersionTable.PSVersion $PSVersionTable | Version de PowerShell installée Donne des infos détaillées |
Get-Verb | Pour récupérer la liste des verbes |
Get-Help <cmdlets> Get-Help -Name *mot_cle* | Donne une aide sur les commandes Permet de recherche des cmdlets à partir d'un mot clé |
Get-Command | Permet de trouver les commandes potentielles répondant à un besoin -Name : filtre sur le nom complet (caractère * autorisé) -Verb : filtre sur le verbe de la commande -Noun : filtre sur le nom de la commande (partie après le -) -Module : oriente la recherche dans un module connu (colonne “source”) |
Get-Member | Renvoie les caractéristiques des objets obtenus en sortie d'une commande Cette commandes donne plusieurs informations : * Le type d'objet, repérable par le mot TypeName |
Get-Module -ListAvailable | Liste les modules et leurs emplacements |
Get-Alias | Permet de lister tous les Alias |
Get-Alias -Definition <cmdlets> | Permet de connaitre les alias liés à une commande |
New-Alias | Permet de créer de nouveaux alis dans la session PowerShell courante |
Vocabulaire
- Le pipeline est une succession de commandes, dans lequel la sortie d'une commande est passée à la commande suivante.
La sortie de la dernière commande est affichée à l'écran, sauf si elle est redirigée dans un fichier. - Les commandes PowerShell produisent généralement des objets en sortie.
- Il faut voir les objets comme un tableau de données en mémoire.
- On parle alors de collection d'objets ayant des caractéristiques (Propriétés) et sur lesquels on peut agir (Méthodes).
- Par exemple la commande
Get-Service | Format-Table Name, Status, Displayname
affiche une collection d'objets (Services) avec 3 propriétés (Name, Status, DisplayName). - Pour connaître toutes les caractéristiques des objets obtenus en sortie d'une commande, on utilise la commande
Get-Member
:Get-Service | Get-Member
Cette commandes donne plusieurs informations :- Le type d'objet, repérable par le mot
TypeName
- Le nom de l'objet dans la colonne
Name
- Les propriétés de l'objet =
Property
dans la colonneMemberType
- Les Méthodes de l'objet =
Method
dans la colonneMemberType
Suite
Tester un port spécifique :
Test-NetConnection -ComputerName <NomServeurOuIP> -Port <1339>
Visualisation de la sécurité : Get-ExecutionPolicy
Stratégie par défaut : Restricted (la plus sécurisée mais aussi la plus contraignante)
Modification de la sécurité :
Set-ExecutionPolicy [Unrestricted | Restricted | AllSigned | RemoteSigned]
Exécution d’un script : ./nom_du_script.ps1
Exécution d'un script sans modifier la sécurité :
powershell -noprofile -ExecutionPolicy Bypass -file “C:\chemin\du\dossier\script.ps1”
Lever les restrictions d'exécution pour la session en cours :
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
(A lancer avant l'exécution d'un script)
Caractère de commentaire dans un script : #
Commandes à distance
Pour configurer PowerShell pour recevoir des commandes à distance :
Démarrez PowerShell avec l’option « Exécuter en tant qu’administrateur ». À l’invite de commandes, tapez : Enable-PSRemoting
Vérifier à distance la politique de sécurité :
Invoke-Command -ComputerName <NomMachine> -ScriptBlock { Get-ExecutionPolicy }
Modifier à distance la politique de sécurité :
Invoke-Command -ComputerName <NomMachine> -ScriptBlock { Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine }