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*"} 

Voici 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 

Voici le résultat obtenu pour le service en question :

images/33RI03.png

Certaines...

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

Voici 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...

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 

Voici 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...

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 :...

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 

Voici 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 :...

Gérer les utilisateurs et groupes locaux

1. Comment ?

La gestion des utilisateurs locaux au travers de PowerShell se fait via différentes cmdlets en fonction de ce que l’on souhaite faire : lister, créer…

Nous allons tout d’abord lister les différentes cmdlets comportant le mot « local » :

get-command *local* 

Ci-dessous le résultat :

images/NRI36_01M.png

Nous remarquons ici plusieurs cmdlets permettant de gérer à la fois des objets utilisateurs ou groupes. Ces cmdlets sont membres du module Microsoft.PowerShell.LocalAccounts qui est installé par défaut sur Windows. 

Nous pouvons facilement trier sur les cmdlets permettant de gérer les utilisateurs comme ci-dessous :

get-command -module "Microsoft.PowerShell.LocalAccounts" -Name *user* 

Ci-dessous le résultat :

images/NRI36_02M.png

Ou sur les groupes :

get-command -module "Microsoft.PowerShell.LocalAccounts" -Name *group* 

Les différentes cmdlets que nous utiliserons doivent s’exécuter avec un compte administrateur.

2. Gérer les utilisateurs

Nous avons vu précédemment comment trouver les cmdlets appropriées pour gérer les utilisateurs locaux.

Voici les fonctions de chacune de ces cmdlets :

  • Disable-LocalUser : désactiver un compte utilisateur ;

  • Enable-LocalUser : activer un compte utilisateur ;

  • Get-LocalUser : lister un ou des utilisateurs ;

  • New-LocalUser : créer un nouvel utilisateur ;

  • Remove-LocalUser : supprimer un utilisateur ;

  • Rename-LocalUser : renommer un utilisateur ;

  • Set-LocalUser : modifier un utilisateur.

Nous allons maintenant voir quelques cas d’usage.

Lister les utilisateurs

Pour lister les utilisateurs locaux, nous utiliserons la cmdlet Get-LocalUser, comme ci-dessous :

PS C:\> get-localuser | select name, enabled 
  
Name               Enabled 
----               ------- 
admin                ...

PowerShell et Windows Update

1. Comment le faire avec PowerShell ?

Les mises à jour sont un élément important dans la sécurité du poste de travail. Elles peuvent s’installer de différentes manières dans un environnement d’entreprise : via WSUS et MECM, Windows Update classique, WufB, etc.

Pour gérer les mises à jour dans PowerShell, installez simplement le module PSWindowsUpdate.

L’installation du module se fait au travers de la commande suivante :

Install-Module -Name PSWindowsUpdate -Force 

Avant d’utiliser un module PowerShell, il est important de comprendre ce que celui-ci contient.

Il conviendra donc d’utiliser la cmdlet get-command afin de lister les commandes disponibles dans le module :

PS C:\> get-command -module pswindowsupdate | select name 
  
Name 
---- 
Clear-WUJob 
Download-WindowsUpdate 
Get-WUInstall 
Get-WUList 
Hide-WindowsUpdate 
Install-WindowsUpdate 
Show-WindowsUpdate 
UnHide-WindowsUpdate 
Uninstall-WindowsUpdate 
Add-WUServiceManager 
Enable-WURemoting 
Get-WindowsUpdate 
Get-WUApiVersion 
Get-WUHistory 
Get-WUInstallerStatus 
Get-WUJob 
Get-WULastResults 
Get-WUOfflineMSU 
Get-WURebootStatus 
Get-WUServiceManager 
Get-WUSettings 
Invoke-WUJob 
Remove-WindowsUpdate 
Remove-WUServiceManager 
Reset-WUComponents ...

PowerShell et les fonctionnalités Windows

1. Avec quelles commandes PowerShell ?

Les fonctionnalités Windows sont par défaut disponibles depuis le panneau de configuration Windows :

images/NRI36_06M.png

La commande permettant de voir les cmdlets disponibles pour gérer les fonctionnalités Windows est windowsoptionalfeature.

Voici les Cmdlets disponibles :

PS C:\> get-command *windowsoptionalfeature* 
CommandType     Name                                       Version    Source 
-----------     ----                                       -------    ------ 
Cmdlet          Disable-WindowsOptionalFeature             3.0        Dism 
Cmdlet          Enable-WindowsOptionalFeature              3.0        Dism ...