Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! Découvrez la Bibliothèque Numérique ENI. Cliquez ici

Gérer votre système

PowerShell et les services Windows

Il est souvent utile de pouvoir démarrer, redémarrer ou arrêter des services Windows pour différentes actions, par exemple arrêter un service spécifique pour désinstaller une application.

Différentes cmdlets existent nativement pour gérer les services Windows.

D’autres solutions natives existent mais elles sont plus anciennes, nous ne les utiliserons pas.

Nous allons vérifier les cmdlets disponibles contenant le mot service.

Get-Command | where {$_.name -like "*service*" -and $_.source  
-like "*PowerShell.Management*"} 

Ci-dessous le résultat obtenu :

images/33RI01.png

Les commandes qui nous seront utiles seront les suivantes :

  • Get-Service

  • Start-Service

  • Stop-Service

  • Restart-Service

  • Suspend-Service

Le service qui nous servira d’exemple est le suivant :

  • Nom complet : Microsoft Intune Management Extension

  • Nom : IntuneManagementExtension

Ci-dessous le service depuis la partie Services de Windows :

images/33RI02.png

1. Get-Service : récupérer les informations du service

La cmdlet Get-Service permet de récupérer différentes informations :

  • nom du service,

  • nom complet,

  • état du service,

  • type de démarrage.

Ci-dessous la commande complète :

Get-Service IntuneManagementExtension 

Ci-dessous le résultat obtenu pour le service en question :

images/33RI03.png

Certaines propriétés permettent d’indiquer si certaines actions peuvent être réalisées ou non, exemple ci-dessous :

images/33RI04.png

Ci-dessous la signification :

  • CanPauseAndContinue : indique si le service peut être mis en pause.

  • CanShutdown : indique si le service peut être arrêté.

  • CanStop : indique si le service peut être arrêté.

2. Restart-Service : redémarrer un service

La cmdlet Restart-Service permet...

PowerShell et les processus

Il est souvent utile de pouvoir vérifier l’état des processus en cours sur votre poste ou un processus défini pour par exemple l’arrêter.

Différentes cmdlets existent nativement pour gérer les services Windows.

Nous allons vérifier les cmdlets disponibles contenant le mot process.

Get-Command | where {$_.name -like "*process*" -and $_.source  
-like "*PowerShell.Management*"} 

Ou comme ci-dessous :

Get-Command *Process* -CommandType Cmdlet | Where {$_.Source -eq  
"Microsoft.PowerShell.Management"} 

Ci-dessous le résultat obtenu :

images/33RI08.png

Les commandes qui nous seront utiles seront les suivantes :

  • Get-Process

  • Start-Process

  • Stop-Process

  • Wait-Process

1. Get-Process : lister les processus en cours

Par défaut sur Windows, il est possible de voir l’état des processus en allant dans le gestionnaire de tâches puis dans Processus ou alors dans PowerShell pour le résultat suivant :

images/33RI09.png

Listons maintenant toutes les propriétés :

Get-Process | Select * 
images/33RI10.png

Vous pouvez en apprendre davantage sur les options du pipe (|) dans le chapitre Le pipeline.

Nous obtenons donc de nombreuses informations.

Si vous souhaitez vérifier l’état d’un processus en particulier, il faudra ajouter le nom de ce dernier à la cmdlet, tel que ci-dessous avec le processus Outlook :

images/33RI11.png

Il peut parfois être utile de différencier certains processus. En effet, certains programmes peuvent être ouverts plusieurs fois ou sur différentes pages, ce qui entraîne l’ouverture de différents processus.

L’arrêt d’un processus principal peut donc entraîner l’arrêt de toutes les occurrences.

Prenons le scénario suivant : un script PowerShell est en cours d’exécution...

PowerShell et le gestionnaire d’évènements

La première étape pour comprendre comment utiliser le gestionnaire d’évènements avec PowerShell est de vérifier si des cmdlets existent.

Pour cela, nous utiliserons la cmdlet Get-Command.

Get-Command *Event* -CommandType Cmdlet | Where {$_.Source -eq  
"Microsoft.PowerShell.Management"} 

Ci-dessous le résultat :

images/33RI17.png

1. Lister les différentes catégories d’évènements

Dans la version graphique du gestionnaire d’évènements, ceux-ci sont répertoriés dans deux dossiers distincts.

  • Journaux Windows

  • Journaux des applications et des services

images/33RI18.png

La partie Journaux Windows contient les événements standards du poste.

images/33RI19.png

La partie Journaux des applications et des services contient des évènements spécifiques de Windows ainsi que d’autres applications.

images/33RI20.png

Ci-dessous la commande PowerShell pour obtenir la liste des événements :

Get-EventLog -list 

Ci-dessous le résultat obtenu :

images/33RI21.png

Le problème avec cette cmdlet est que certains évènements ne sont pas accessibles : ceux localisés dans des sous-dossiers tels qu’Intel ou encore Microsoft, dans la partie Journaux des applications et des services. Cela peut être embêtant car le dossier Microsoft contient de nombreux journaux d’évènements intéressants.

Pour accéder à tous les journaux d’évènements y compris ceux non disponibles avec la première cmdlet, nous en utiliserons une autre :

Get-WinEvent -ListLog * 

Ci-dessous le résultat obtenu :

images/33RI22.png

Nous allons maintenant voir quelques exemples pour manipuler les journaux d’évènements.

2. Exemples d’utilisation

Lister tous les évènements du journal d’évènements...

PowerShell et les tâches planifiées

La première étape pour comprendre comment utiliser le gestionnaire d’évènements avec PowerShell est de vérifier si des cmdlets existent.

Pour cela, nous utiliserons la cmdlet Get-Command.

Get-Command *ScheduledTask* 

Ci-dessous le résultat :

images/33RI30.png

Nous allons voir ci-dessous quelques exemples d’utilisations.

Lister toutes les tâches planifiées

La cmdlet à utiliser pour cela est la suivante :

Get-ScheduledTask 

Ci-dessous le résultat :

images/33RI31.png

Lister les tâches planifiées actives ou désactivées

Nous allons ici utiliser la même cmdlet puis filtrer sur la propriété State en recherchant soit Disabled soit Ready.

Get-ScheduledTask | Where{$_.State -eq "Disabled"} 
Get-ScheduledTask | Where{$_.State -eq "Ready"} 

Ci-dessous le résultat :

images/33RI32.png
images/33RI33.png

Lister les tâches planifiées d’un dossier en particulier

Les tâches planifiées sont organisées en différents sous-dossiers pour une meilleure gestion (lenovo, microsoft, Intune, Office...).

Pour lister les tâches planifiées d’un dossier en particulier, il faudra utiliser la cmdlet Get-ScheduledTask suivie du paramètre TaskPath puis spécifier le nom du dossier entre deux astérisques.

Ci-dessous un exemple avec le dossier office :

PS C:\User\damien.vanrobaeys>Get-ScheduledTask - TaskPath *office* 

Lister une tâche planifiée en particulier

Nous allons ici lister la tâche planifiée Intune Management Extension Health Evaluation.

Pour cela, nous utiliserons le paramètre -TaskName.

Get-ScheduledTask -TaskName "*Intune Management Extension*" 

Ci-dessous le résultat :

images/33RI35.png

Il est possible de lister toutes les tâches ayant un certain nom ou mot, comme ci-dessous avec...

PowerShell et le presse-papiers

Avec PowerShell, il est possible de récupérer les différents éléments inscrits dans le presse-papiers, c’est-à-dire après avoir réalisé une action Copier ou [Ctrl] C.

PowerShell offre nativement deux cmdlets pour gérer le presse-papiers Windows :

  • Get-Clipboard

  • Set-Clipboard

1. Get-Clipboard : récupérer le contenu copié

Différents paramètres seront à ajouter à la cmdlet Get-Clipboard en fonction du type de contenu ou format sur lequel vous souhaitez agir : texte, image, lien…

Pour comprendre le fonctionnement de cette cmdlet, utilisons la cmdlet Get-Help, comme ci-dessous :

Get-Help Get-Clipboard 

Ci-dessous le résultat obtenu :

images/RI33_GetHelp_Clipboard.png

Nous remarquons les formats suivants :

  • Text

  • FileDropList

  • Image

  • Audio

Pour avoir davantage d’informations, il suffit d’ajouter le paramètre -detailed.

Get-Help Get-Clipboard -detailed 

a. Presse-papiers et texte

Nous allons dans cet exemple récupérer le contenu du presse-papiers après avoir copié du texte en utilisant un simple [Ctrl] C sur la zone en question.

Nous allons dans cet exemple récupérer le contenu du presse-papiers après avoir copié le chemin d’un dossier depuis l’explorateur Windows.

La valeur du texte est : C:\test.

Un simple Get-Clipboard retournera le résultat suivant :

images/33RI42.png

b. Presse-papiers et fichiers

Nous allons dans cet exemple copier un ensemble de fichiers en effectuant un [Ctrl] C sur ceux-ci.

Ci-dessous les fichiers en question :

images/RI33_Clipboard_FileDropList.png

Maintenant, exécutons la commande suivante :

Get-Clipboard -Format FileDropList 

Ci-dessous le résultat obtenu :

images/33RI44.png

Il est possible de récupérer le nom des fichiers ou leur chemin complet de la manière suivante :

# Récupérer...