Chapitre 1 - Prise en main de PowerShell

Ce chapitre se concentre sur la recherche et le lancement de PowerShell et la résolution des points de douleur initiaux que les nouveaux utilisateurs connaissent avec PowerShell. Suivez et suivez les exemples de ce chapitre sur votre ordinateur d’environnement lab.

Qu’est-ce que PowerShell ?

Windows PowerShell est un environnement d’interpréteur de commandes et d’écriture de scripts facile à utiliser pour automatiser les tâches administratives des systèmes Windows. Windows PowerShell est préinstallé sur toutes les versions modernes du système d’exploitation Windows.

Où trouver PowerShell

Le moyen le plus simple de trouver PowerShell sur Windows 11 consiste à taper PowerShell dans la barre de recherche, comme illustré dans la figure 1-1. Notez qu’il existe quatre raccourcis différents pour Windows PowerShell.

Figure 1-1 - Rechercher PowerShell.

Raccourcis Windows PowerShell sur une version 64 bits de Windows :

  • Windows PowerShell
  • Windows PowerShell ISE
  • Windows PowerShell (x86)
  • Windows PowerShell ISE (x86)

Sur une version 64 bits de Windows, vous disposez d’une version 64 bits de la console Windows PowerShell et de l’environnement de script intégré Windows PowerShell (ISE) et d’une version 32 bits de chacun, comme indiqué par le suffixe (x86) sur les raccourcis.

Remarque

Windows 11 est fourni uniquement en tant que système d’exploitation 64 bits. Il n’existe aucune version 32 bits de Windows 11. Toutefois, Windows 11 inclut des versions 32 bits de Windows PowerShell et windows PowerShell ISE.

Vous n’avez que deux raccourcis si vous exécutez une version 32 bits antérieure de Windows. Ces raccourcis n’ont pas le suffixe (x86), mais sont des versions 32 bits.

Je vous recommande d’utiliser la version 64 bits de Windows PowerShell si vous exécutez un système d’exploitation 64 bits, sauf si vous avez une raison spécifique d’utiliser la version 32 bits.

Selon la version de Windows 11 que vous exécutez, Windows PowerShell peut s’ouvrir dans Terminal Windows.

Microsoft ne met plus à jour PowerShell ISE. L’ISE fonctionne uniquement avec Windows PowerShell 5.1. Visual Studio Code (VS Code) avec l’extension PowerShell fonctionne avec les deux versions de PowerShell. VS Code et l’extension PowerShell ne sont pas fournis dans Windows. Installez VS Code et l’extension sur l’ordinateur sur lequel vous créez des scripts PowerShell. Vous n’avez pas besoin de les installer sur tous les ordinateurs sur lesquels vous exécutez PowerShell.

Guide pratique pour lancer PowerShell

J’utilise trois comptes d’utilisateur Active Directory différents dans les environnements de production que je prends en charge. J’ai mis en miroir ces comptes dans l’environnement lab utilisé dans ce livre. Je me connecte à mon ordinateur Windows 11 en tant qu’utilisateur de domaine sans droits d’administrateur local ou de domaine.

Lancez la console PowerShell en cliquant sur le raccourci Windows PowerShell, comme illustré dans la figure 1-1. Notez que la barre de titre de la console indique Windows PowerShell, comme illustré dans la figure 1-2.

Figure 1-2 - Barre de titre de la fenêtre PowerShell.

Certaines commandes s’exécutent correctement lorsque vous exécutez PowerShell en tant qu’utilisateur ordinaire. Toutefois, PowerShell ne participe pas au contrôle d’accès utilisateur (UAC). Cela signifie qu’il ne peut pas demander une élévation des privilèges pour les tâches qui nécessitent l’approbation d’un administrateur.

Remarque

L’UAC est une fonctionnalité de sécurité Windows qui permet d’empêcher l’exécution de code malveillant avec des privilèges élevés.

Lorsqu’il est connecté en tant qu’utilisateur ordinaire, PowerShell retourne une erreur lorsque vous exécutez une commande nécessitant une élévation. Par exemple, arrêt d’un service Windows :

Stop-Service -Name W32Time
Stop-Service : Service 'Windows Time (W32Time)' cannot be stopped due to
the following error: Cannot open W32Time service on computer '.'.
At line:1 char:1
+ Stop-Service -Name W32Time
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (System.ServiceProcess.ServiceCon
   troller:ServiceController) [Stop-Service], ServiceCommandException
    + FullyQualifiedErrorId : CouldNotStopService,Microsoft.PowerShell.Comm
   ands.StopServiceCommand

La solution consiste à exécuter PowerShell avec élévation de privilèges en tant qu’utilisateur qui est un administrateur local. C’est ainsi que j’ai configuré mon deuxième compte d’utilisateur de domaine. En suivant le principe des privilèges minimum, ce compte ne doit pas être administrateur de domaine ni disposer de privilèges élevés dans le domaine.

Pour démarrer PowerShell avec des droits élevés, cliquez avec le bouton droit sur le raccourci Windows PowerShell et sélectionnez Exécuter en tant qu’administrateur, comme illustré dans la figure 1-3.

Figure 1-3 - Menu contextuel - Exécuter en tant qu’administrateur.

Windows vous invite à entrer des informations d’identification, car vous vous êtes connecté à Windows en tant qu’utilisateur ordinaire. Entrez les informations d’identification de votre utilisateur de domaine qui est un administrateur local, comme illustré dans la figure 1-4.

Figure 1-4 - Contrôle de compte d’utilisateur - Entrez les informations d’identification.

Notez que la barre de titre des fenêtres de console avec élévation de privilèges indique Administrateur : Windows PowerShell, comme illustré dans la figure 1 à 5.

Figure 1-5 - Barre de titre de la fenêtre PowerShell avec élévation de privilèges.

Maintenant que vous exécutez PowerShell avec élévation de privilèges en tant qu’administrateur, l’UAC n’est plus un problème lorsque vous exécutez une commande nécessitant une élévation.

Important

Vous devez uniquement exécuter PowerShell avec élévation de privilèges en tant qu’administrateur si nécessaire.

Lorsque vous ciblez des ordinateurs distants, il n’est pas nécessaire d’exécuter PowerShell avec élévation de privilèges. L’exécution de PowerShell avec élévation de privilèges affecte uniquement les commandes qui s’exécutent sur votre ordinateur local.

Vous pouvez simplifier la recherche et le lancement de PowerShell. Épinglez le raccourci PowerShell ou Terminal Windows à votre barre des tâches. Recherchez à nouveau PowerShell, sauf cette fois-ci, cliquez dessus avec le bouton droit et sélectionnez Épingler à la barre des tâches, comme illustré dans la figure 1-6.

Figure 1-6 - Menu contextuel - Épingler à la barre des tâches.

Important

La version d’origine de ce livre, publiée en 2017, recommande d’épingler un raccourci à la barre des tâches pour lancer automatiquement une instance avec élévation de privilèges chaque fois que vous démarrez PowerShell. Toutefois, en raison de problèmes de sécurité potentiels, je ne le recommande plus. Toutes les applications que vous lancez à partir d’une instance avec élévation de privilèges de PowerShell contournent également l’UAC et exécutent avec élévation de privilèges. Par exemple, si vous lancez un navigateur web à partir d’une instance avec élévation de privilèges de PowerShell, tout site web que vous visitez contenant du code malveillant s’exécute également avec élévation de privilèges.

Lorsque vous devez exécuter PowerShell avec des autorisations élevées, cliquez avec le bouton droit sur le raccourci PowerShell épinglé à votre barre des tâches en appuyant sur Maj. Sélectionnez Exécuter en tant qu’administrateur, comme illustré dans la figure 1-7.

Figure 1-7 - Menu contextuel - Exécuter en tant qu’administrateur.

Déterminer votre version de PowerShell

Il existe des variables automatiques dans PowerShell qui stockent les informations d’état. L’une de ces variables est $PSVersionTable, qui contient des informations de version sur votre session PowerShell.

$PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.22621.2428
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.22621.2428
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Si vous exécutez une version de Windows PowerShell antérieure à la version 5.1, vous devez mettre à jour votre version de Windows. Windows PowerShell 5.1 est préinstallé sur les versions actuellement prises en charge de Windows.

PowerShell version 7 n’est pas un remplacement pour Windows PowerShell 5.1 ; il s’installe côte à côte avec Windows PowerShell. Windows PowerShell version 5.1 et PowerShell version 7 sont deux produits différents. Pour plus d’informations sur les différences entre Windows PowerShell version 5.1 et PowerShell version 7, consultez Migration de Windows PowerShell 5.1 vers PowerShell 7.

Conseil

PowerShell version 6, anciennement PowerShell Core, n’est plus prise en charge.

Stratégie d’exécution

La stratégie d’exécution PowerShell contrôle les conditions dans lesquelles vous pouvez exécuter des scripts PowerShell. La stratégie d’exécution dans PowerShell est une fonctionnalité de sécurité conçue pour empêcher l’exécution involontaire de scripts malveillants. Toutefois, il ne s’agit pas d’une limite de sécurité, car elle ne peut pas empêcher les utilisateurs d’exécuter délibérément des scripts. Un utilisateur déterminé peut contourner la stratégie d’exécution dans PowerShell.

Vous pouvez définir une stratégie d’exécution pour l’ordinateur local, l’utilisateur actuel ou une session PowerShell. Vous pouvez également définir des stratégies d’exécution pour les utilisateurs et les ordinateurs avec une stratégie de groupe.

Le tableau suivant montre la stratégie d’exécution par défaut pour les systèmes d’exploitation Windows actuels.

Version du système d’exploitation Windows Stratégie d’exécution par défaut
Windows Server 2022 RemoteSigned
Windows Server 2019 RemoteSigned
Windows Server 2016 RemoteSigned
Windows 11 Restreint
Windows 10 Restreint

Quel que soit le paramètre de stratégie d’exécution, vous pouvez exécuter n’importe quelle commande PowerShell de manière interactive. La stratégie d’exécution affecte uniquement les commandes qui s’exécutent dans un script. Utilisez l’applet Get-ExecutionPolicy de commande pour déterminer le paramètre de stratégie d’exécution actuel.

Vérifiez le paramètre de stratégie d’exécution sur votre ordinateur.

Get-ExecutionPolicy
Restricted

Répertoriez les paramètres de stratégie d’exécution pour toutes les étendues.

Get-ExecutionPolicy -List
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined

Tous les systèmes d’exploitation clients Windows ont le paramètre de stratégie d’exécution par défaut .Restricted Vous ne pouvez pas exécuter de scripts PowerShell à l’aide du Restricted paramètre de stratégie d’exécution. Pour tester la stratégie d’exécution, enregistrez le code suivant sous la forme d’un .ps1 fichier nommé Get-TimeService.ps1.

Conseil

Un script PowerShell est un fichier en texte clair qui contient les commandes que vous souhaitez exécuter. Les fichiers de script PowerShell utilisent l’extension de .ps1 fichier. Pour créer un script PowerShell, utilisez un éditeur de code tel que Visual Studio Code (VS Code) ou un éditeur de texte tel que le Bloc-notes.

Lorsque vous exécutez la commande suivante de manière interactive, elle se termine sans erreur.

Get-Service -Name W32Time

Toutefois, PowerShell retourne une erreur lorsque vous exécutez la même commande à partir d’un script.

.\Get-TimeService.ps1
.\Get-TimeService.ps1 : File C:\tmp\Get-TimeService.ps1 cannot be loaded
because running scripts is disabled on this system. For more information,
see about_Execution_Policies at
https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Get-TimeService.ps1
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

Lorsque vous exécutez une commande dans PowerShell qui génère une erreur, lisez le message d’erreur avant de réessayer la commande. Notez que le message d’erreur vous indique pourquoi la commande a échoué :

... L’exécution de scripts est désactivée sur ce système.

Pour activer l’exécution de scripts, modifiez la stratégie d’exécution avec l’applet de Set-ExecutionPolicy commande. LocalMachine est l’étendue par défaut lorsque vous ne spécifiez pas le paramètre Scope . Vous devez exécuter PowerShell avec élévation de privilèges en tant qu’administrateur pour modifier la stratégie d’exécution de l’ordinateur local. Sauf si vous signez vos scripts, je vous recommande d’utiliser la RemoteSigned stratégie d’exécution. RemoteSigned vous empêche d’exécuter des scripts téléchargés qui ne sont pas signés par un éditeur approuvé.

Avant de modifier la stratégie d’exécution, lisez l’article d’aide about_Execution_Policies pour comprendre les implications de sécurité.

Remplacez le paramètre de stratégie d’exécution sur votre ordinateur RemoteSignedpar .

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Si vous avez correctement modifié la stratégie d’exécution, PowerShell affiche l’avertissement suivant :

Execution Policy Change
The execution policy helps protect you from scripts that you do not trust.
Changing the execution policy might expose you to the security risks
described in the about_Execution_Policies help topic at
https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the
execution policy?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "N"):y

Si vous n’exécutez pas PowerShell avec élévation de privilèges en tant qu’administrateur, PowerShell retourne le message d’erreur suivant :

Set-ExecutionPolicy : Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWAR
E\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied. To
change the execution policy for the default (LocalMachine) scope, start
Windows PowerShell with the "Run as administrator" option. To change the
execution policy for the current user, run "Set-ExecutionPolicy -Scope
CurrentUser".
At line:1 char:1
+ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (:) [Set-ExecutionPolicy],
   UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.
   PowerShell.Commands.SetExecutionPolicyCommand

Il est également possible de modifier la stratégie d’exécution pour l’utilisateur actuel sans avoir à exécuter PowerShell avec élévation de privilèges en tant qu’administrateur. Cette étape n’est pas nécessaire si vous définissez correctement la stratégie d’exécution de l’ordinateur RemoteSignedlocal sur .

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Avec la stratégie d’exécution définie RemoteSignedsur , le Get-TimeService.ps1 script s’exécute correctement.

.\Get-TimeService.ps1
Status   Name               DisplayName
------   ----               -----------
Running  W32Time            Windows Time

Résumé

Dans ce chapitre, vous avez appris où trouver et comment lancer PowerShell. Vous avez également appris à déterminer la version de PowerShell et l’objectif des stratégies d’exécution.

Révision

  1. Comment savoir quelle version de PowerShell un ordinateur exécute ?
  2. Quand devez-vous lancer PowerShell avec élévation de privilèges en tant qu’administrateur ?
  3. Quelle est la stratégie d’exécution par défaut sur les ordinateurs clients Windows, et qu’est-ce qu’elle empêche-t-elle de faire ?
  4. Comment déterminer le paramètre de stratégie d’exécution PowerShell actuel ?
  5. Comment modifier la stratégie d’exécution PowerShell ?

Références

Pour en savoir plus sur les concepts abordés dans ce chapitre, lisez les articles d’aide PowerShell suivants.

Étapes suivantes

Dans le chapitre suivant, vous allez découvrir la détectabilité des commandes dans PowerShell. Vous apprendrez également à télécharger les fichiers d’aide de PowerShell afin de pouvoir afficher l’aide dans votre session PowerShell.