Blog ENI : Toute la veille numérique !
-25€ dès 75€ sur les livres en ligne, vidéos... avec le code FUSEE25. J'en profite !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici

Quelques astuces

Ouvrir rapidement un dossier dans PowerShell

Nous souhaitons ici ouvrir PowerShell et nous positionner dans un dossier spécifique afin d’exécuter un script s’y trouvant.

Pour cela, procédez comme ci-dessous :

 Ouvrez la console PowerShell.

images/24RI01.png

 Naviguez jusqu’à votre dossier à l’aide de cd ou Set-Location.

images/24RI02.png

 Exécutez le script à l’aide de .\MonScript.ps1.

images/24RI03.png

Une autre solution existe vous permettant, depuis l’explorateur Windows, d’ouvrir PowerShell directement dans le dossier sur lequel vous êtes.

Pour cela, il faudra procéder comme ci-dessous :

 Placez-vous dans le dossier contenant le script à exécuter depuis l’explorateur Windows.

images/24RI04.png

 Placez-vous dans la barre d’adresse.

 Saisissez le terme powershell.

images/24RI05.png

 Cliquez sur la touche [Entrée] du clavier.

La console PowerShell va alors s’ouvrir en se positionnant directement dans le dossier souhaité.

images/24RI06.png

Récupérer le chemin complet d’un élément depuis l’explorateur Windows

Nous souhaitons ici récupérer le chemin complet d’un fichier ou répertoire.

Pour cela, procédez comme ci-dessous :

 Ouvrez l’explorateur Windows.

 Naviguez jusqu’au fichier ou répertoire souhaité.

 Allez dans la barre d’adresse puis copiez le chemin.

Une autre solution plus rapide permet de récupérer le chemin depuis un clic droit sur le fichier ou répertoire.

Pour cela, il faudra procéder comme ci-dessous :

 Ouvrez l’explorateur Windows.

 Naviguez jusqu’au fichier ou répertoire souhaité.

 Faites un clic droit sur le fichier ou répertoire en maintenant la touche [Shift].

Pour rappel, la touche [Shift] est la suivante :

images/24RI07.png

Une nouvelle entrée dans le menu contextuel apparaît nommée Copier en tant que chemin d’accès.

images/24RI08.png

Ci-dessous le menu contextuel avec juste un clic droit sans appuyer sur [Shift] :

images/24RI09.png

Historique des commandes passées dans la console

1. Contexte

Prenons le scénario suivant :

  • Nous avons exécuté une commande ou un code précédemment.

  • Nous souhaitons y avoir accès.

Un autre exemple de scénario pourrait être de vérifier les commandes exécutées depuis une machine spécifique.

Pour cela, différentes méthodes existent :

  • Utiliser le fichier texte ConsoleHost_history.txt.

  • Utiliser la cmdlet Get-History.

  • Utiliser le raccourci [Ctrl] R.

  • Utiliser un script de recherche.

2. Rechercher l’historique dans le fichier texte

Où se trouve le fichier ?

Le fichier en question se nomme ConsoleHost_history.txt.

Celui-ci se trouve dans l’emplacement suivant : %APPDATA%\Microsoft\Windows\PowerShell\PSReadLine.

En PowerShell :

$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine 

Nous pouvons récupérer le chemin du fichier à l’aide de la commande suivante :

(Get-PSReadLineOption).HistorySavePath 

Ce qui donnera :

images/24RI10.png

Cette commande sans la propriété HistorySavePath vous donnera également d’autres informations.

images/24RI11.png

Nous allons nous intéresser à certaines propriétés en rapport avec l’historique, afin de comprendre ce qu’elles font :

  • HistoryNoDuplicates : les commandes en double sont toujours ajoutées au fichier historique. Lorsque cette option est définie, seule l’invocation la plus récente apparaît lors du rappel des commandes.

  • HistorySavePath : chemin du fichier contenant l’historique.

  • HistorySaveStyle : mode de sauvegarde de l’historique. Trois valeurs sont disponibles :

  • SaveIncrementally : sauvegarde automatiquement après chaque commande.

  • SaveAtExit : sauvegarde à la fermeture de la console.

  • SaveNothing : désactive la sauvegarde.

  • HistorySearchCaseSensitive : spécifie...

Lister les combinaisons de touches disponibles

Comme mentionné plus haut, différents raccourcis-clavier et combinaisons de touches sont disponibles dans la console PowerShell. Ceux-ci peuvent permettre un véritable gain de temps, mais tout le monde ne les connaît pas.

Pour lister les combinaisons disponibles, il suffit d’utiliser la cmdlet Get-PSReadLineKeyHandler.

Ceci est également possible en utilisant la combinaison de touches [Ctrl][Alt][Shift] ?.

Ci-dessous les combinaisons en détail :

PS C:\Users\damien.vanrobaeys>  Get-PSReadLineKeyHandler 
Basic editing functions 
======================= 
 
Key              Function           Description 
---              --------           ----------- 
Enter            AcceptLine         Accept the input or move to  
the next line if input is missing a closing token. 
Shift+Enter      AddLine            Move the cursor to the next  
line without attempting to execute the input 
Backspace        BackwardDeleteChar Delete the character before the cursor 
Ctrl+h           BackwardDeleteChar Delete the character before the cursor 
Ctrl+Home        BackwardDeleteLine Delete text from the cursor  
to the start of the line 
Ctrl+Backspace   BackwardKillWord   Move the text from the start  
of the current or previous word to the cursor to the kill ring 
Ctrl+C           Copy               Copy selected region to the  
system clipboard.  If no region is selected, copy the whole line 
Ctrl+c           CopyOrCancelLine   Either copy selected text to  
the clipboard...

