====== 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 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 \\ 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\\ * Le nom de l'objet dans la colonne Name\\ * Les propriétés de l'objet = Property dans la colonne MemberType\\ * Les Méthodes de l'objet = Method dans la colonne MemberType |
| **Get-Module\\ Get-Module -ListAvailable\\ $env:PSModulePath\\ Import-Module** | Liste des modules chargés par défaut en mémoire\\ Liste les modules disponibles et leurs emplacements\\ Donne l'emplacement des modules\\ Importe manuellement un module quand celui-ci n'est pas enregistré dans un emplacement connu de $env:PSModulePath |
| **Get-Alias** | Permet de lister tous les Alias |
| **Get-Alias -Definition ** | Permet de connaitre les alias liés à une commande |[
| **New-Alias** | Permet de créer de nouveaux alis dans la session PowerShell courante |
===== Vocabulaire =====
* Un **module PowerSell** est un ensemble de Cmdlets liées à un même sujet (AD, DnsServer, Applications, Rôles...)
* Les commandes PowerShell (ou Cmdlets) 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''
* 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.
===== Suite =====
Tester un port spécifique :
Test-NetConnection -ComputerName -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 : ''#''
[[http://go.microsoft.com/fwlink/?LinkID=135170|Voir documentation Microsoft]]
=== 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 -ScriptBlock { Get-ExecutionPolicy }
Modifier à distance la politique de sécurité :
Invoke-Command -ComputerName -ScriptBlock { Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine }