====== 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 }