Éditer une commande dans la console

Prenons l’exemple suivant : vous avez exécuté une commande précédemment et vous souhaitez l’exécuter à nouveau, mais en la modifiant un peu avant de l’exécuter. Pour cela, il suffira de copier ou rechercher la commande souhaitée puis utiliser la combinaison de touches [Shift][Enter].

images/24RI23.png

Cela ouvrira la commande en mode édition :

images/24RI24.png

Lister les cmdlets comportant un certain mot

Il est souvent utile de rechercher une cmdlet comportant un certain mot.

Cela peut se faire en utilisant la cmdlet Get-Command.

Get-Command "*wmi*" 
images/24RI25.png

Une méthode plus rapide permettra grâce à l’IntelliSense d’afficher les différentes cmdlets comportant un certain mot. Il faudra utiliser la combinaison de touches [Ctrl][Espace].

Voyons cela en exemple :

 Saisissez le mot get-it (pour get-item).

 Utilisez la combinaison [Ctrl][Espace].

Un menu s’affichera, affichant les cmdlets comportant ce mot. En dessous, les différents paramètres seront affichés :

images/24RI26.png
images/24RI27.png

Lister les paramètres pour une cmdlet dans un menu

Il est possible d’accéder aux paramètres d’une cmdlet facilement en saisissant le caractère "-" puis la touche [Tab] (ci-dessous) :

images/24RI28.png

Cependant, il faudra parfois cliquer plusieurs fois sur la touche [Tab] pour arriver au paramètre souhaité. Une autre technique est possible en listant directement tous les paramètres disponibles pour une cmdlet dans un menu :

 Saisissez la cmdlet souhaitée.

 Saisissez le caractère "-" (pour un paramètre).

 Utilisez la combinaison [Ctrl][Espace].

Les différents paramètres seront affichés sous la forme d’un menu.

images/24RI29.png

Commenter un bloc de code

Comme évoqué dans le chapitre Quelques bonnes pratiques, il est important de commenter son code afin de le rendre facilement maintenable et réutilisable.

Pour commenter une ligne, il faut la précéder du caractère #, ce qui la commentera :

images/24RI30.png

Avec Notepad++, il est facilement possible de commenter une ligne ou un bloc entier de code en utilisant le raccourci [Ctrl] Q.

Ci-dessous un code non commenté :

$scriptDefinition = @' 
$MonFichier=GC "C:\event_log.txt" 
If($toto -eq $True) 
    { 
           If($tata -eq $True) 
                 { 
                        Votre code 
                 } 
    } 
'@ 

Ci-dessous le même code commenté en bloc avec [Ctrl] Q :

#$scriptDefinition = @' 
#$MonFichier=GC "C:\event_log.txt" 
#If($toto -eq $True) 
#    { 
#           If($tata -eq $True) 
#                 { ...

Ajouter un menu contextuel Exécuter en tant qu’administrateur

Par défaut, lorsque vous faites un clic droit sur un fichier PowerShell, l’option qui vous est proposée est Exécuter avec PowerShell.

images/24RI33.png

Cela aura pour action d’exécuter le script en question en mode utilisateur, c’est-à-dire sans privilèges ni droits administrateurs.

Il est souvent nécessaire d’exécuter certains scripts avec des droits élevés pour effectuer certaines actions. Il est possible d’ajouter ses propres entrées dans le menu contextuel de Windows pour une extension particulière. Ici, le but sera d’ajouter un menu contextuel, Exécuter en tant qu’administrateur après un clic droit sur un fichier PS1.

Pour créer le menu contextuel, procédez comme ci-dessous :

 Ouvrez le registre en tant qu’administrateur.

 Naviguez jusqu’à l’emplacement HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\shell.

images/24RI34.png

 Faites un clic droit sur Shell, puis sélectionnez Nouveau - Clé et saisissez comme nom RunAs.

images/24RI35.png

La clé sera alors créée.

images/24RI36.png

 Faites un clic droit sur RunAs puis sélectionnez Nouveau - Valeur chaîne, afin de créer une nouvelle chaîne de caractères.

images/24RI37.png

 Renommez cette clé en HasLUAShield.

Cela va permettre d’afficher une icône administrateur....

Exécuter automatiquement un script dans Windows Sandbox

1. Qu’est-ce que Windows Sandbox ?

Windows Sandbox est une fonctionnalité de Windows intégrée depuis la version 1903. Celle-ci permet d’ouvrir un environnement virtualisé de votre système d’exploitation, un peu comme le principe d’une machine virtuelle, à la différence qu’elle ne nécessite pas d’image d’installation ni de VHDX ou de place sur votre disque.

Windows Sandbox utilise votre système d’exploitation pour ouvrir un environnement virtualisé et isolé, c’est-à-dire sans impact sur le poste hôte. De plus, tout ce que vous installez dans Windows Sandbox sera réinitialisé à sa fermeture.

2. Installation de Windows Sandbox

Pour installer Windows Sandbox sur votre poste, procédez comme ci-dessous :

 Dans la barre de recherche du menu Démarrer, saisissez fonctionnalité windows.

 Cliquez sur Activer ou désactiver des fonctionnalités Windows.

images/24RI47.png

 Cochez Bac à sable Windows.

images/24RI48.png

 Redémarrez votre poste.

3. Pourquoi exécuter un script dans Windows Sandbox ?

Windows Sandbox peut vous être très utile pour tester vos scripts sans les exécuter sur votre poste. Vous pouvez par exemple copier votre script et le coller directement dans Windows Sandbox afin...