Powershell Powershell est le successeur de cmd dans l'administration de Windows à la ligne de commande. Plutôt que d'utiliser des exécutables individuels ayant tous des structures différentes, Microsoft a tenté d'unifier la structure des commandes ainsi que les résultats de ces commandes. https://learn.microsoft.com/fr-ca/powershell/ Base Types d'objets de base History D'abord et avant tout, je vous suggère fortement de vous familiariser avec le type d'objet History. Il s'agit de l'historique des commandes que vous avez saisi au cours d'une session Powershell. Ces objets vous aideront à créer des scritps, à réviser vos commandes, etc. Ces commandes sont écrites dans le fichier "%AppData%\Microsoft\Windows\PowerShell\PSReadLine" Ces objets sont consultables à l'aide de la commande "Get-History" et sont composés des propriétés suivantes : Id : 7 CommandLine : $mon_message = "Hello world!" ExecutionStatus : Completed StartExecutionTime : 2025-01-18 4:20:04 PM EndExecutionTime : 2025-01-18 4:20:04 PM Id : 8 CommandLine : Write-Host $mon_message ExecutionStatus : Completed StartExecutionTime : 2025-01-18 4:20:10 PM EndExecutionTime : 2025-01-18 4:20:10 PM Vous pourriez donc facilement à partir de cet historique créer un script basé sur les manipulations que vous avez fait lors de votre session si vous sélectionnez seulement la ligne de commande comme ceci : PS C:\Users\alexa> Get-History | Select-Object -Property CommandLine CommandLine ----------- clear-history $mon_message = "Hello world!" Write-Host $mon_message Get-History Get-History | Select-Object -Property * ID L'identifiant de l'objet détermine l'ordre dans lequel les commandes ont été exécutées. CommandLine La commande exécutée. ExecutionStatus L'état de la commande à savoir si elle est en cours d'exécution (ex. un ping continu), si elle a échoué ou si elle a été complétée. StartExecutionTime La date et l'heure de l'exécution de la commande. EndExecutionTime La date et l'heure de la fin d'exécution de la commande, qu'elle ait été annulée, qu'elle ait échouée ou qu'elle se soit complétée. Item et ChildItem Un ChildItem peut représenter plusieurs types d'information. Ce type d'objet est généralement utilisé pour manipuler des fichiers sur un espace de stockage mais peut aussi être utilisé pour modifier des clés de registre. On peut déduire du nom des types d'objets qu'un Item sélectionne seulement l'objet demandé tandis qu'un ChildItem sélectionnera les objets situés à l'intérieur de l'objet. Ces deux types d'objets possèdent les mêmes propriétés et peuvent être manipulés de la même façon. PS C:\Users\alexa> Get-Item D:\Item | Select-Object -Property * PSPath : Microsoft.PowerShell.Core\FileSystem::D:\Item PSParentPath : Microsoft.PowerShell.Core\FileSystem::D:\ PSChildName : Item PSDrive : D PSProvider : Microsoft.PowerShell.Core\FileSystem PSIsContainer : True Mode : d----- BaseName : Item Target : {} LinkType : Name : Item FullName : D:\Item Parent : Exists : True Root : D:\ Extension : CreationTime : 2025-01-18 4:35:18 PM CreationTimeUtc : 2025-01-18 9:35:18 PM LastAccessTime : 2025-01-18 4:35:27 PM LastAccessTimeUtc : 2025-01-18 9:35:27 PM LastWriteTime : 2025-01-18 4:35:26 PM LastWriteTimeUtc : 2025-01-18 9:35:26 PM Attributes : Directory Lorsque l'on récupère les "ChildItem", il est aussi possible d'ajouter le paramètre "-recurse" pour sélectionner récursivement les objets dans les sous-dossiers ou sous-clés de registre. PS C:\Users\alexa> Get-ChildItem D:\Item Directory: D:\Item Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2025-01-18 4:40 PM Subdirectory -a---- 2025-01-18 4:35 PM 0 ChildItem-1.txt -a---- 2025-01-18 4:38 PM 0 ChildItem-2.txt PS C:\Users\alexa> Get-ChildItem D:\Item -Recurse Directory: D:\Item Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2025-01-18 4:40 PM Subdirectory -a---- 2025-01-18 4:35 PM 0 ChildItem-1.txt -a---- 2025-01-18 4:38 PM 0 ChildItem-2.txt Directory: D:\Item\Subdirectory Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2025-01-18 4:40 PM 0 SubChildItem.txt L'exemple suivant servirait à consulter le registre HKEY_CURRENT_USER. PS C:\Users\alexa> Get-ChildItem HKCU:/Item Hive: HKEY_CURRENT_USER\Item Name Property ---- -------- ChildItem Value : Content Content Tout comme en Linux la commande "cat" nous permet de lire le contenu d'un fichier et la redirection de sortie > et >> nous permet d'ajouter ou modifier le contenu du fichier, le type d'objet "Content" en Powershell nous permet de poser des actions similaires. Ce sont ici les commandes Get-Content, Clear-Content, Add-Content et Set-Content qui nous intéressent. # Contenu initial du fichier PS C:\Users\alexa> Get-Content D:\Item\ChildItem-1.txt Hello world! # Contenu vidé du fichier PS C:\Users\alexa> Clear-Content D:\Item\ChildItem-1.txt PS C:\Users\alexa> Get-Content D:\Item\ChildItem-1.txt # Contenu ajouté au fichier PS C:\Users\alexa> Add-Content -Path D:\Item\ChildItem-1.txt -Value "Bonjour le monde!" PS C:\Users\alexa> Get-Content D:\Item\ChildItem-1.txt Bonjour le monde! # Contenu du fichier remplacé PS C:\Users\alexa> Set-Content -Path D:\Item\ChildItem-1.txt -Value "Goodbye world!" PS C:\Users\alexa> Get-Content D:\Item\ChildItem-1.txt Goodbye world! ACL Les ACL ou "Access Control List" sont les permissions d'accès assignée à différents fichiers. Ces listes peuvent être consultées ou modifiées en Powershell à l'aide des commandes "Get-ACL" et "Set-ACL". Contrairement à "chmod" sous Linux nous permettant seulement de modifier les autorisations du fichier pour son propriétaire, son groupe propriétaire et les autres, la manipulation des ACL avec Powershell nous permet de gérer les ACLs avancées (ex. groupes et utilisateurs supplémentaires) tout comme "setfact" et "getfacl" sous Linux. Les propriétés les plus intéressantes de ce type d'objet sont le propriétaire, le groupe propriétaire et la propriété "AccessToString" déterminant quel utilisateur a accès au fichier.  # Vérification initiale des ACL (Les propriétés non pertinentes ont été retirées de l'affichage) PS C:\Users\alexa> Get-ACL D:\Item\ChildItem-1.txt | Select-Object -Property * Path : Microsoft.PowerShell.Core\FileSystem::D:\Item\ChildItem-1.txt Owner : PC\alexa Group : PC\alexa AccessToString : BUILTIN\Administrators Allow FullControl NT AUTHORITY\SYSTEM Allow FullControl NT AUTHORITY\Authenticated Users Allow Modify, Synchronize BUILTIN\Users Allow ReadAndExecute, Synchronize # Ajout d'une permission # # Récupérer les permissions actuelles PS C:\Users\alexa> $acl = Get-ACL D:\Item\ChildItem-1.txt # Créer une nouvelle permission et la traduire en objet de règle PS C:\Users\alexa> $permission = "PC\Invité","Modify","None",'None','Allow' PS C:\Users\alexa> $rule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission # Ajouter la règle à l'objet de permissions PS C:\Users\alexa> $acl.AddAccessRule($rule) # Appliquer le nouvel objet de permissions au fichier PS C:\Users\alexa> Set-ACL -Path D:\Item\ChildItem-1.txt -AclObject $acl # Valider les nouvelles permissions, observer que "Invité" a été ajouté aux permissions (Les propriétés non pertinentes ont été retirées de l'affichage) PS C:\Users\alexa> Get-ACL -Path D:\Item\ChildItem-1.txt | Select-Object -Property * Path : Microsoft.PowerShell.Core\FileSystem::D:\Item\ChildItem-1.txt Owner : PC\alexa Group : PC\alexa AccessToString : PC\Invité Allow Modify, Synchronize BUILTIN\Administrators Allow FullControl NT AUTHORITY\SYSTEM Allow FullControl NT AUTHORITY\Authenticated Users Allow Modify, Synchronize BUILTIN\Users Allow ReadAndExecute, Synchronize Comme on peut l'observer ici, il arrive souvent que les objets deviennent rapidement complexes à créer et intégrer. Service Un autre objet pertinent à savoir manipuler dans un contexte d'automatisation est un service. À l'aide des commandes Start, Stop, Restart et Set, vous pourrez manipuler les différents services en exécution sur votre machine. Il est important pour ce type d'objet de faire la différence entre le nom du service et son nom d'affichage pour bien manipuler ces objets. PS C:\Users\alexa> Get-Service | Where-Object Name -like wuauserv | Select-Object -Property * Name : wuauserv RequiredServices : {rpcss} CanPauseAndContinue : False CanShutdown : False CanStop : False DisplayName : Windows Update DependentServices : {} MachineName : . ServiceName : wuauserv ServicesDependedOn : {rpcss} ServiceHandle : Status : Stopped ServiceType : Win32OwnProcess, Win32ShareProcess StartType : Manual Site : Container : On peut observer ici le service de Windows Update et son type de démarrage qui est manuel. Ce service démarre seulement lorsqu'une recherche ou installation de mises à jour soit déclenchée, que ce soit manuellement ou par tâche planifiée. Manipulation d'objets et commandes communes Get-Help La commande Get-Help peut vous permettre au même titre que "man" en Linux de voir tous les paramètres qu'une commande Powershell peut accepter. À sa première exécution, l'aide sera téléchargée pour une panoplie de modules et sera ensuite disponible même hors ligne. PS C:\WINDOWS\system32> Get-Help Get-Help NOM Get-Help RÉSUMÉ Displays information about PowerShell commands and concepts. SYNTAXE Get-Help [[-Name] ] [-Category {Alias | Cmdlet | Provider | General | FAQ | Glossary | HelpFile | ScriptCommand | Function | Filter | ExternalScript | All | DefaultHelp | Workflow | DscResource | Class | Configuration}] [-Component ] -Detailed [-Functionality ] [-Path ] [-Role ] [] Get-Help [[-Name] ] [-Category {Alias | Cmdlet | Provider | General | FAQ | Glossary | HelpFile | ScriptCommand | Function | Filter | ExternalScript | All | DefaultHelp | Workflow | DscResource | Class | Configuration}] [-Component ] -Examples [-Functionality ] [-Path ] [-Role ] [] Get-Help [[-Name] ] [-Category {Alias | Cmdlet | Provider | General | FAQ | Glossary | HelpFile | ScriptCommand | Function | Filter | ExternalScript | All | DefaultHelp | Workflow | DscResource | Class | Configuration}] [-Component ] [-Full] [-Functionality ] [-Path ] [-Role ] [] Get-Help [[-Name] ] [-Category {Alias | Cmdlet | Provider | General | FAQ | Glossary | HelpFile | ScriptCommand | Function | Filter | ExternalScript | All | DefaultHelp | Workflow | DscResource | Class | Configuration}] [-Component ] [-Functionality ] -Online [-Path ] [-Role ] [] Get-Help [[-Name] ] [-Category {Alias | Cmdlet | Provider | General | FAQ | Glossary | HelpFile | ScriptCommand | Function | Filter | ExternalScript | All | DefaultHelp | Workflow | DscResource | Class | Configuration}] [-Component ] [-Functionality ] -Parameter [-Path ] [-Role ] [] Get-Help [[-Name] ] [-Category {Alias | Cmdlet | Provider | General | FAQ | Glossary | HelpFile | ScriptCommand | Function | Filter | ExternalScript | All | DefaultHelp | Workflow | DscResource | Class | Configuration}] [-Component ] [-Functionality ] [-Path ] [-Role ] -ShowWindow [] La commande peut aussi vous présenter des exemples d'utilisation de la commande recherchée : PS C:\WINDOWS\system32> Get-Help Get-Help -examples NOM Get-Help RÉSUMÉ Displays information about PowerShell commands and concepts. --- Example 1: Display basic help information about a cmdlet --- Get-Help Format-Table Get-Help -Name Format-Table Format-Table -? `Get-Help ` is the simplest and default syntax of `Get-Help` cmdlet. You can omit the Name parameter. The syntax ` -?` works only for cmdlets. New-Object La commande New-Object est généralement utilisée pour déclarer un objet et le stocker dans une variable. On peut considérer les objets en Powershell comme une instanciation de classe en programmation. Un bon exemple de ceci est présent dans la section ACL des types d'objets. Un autre cas d'utilisation commun de cette commande est pour créer un objet de type crédentiels pour éviter de redemander à l'utilisateur ses informations à chaque commande qui les nécessite. Quoi qu'il soit possible de les récupérer avec la commande Get-Credential, si on désire rester dans l'invite de commande ou charger ce type d'objet depuis un fichier, il devient plus simple d'utiliser la commande New-Object de la façon suivante : # Lecture des informations d'authentification $uname = Read-Host -Prompt "Nom d'utilisateur" $pwd = Read-Host -Prompt "Mot de passe" -AsSecureString # Création de l'objet $credential = New-Object System.Management.Automation.PSCredential($uname,$pwd) Quoi qu'il soit possible d'inscrire directement des informations d'authentification dans le script, ces scripts sont généralement lisible par les postes de travail et voir même les utilisateurs. Ceci est fortement déconseillé! New D'autres commandes "New" servent à créer des objets à pour système d'exploitation tel que des utilisateurs locaux, des groupes locaux, des entrées dans le journal d'évènement, etc. Par exemple, la commande New-User ajouterait un utilisateur local à votre système : PS C:\WINDOWS\system32> Get-LocalUser Name Enabled Description ---- ------- ----------- Administrateur False Compte d’utilisateur d’administration Bob True DefaultAccount False Compte utilisateur géré par le système. Invité False Compte d’utilisateur invité WDAGUtilityAccount False Compte d’utilisateur géré et utilisé par le système pour les scénarios Windows Defender A... PS C:\WINDOWS\system32> $pwd = ConvertTo-SecureString "Soleil123" -AsPlainText -Force PS C:\WINDOWS\system32> New-LocalUser -FullName "Ta mère" -Name "rita" -Password $pwd -PasswordNeverExpires -AccountNeverExpires Name Enabled Description ---- ------- ----------- rita True PS C:\WINDOWS\system32> Get-LocalUser Name Enabled Description ---- ------- ----------- Administrateur False Compte d’utilisateur d’administration Bob True DefaultAccount False Compte utilisateur géré par le système. Invité False Compte d’utilisateur invité rita True WDAGUtilityAccount False Compte d’utilisateur géré et utilisé par le système pour les scénarios Windows Defender A... Add Les commandes débutant par Add servent généralement à ajouter des entrées à des systèmes existants. Il peut s'agir de créer des fichiers, des entrées de registre, des utilisateurs dans un domaine Active Directory, des fonctionnalités Windows, des périphériques réseau, etc.  Une de ces commandes pourrait servir à ajouter un utilisateur à un groupe. PS C:\WINDOWS\system32> Get-LocalGroupMember -Group "Administrateurs" ObjectClass Name PrincipalSource ----------- ---- --------------- Utilisateur DESKTOP-D67ERFV\Administrateur Local Utilisateur DESKTOP-D67ERFV\Bob Local PS C:\WINDOWS\system32> Add-LocalGroupMember -Group "Administrateurs" -Member rita PS C:\WINDOWS\system32> Get-LocalGroupMember -Group "Administrateurs" ObjectClass Name PrincipalSource ----------- ---- --------------- Utilisateur DESKTOP-D67ERFV\Administrateur Local Utilisateur DESKTOP-D67ERFV\Bob Local Utilisateur DESKTOP-D67ERFV\rita Local Set Les commandes "Set" sont utilisées pour modifier ou définir un ou des paramètres liés à un objet. Ces commandes remplacent la valeur mentionnée. Une de ces commandes pourrait servir à modifier le mot de passe d'un utilisateur. PS C:\WINDOWS\system32> $pwd = ConvertTo-SecureString "123Soleil" -AsPlainText -Force PS C:\WINDOWS\system32> Set-LocalUser -Name rita -Password $pwd Get Les commandes "Get" servent à consulter les objets système ou les objets de scripts comme les variables. Elles sont souvent utilisées conjointement aux commandes "Select-Object", "Where-Object" et à des commandes d'action telles que les commandes "Set" par du "pipelining". En voici quelques exemples : # Afficher seulement certaines propriétés déterminées par Select-Object de certains objets correspondant à un critère déterminé par Where-Object PS C:\Users\alexa> Get-ChildItem -Path D:\Item | Where-Object Name -like "*.txt" | Select-Object -Property FullName,LastWriteTime FullName LastWriteTime -------- ------------- D:\Item\ChildItem-1.txt 2025-01-18 4:58:47 PM D:\Item\ChildItem-2.txt 2025-01-18 4:38:23 PM # Renommer les fichiers correspondants à ceux correspondant à la requête Where-Object à l'aide de la commande Rename-Item PS C:\Users\alexa> Get-ChildItem -Path D:\Item | Where-Object Name -like "*.txt" | Rename-Item -NewName {$_.name -replace 'ChildItem','ObjetEnfant'} PS C:\Users\alexa> Get-ChildItem -Path D:\Item | Where-Object Name -like "*.txt" | Select-Object -Property FullName,LastWriteTime FullName LastWriteTime -------- ------------- D:\Item\ObjetEnfant-1.txt 2025-01-18 4:58:47 PM D:\Item\ObjetEnfant-2.txt 2025-01-18 4:38:23 PM # Supprimer les fichiers correspondant au filtre Where-Object PS C:\Users\alexa> Get-ChildItem -Path D:\Item | Where-Object Name -like "*.txt" | Remove-Item PS C:\Users\alexa> Get-ChildItem -Path D:\Item Directory: D:\Item Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2025-01-18 4:40 PM Subdirectory Where-Object La commande Where-Object généralement utilisée avec une commande de type "Get" permet de filtrer les résultats affichés en fonction d'un ou plusieurs paramètres de l'objet ainsi que les objets résultants sur lesquels la commande "pipelinée" suivante sera appliquée. Dans l'exemple précédent, le filtre récupérait uniquement les fichiers texte donc l'action de retrait n'a pas affecté la structure de dossiers. Dans l'exemple suivant, seulement Select-Object La commande Select-Object permet de déterminer quels paramètres récupérer ou afficher d'un objet. Dans l'exemple précédent, Seulement le nom complet du fichier ainsi que la dernière date de modification étaient sélectionnés et affichés. Read-Host/Write-Host Ces commandes sont généralement utilisées pour questionner l'utilisateur et stocker la réponse dans une variable et pour écrire de la journalisation dans la console. Manipulation de chemins d'accès pour objets Powershell Par défaut, une session Powershell a accès aux disques locaux (ex. C:\), aux ruches de registres HKLM ( HKEY_LOCAL_MACHINE ), HKCU ( HKEY_CURRENT_USER ), aux partages réseaux accessibles dans le contexte d'exécution de la session ou du script, aux variables d'environnement ( $env: ) et quelques autres ressources. Get-PSDrive La commande Get-PSDrive permet de lister l'ensemble des ressources accessibles par la session/script powershell : PS C:\Users\alexa> Get-PSDrive Name Used (GB) Free (GB) Provider Root ---- --------- --------- -------- ---- A 486.59 530.63 FileSystem \\10.4.20.69\arsenaultja Alias Alias C 877.85 52.87 FileSystem C:\ Cert Certificate \ D 183.83 39.14 FileSystem D:\ E 1510.09 352.93 FileSystem E:\ Env Environment Function Function HKCU Registry HKEY_CURRENT_USER HKLM Registry HKEY_LOCAL_MACHINE M 3705.20 757.75 FileSystem \\10.4.20.69\Media Variable Variable WSMan WSMan New-PSDrive La commande New-PSDrive permet de gagner accès à des ressources supplémentaires, qu'il s'agisse d'un lecteur réseau, d'une ruche de registre ou d'une clé USB, la commande New-PSDrive nous permet d'ajouter un chemin pour accéder à cette ressources à partir d'un script ou d'une session Powershell. Connexion d'une ruche de registre Dans l'exemple suivant, la commande New-PSDrive nous permettra d'accéder à la ruche de registre HKEY_USERS PS C:\Users\alexa> Get-PSDrive | Where-Object Provider -like *Registry* Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- HKCU Registry HKEY_CURRENT_USER HKLM Registry HKEY_LOCAL_MACHINE PS C:\Users\alexa> New-PSDrive -Name HKU -PSProvider Registry -Root HKEY_USERS Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- HKU Registry HKEY_USERS PS C:\Users\alexa> Get-PSDrive | Where-Object Provider -like *Registry* Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- HKCU Registry HKEY_CURRENT_USER HKLM Registry HKEY_LOCAL_MACHINE HKU Registry HKEY_USERS Ajout d'un PSDrive référant à un stockage Tout comme un raccourci, il est possible de créer un PSDrive faisant référence à un stockage existant. Dans l'exemple suivant, nous créons un PSDrive faisant référence au dossier de l'utilisateur nommé "USRDIR". Celui-ci nous permettra d'interagir avec le contenu de C:\Users\[mon utilisateur] en poitant USRDIR:\ plutôt que le chemin complet. PS C:\Users\alexa> Get-PSDrive | Where-Object Provider -like *FileSystem* Name Used (GB) Free (GB) Provider Root ---- --------- --------- -------- ---- A 486.59 530.63 FileSystem \\10.4.20.69\arsenaultja C 877.96 52.76 FileSystem C:\ D 183.83 39.14 FileSystem D:\ E 1510.09 352.93 FileSystem E:\ PS C:\Users\alexa> New-PSDrive -Name USRDIR -PSProvider FileSystem -Root C:\Users\$env:UserName Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- USRDIR 0.00 52.98 FileSystem C:\Users\alexa PS C:\Users\alexa> Get-ChildItem -Path USRDIR: Directory: C:\Users\alexa Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2023-12-28 10:24 PM .android d----- 2023-05-02 7:59 PM .arduinoIDE d----- 2023-12-13 11:13 AM .cache d----- 2025-01-25 4:26 PM .config d----- 2024-11-13 1:33 PM .dbus-keyrings d----- 2025-01-13 3:37 PM .espressif d----- 2024-05-17 10:25 AM .ms-ad d----- 2025-01-26 8:06 PM .ssh d----- 2025-02-05 3:56 PM .VirtualBox d----- 2023-06-11 12:15 PM .vscode d----- 2024-12-30 10:25 PM .zenmap d-r--- 2023-11-18 10:05 PM Contacts d----- 2023-03-12 8:12 PM Documents d-r--- 2025-02-08 12:14 AM Downloads d-r--- 2023-11-18 10:05 PM Favorites d----- 2023-08-06 1:44 PM GNS3 d-r--- 2023-11-18 10:05 PM Links d-r--- 2024-07-15 4:02 PM Music d----- 2024-09-21 2:29 PM node_modules dar--- 2023-11-18 10:00 PM OneDrive d-r--- 2024-09-25 10:01 PM Saved Games d----- 2023-03-12 8:27 PM scoop d-r--- 2025-01-22 9:16 PM Searches d----- 2024-05-13 7:11 AM Sync d-r--- 2025-01-01 5:57 PM Videos d----- 2025-01-26 5:12 PM VirtualBox VMs -a---- 2024-09-22 1:24 AM 15093960192 gns3.ova -a---- 2024-08-15 10:24 AM 131138940 Templates.gns3project Retrait d'un PSDrive Il est aussi possible par la même logique de retirer un PSDrive. PS C:\Users\alexa> Get-PSDrive | Where-Object Provider -like *FileSystem* Name Used (GB) Free (GB) Provider Root ---- --------- --------- -------- ---- A 486.59 530.63 FileSystem \\10.4.20.69\arsenaultja C 877.67 53.05 FileSystem C:\ D 183.83 39.14 FileSystem D:\ E 1510.09 352.93 FileSystem E:\ F 43.70 15.18 FileSystem F:\ G 0.02 0.01 FileSystem G:\ H 3471.56 254.42 FileSystem H:\ J 1471.71 391.29 FileSystem J:\ M 3705.20 757.75 FileSystem \\10.4.20.69\Media USRDIR 0.00 53.05 FileSystem C:\Users\alexa PS C:\Users\alexa> Get-PSDrive | Where-Object Name -like USRDIR | Remove-PSDrive PS C:\Users\alexa> Get-PSDrive | Where-Object Provider -like *FileSystem* Name Used (GB) Free (GB) Provider Root ---- --------- --------- -------- ---- A 486.59 530.63 FileSystem \\10.4.20.69\arsenaultja C 877.67 53.05 FileSystem C:\ D 183.83 39.14 FileSystem D:\ E 1510.09 352.93 FileSystem E:\ F 43.70 15.18 FileSystem F:\ G 0.02 0.01 FileSystem G:\ H 3471.56 254.42 FileSystem H:\ J 1471.71 391.29 FileSystem J:\ M 3705.20 757.75 FileSystem \\10.4.20.69\Media Administration de Windows Par défaut, Powershell vient avec la majorité des commandes nécessaires à l'administration de Windows. À quelques exceptions près (entre autres la gestion de Windows Updates) Utilisateurs et groupes Récupération d'information sur les utilisateurs et groupes locaux Get-LocalUser Une commande simple comme la suivante nous permettrait de vérifier quel utilisateur a un profil local sur une machine ainsi que sa dernière date de connexion. Ce genre d'information est souvent utilisé pour nettoyer les profils locaux d'utilisateurs Active Directory inactifs. PS C:\WINDOWS\system32> Get-LocalUser | Select-Object -Property Name,Enabled,LastLogon Name Enabled LastLogon ---- ------- --------- Administrateur False DefaultAccount False Info True 2025-01-19 19:36:18 Invité False WDAGUtilityAccount False Les informations récupérables par cette commande sont toutefois limitées comme le démontre la commande suivante. PS C:\WINDOWS\system32> Get-LocalUser | Where-Object Name -like Info | Select-Object -Property * AccountExpires : Description : Enabled : True FullName : PasswordChangeableDate : PasswordExpires : UserMayChangePassword : True PasswordRequired : False PasswordLastSet : LastLogon : 2025-01-19 19:36:18 Name : Info SID : S-1-5-21-2716239665-1816042345-2264835360-1001 PrincipalSource : Local ObjectClass : Utilisateur Les dates d'expiration et de changement de mot de passe sont habituellement utilisées pour soit alerter les utilisateurs de l'expiration imminente de leur mot de passe ou encore pour effectuer des recommendations en terme de pratique de cybersécurité. Get-Process Quoi que Get-Process soit en lien avec l'administration du système plutôt que de ses utilisateurs, elle peut être utilisée pour déterminer quel utilisateur a une session active sur un poste de travail en regardant quelles instances d'un processus commun à tous tel que explorer.exe sont en exécution! PS C:\WINDOWS\system32> Get-Process -IncludeUserName | Where-Object Name -like explorer* | Select-Object -Property UserName,StartTime UserName StartTime -------- --------- Vidange-Windose\Administrateur 2025-01-19 19:59:14 Vidange-Windose\Info 2025-01-19 18:08:00 Get-LocalGroup La commande Get-LocalGroup nous permet d'interroger le système au sujet des groupes locaux mais tout comme Get-LocalUsers, la commande n'est pas très bavarde. PS C:\WINDOWS\system32> Get-LocalGroup -Name "Administrateurs" | Select-Object -Property * Description : Les membres du groupe Administrateurs disposent d’un accès complet et illimité à l’ordinateur et au domaine Name : Administrateurs SID : S-1-5-32-544 PrincipalSource : Local ObjectClass : Groupe Get-LocalGroupMember C'est plutôt la commande Get-LocalGroupMember qui nous permet de voir l'association entre les utilisateurs et les groupes. PS C:\WINDOWS\system32> Get-LocalGroupMember -Name "Administrateurs" | Select-Object -Property * Name SID PrincipalSource ObjectClass ---- --- --------------- ----------- Vidange-Windose\Administrateur S-1-5-21-2716239665-1816042345-2264835360-500 Local Utilisateur Vidange-Windose\Info S-1-5-21-2716239665-1816042345-2264835360-1001 Local Utilisateur Pour vérifier la liste des groupes auxquels un utilisateur appartient, il faut boucler dans tous les utilisateurs et tous les groupes avec un script tel que celui-ci. PS C:\WINDOWS\system32> Get-LocalUser | ForEach-Object { >> $user = $_ >> return [PSCustomObject]@{ >> "User" = $user.Name >> "Groups" = Get-LocalGroup | Where-Object { >> $user.SID -in ($_ | Get-LocalGroupMember | Select-Object -ExpandProperty "SID") | Select-Object -Property "Name" >> } >> } >> } User Groups ---- ------ Administrateur {Administrateurs, Administrateurs Hyper-V, Duplicateurs, IIS_IUSRS...} DefaultAccount {Administrateurs, Administrateurs Hyper-V, Duplicateurs, IIS_IUSRS...} Info {Administrateurs, Administrateurs Hyper-V, Duplicateurs, IIS_IUSRS...} Invité {Administrateurs, Administrateurs Hyper-V, Duplicateurs, IIS_IUSRS...} WDAGUtilityAccount {Administrateurs, Administrateurs Hyper-V, Duplicateurs, IIS_IUSRS...} Si un utilisateur était mentionné, la première boucle ne serait pas nécessaire. Gestion des utilisateurs et des groupes locaux Puisque les objets sont simples, leur création et leur gestion l'est aussi. New-LocalUser En se fiant à la commande Get-LocalUser mentionnée plus haut, on peut déterminer les paramètres à saisir pour créer un nouvel utilisateur à l'aide de la commande New-LocalUser. Si un mot de passe doit être précisé, il doit être mentionné sous forme d'une "SecureString". Pour faciliter la structure de ces commandes, on peut stocker le mot de passe dans une variable plutôt que de faire un "one-liner" mais il est aussi possible de tout effectuer dans la même commande. PS C:\WINDOWS\system32> Get-LocalUser Name Enabled Description ---- ------- ----------- Administrateur True Compte d’utilisateur d’administration DefaultAccount False Compte utilisateur géré par le système. Info True Invité False Compte d’utilisateur invité WDAGUtilityAccount False Compte d’utilisateur géré et utilisé par le système pour les scénarios Windows Defender Applic... PS C:\WINDOWS\system32> $pwd = ConvertTo-SecureString -String "bobettes" -AsPlainText -Force PS C:\WINDOWS\system32> New-LocalUser -Name "bob" -FullName "Bobby" -Password $pwd Name Enabled Description ---- ------- ----------- bob True PS C:\WINDOWS\system32> Get-LocalUser Name Enabled Description ---- ------- ----------- Administrateur True Compte d’utilisateur d’administration bob True DefaultAccount False Compte utilisateur géré par le système. Info True Invité False Compte d’utilisateur invité WDAGUtilityAccount False Compte d’utilisateur géré et utilisé par le système pour les scénarios Windows Defender Applic... Set-LocalUser La commande "Set-LocalUser" fonctionne de la même façon que la commande "New-LocalUser" à l'exception que le paramètre "-Name" qui sera mentionné représentera le compte à modifier. PS C:\WINDOWS\system32> Get-LocalUser bob Name Enabled Description ---- ------- ----------- bob True PS C:\WINDOWS\system32> Set-LocalUser -Name bob -Description "Ta mère" PS C:\WINDOWS\system32> Get-LocalUser bob Name Enabled Description ---- ------- ----------- bob True Ta mère New-LocalGroup Encore une fois, en se fiant à Get-LocalGroup, on peut déterminer l'ensemble des paramètres qui seront à mentionner à la création d'un groupe. PS C:\WINDOWS\system32> Get-LocalGroup Name Description ---- ----------- Administrateurs Les membres du groupe Administrateurs disposent d’un accès complet et illimit... Utilisateurs Les utilisateurs ne peuvent pas effectuer de modifications accidentelles ou i... Utilisateurs de gestion à distance Les membres de ce groupe ont accès aux ressources WMI via des protocoles de g... Utilisateurs du Bureau à distance Les membres de ce groupe disposent des droits nécessaires pour ouvrir une ses... Utilisateurs OpenSSH Les membres de ce groupe peuvent se connecter à cet ordinateur à l’aide de SSH. PS C:\WINDOWS\system32> New-LocalGroup -Name "Yo Les Jeunes" -Description "Le club secret à Bob" Name Description ---- ----------- Yo Les Jeunes Le club secret à Bob PS C:\WINDOWS\system32> Get-LocalGroup Name Description ---- ----------- Yo Les Jeunes Le club secret à Bob Administrateurs Les membres du groupe Administrateurs disposent d’un accès complet et illimit... Utilisateurs Les utilisateurs ne peuvent pas effectuer de modifications accidentelles ou i... Utilisateurs de gestion à distance Les membres de ce groupe ont accès aux ressources WMI via des protocoles de g... Utilisateurs du Bureau à distance Les membres de ce groupe disposent des droits nécessaires pour ouvrir une ses... Utilisateurs OpenSSH Les membres de ce groupe peuvent se connecter à cet ordinateur à l’aide de SSH. Set-LocalGroup Tout comme pour Set-LocalUser, Set-LocalGroup utilise le paramètre "Name" pour déterminer le groupe à modifier. PS C:\WINDOWS\system32> Get-LocalGroup -Name "Yo Les Jeunes" Name Description ---- ----------- Yo Les Jeunes Le club secret à Bob PS C:\WINDOWS\system32> Set-LocalGroup -Name "Yo Les Jeunes" -Description "Le club plus tant secret à Bob" PS C:\WINDOWS\system32> Get-LocalGroup -Name "Yo Les Jeunes" Name Description ---- ----------- Yo Les Jeunes Le club plus tant secret à Bob Add-LocalGroupMember Pour attribuer des utilisateurs ou des groupes à un groupe (oui, on peut imbriquer des groupes), la commande Add-LocalGroupMember est aussi simple que de mentionner le nom du membre qui peut être le nom d'un utilisateur ou d'un groupe et de mentionner le groupe auquel assigner le membre. On assigne ici l'utilisateur "bob" à son groupe PS C:\WINDOWS\system32> Get-LocalGroupMember "Yo Les Jeunes" PS C:\WINDOWS\system32> Add-LocalGroupMember -Group "Yo Les Jeunes" -Member "bob" PS C:\WINDOWS\system32> Get-LocalGroupMember "Yo Les Jeunes" ObjectClass Name PrincipalSource ----------- ---- --------------- Utilisateur Vidange-Windose\bob Local Le principe est le même pour imbriquer un groupe dans un autre PS C:\WINDOWS\system32> Add-LocalGroupMember -Group "Yo Les Jeunes" -Member "Invités" PS C:\WINDOWS\system32> Get-LocalGroupMember "Yo Les Jeunes" ObjectClass Name PrincipalSource ----------- ---- --------------- Groupe BUILTIN\Invités Local Utilisateur Vidange-Windose\bob Local Remove-LocalGroupMember Le principe ici est le même que pour l'ajout! PS C:\WINDOWS\system32> Get-LocalGroupMember "Yo Les Jeunes" ObjectClass Name PrincipalSource ----------- ---- --------------- Groupe BUILTIN\Invités Local Utilisateur Vidange-Windose\bob Local PS C:\WINDOWS\system32> Remove-LocalGroupMember -Group "Yo Les Jeunes" -Member "bob" PS C:\WINDOWS\system32> Get-LocalGroupMember "Yo Les Jeunes" ObjectClass Name PrincipalSource ----------- ---- --------------- Groupe BUILTIN\Invités Local Applications et fonctionnalités Récupération d'information sur les applications et fonctionnalités installées et installables Get-AppxPackage La commande Get-AppxPackage vous permet de récupérer les informations sur les applications UWP (Universal Windows Platform) installées sur le système. PS C:\WINDOWS\system32> Get-AppxPackage | Where-Object Name -like *Copilot | Select-Object -Property * Name : Microsoft.Copilot Publisher : CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US PublisherId : 8wekyb3d8bbwe Architecture : X64 ResourceId : Version : 1.24122.48.0 PackageFamilyName : Microsoft.Copilot_8wekyb3d8bbwe PackageFullName : Microsoft.Copilot_1.24122.48.0_x64__8wekyb3d8bbwe InstallLocation : C:\Program Files\WindowsApps\Microsoft.Copilot_1.24122.48.0_x64__8wekyb3d8bbwe IsFramework : False PackageUserInformation : {} IsResourcePackage : False IsBundle : False IsDevelopmentMode : False NonRemovable : False Dependencies : {Microsoft.WindowsAppRuntime.1.6_6000.373.1641.0_x64__8wekyb3d8bbwe, Microsoft.VCLibs.140.00.UWPDesktop_14.0.33728.0_x64__8wekyb3d8bbwe, Microsoft.VCLibs.140.00_14.0.33519.0_x64__8wekyb3d8bbwe, Microsoft.Copilot_1.24122.48.0_neutral_split.language-fr_8wekyb3d8bbwe} IsPartiallyStaged : False SignatureKind : Store Status : Ok Get-AppxProvisionedPackage La commande Get-AppxProvisionedPackage vous permet de récupérer les informations sur les applications UWP (Universal Windows Platform) qui seront déployées pour tous les nouveaux utilisateurs. Cette commande peut aussi être utilisée sur un système hors ligne pour visualiser une image d'installation ou un système qui n'est pas démarré. PS C:\WINDOWS\system32> Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like MSTeams | Select-Object -Property * Version : 24295.605.3225.8804 PackageName : MSTeams_24295.605.3225.8804_x64__8wekyb3d8bbwe DisplayName : MSTeams PublisherId : 8wekyb3d8bbwe MajorVersion : 24295 MinorVersion : 605 Build : 3225 Revision : 8804 Architecture : 9 ResourceId : InstallLocation : C:\Program Files\WindowsApps\MSTeams_24295.605.3225.8804_x64__8wekyb3d8bbwe\AppxManifest.xml Regions : AD;AE;AF;AG;AI;AL;AM;AO;AQ;AR;AS;AT;AU;AW;AX;AZ;BA;BB;BD;BE;BF;BG;BH;BI;BJ;BL;BM;BN;BO;BQ;BR;BS;BT;B V;BW;BY;BZ;CA;CC;CD;CF;CG;CH;CI;CK;CL;CM;CO;CR;CU;CV;CW;CX;CY;CZ;DE;DJ;DK;DM;DO;DZ;EC;EE;EG;ER;ES;ET ;FI;FJ;FK;FM;FO;FR;GA;GB;GD;GE;GF;GG;GH;GI;GL;GM;GN;GP;GQ;GR;GS;GT;GU;GW;GY;HK;HM;HN;HR;HT;HU;ID;IE; IL;IM;IN;IO;IQ;IR;IS;IT;JE;JM;JO;JP;KE;KG;KH;KI;KM;KN;KP;KR;KW;KY;KZ;LA;LB;LC;LI;LK;LR;LS;LT;LU;LV;L Y;MA;MC;MD;ME;MF;MG;MH;MK;ML;MM;MN;MO;MP;MQ;MR;MS;MT;MU;MV;MW;MX;MY;MZ;NA;NC;NE;NF;NG;NI;NL;NO;NP;NR ;NU;NZ;OM;PA;PE;PF;PG;PH;PK;PL;PM;PN;PR;PS;PT;PW;PY;QA;RE;RO;RS;RU;RW;SA;SB;SC;SD;SE;SG;SH;SI;SJ;SK; SL;SM;SN;SO;SR;SS;ST;SV;SX;SY;SZ;TC;TD;TF;TG;TH;TJ;TK;TL;TM;TN;TO;TR;TT;TV;TW;TZ;UA;UG;UM;US;UY;UZ;V A;VC;VE;VG;VI;VN;VU;WF;WS;XK;YE;YT;ZA;ZM;ZW Path : Online : True WinPath : SysDrivePath : RestartNeeded : False LogPath : C:\WINDOWS\Logs\DISM\dism.log ScratchDirectory : LogLevel : WarningsInfo PS F:\> Get-AppxProvisionedPackage -Path E:\mnt | Where-Object DisplayName -like *Outlook* | Select-Object -Property * Version : 1.0.0.0 PackageName : Microsoft.OutlookForWindows_1.0.0.0_neutral__8wekyb3d8bbwe DisplayName : Microsoft.OutlookForWindows PublisherId : 8wekyb3d8bbwe MajorVersion : 1 MinorVersion : 0 Build : 0 Revision : 0 Architecture : 11 ResourceId : InstallLocation : %SYSTEMDRIVE%\Program Files\WindowsApps\Microsoft.OutlookForWindows_1.0.0.0_neutral__8wekyb3d8bbwe\AppxManifest.xml Regions : AD;AE;AF;AG;AI;AL;AM;AO;AQ;AR;AS;AT;AU;AW;AX;AZ;BA;BB;BD;BE;BF;BG;BH;BI;BJ;BL;BM;BN;BO;BQ;BR;BS;BT;B V;BW;BY;BZ;CA;CC;CD;CF;CG;CH;CI;CK;CL;CM;CO;CR;CU;CV;CW;CX;CY;CZ;DE;DJ;DK;DM;DO;DZ;EC;EE;EG;ER;ES;ET ;FI;FJ;FK;FM;FO;FR;GA;GB;GD;GE;GF;GG;GH;GI;GL;GM;GN;GP;GQ;GR;GS;GT;GU;GW;GY;HK;HM;HN;HR;HT;HU;ID;IE; IL;IM;IN;IO;IQ;IR;IS;IT;JE;JM;JO;JP;KE;KG;KH;KI;KM;KN;KP;KR;KW;KY;KZ;LA;LB;LC;LI;LK;LR;LS;LT;LU;LV;L Y;MA;MC;MD;ME;MF;MG;MH;MK;ML;MM;MN;MO;MP;MQ;MR;MS;MT;MU;MV;MW;MX;MY;MZ;NA;NC;NE;NF;NG;NI;NL;NO;NP;NR ;NU;NZ;OM;PA;PE;PF;PG;PH;PK;PL;PM;PN;PR;PS;PT;PW;PY;QA;RE;RO;RS;RU;RW;SA;SB;SC;SD;SE;SG;SH;SI;SJ;SK; SL;SM;SN;SO;SR;SS;ST;SV;SX;SY;SZ;TC;TD;TF;TG;TH;TJ;TK;TL;TM;TN;TO;TR;TT;TV;TW;TZ;UA;UG;UM;US;UY;UZ;V A;VC;VE;VG;VI;VN;VU;WF;WS;XK;YE;YT;ZA;ZM;ZW Path : E:\mnt Online : False WinPath : SysDrivePath : RestartNeeded : False LogPath : C:\WINDOWS\Logs\DISM\dism.log ScratchDirectory : LogLevel : WarningsInfo Get-WindowsCapability La commande Get-WindowsCapability nous permet de récupérer les informations sur les fonctionnalités avancées/optionnelles de Windows telles que les outils d'administration de serveurs à distance, les services s'il s'agit d'un serveur windows où les packs de languages installés et disponibles. Cette commande peut aussi être utilisée sur un système hors ligne pour visualiser une image d'installation ou un système qui n'est pas démarré. PS C:\WINDOWS\system32> Get-WindowsCapability -Online | Where-Object Name -like OpenSSH* | Select-Object -Property * Name : OpenSSH.Client~~~~0.0.1.0 State : Installed Path : Online : True WinPath : SysDrivePath : RestartNeeded : False LogPath : C:\WINDOWS\Logs\DISM\dism.log ScratchDirectory : LogLevel : WarningsInfo Name : OpenSSH.Server~~~~0.0.1.0 State : NotPresent Path : Online : True WinPath : SysDrivePath : RestartNeeded : False LogPath : C:\WINDOWS\Logs\DISM\dism.log ScratchDirectory : LogLevel : WarningsInfo PS F:\> Get-WindowsCapability -Path E:\mnt | Where-Object State -like Installed | Select-Object -Property Name Name ---- App.StepsRecorder~~~~0.0.1.0 Browser.InternetExplorer~~~~0.0.11.0 DirectX.Configuration.Database~~~~0.0.1.0 Edge.Webview2.Platform~~~~ Hello.Face.20134~~~~0.0.1.0 Language.Basic~~~en-US~0.0.1.0 Language.Basic~~~fr-CA~0.0.1.0 Language.Basic~~~fr-FR~0.0.1.0 Language.Handwriting~~~fr-FR~0.0.1.0 Language.OCR~~~en-US~0.0.1.0 Language.OCR~~~fr-CA~0.0.1.0 Language.Speech~~~fr-CA~0.0.1.0 Language.TextToSpeech~~~fr-CA~0.0.1.0 MathRecognizer~~~~0.0.1.0 Media.WindowsMediaPlayer~~~~0.0.12.0 [...] OneCoreUAP.OneSync~~~~0.0.1.0 OpenSSH.Client~~~~0.0.1.0 VBSCRIPT~~~~ Windows.Client.ProjFS~~~~ Windows.DirectoryServices.ADAM.Client.Content~~~~ Windows.HyperV.OptionalFeature.VirtualMachinePlatform.Client.Disabled~~~~ Windows.Kernel.LA57~~~~0.0.1.0 Windows.SimpleTCP.Content~~~~ Windows.Telnet.Client~~~~ Windows.TerminalServices.AppServerClient~~~~ Windows.TFTP.Client~~~~ Windows.WinOcr~~~~ Windows.WorkFolders.Client~~~~ WMIC~~~~ Retrait d'applications et fonctionnalités Remove-AppxPackage La commande Remove-AppxPackage peut être utilisée par elle même en mentionnant le nom du package ou conjointement à Get-AppxPackage pour désinstaller un package installé. PS C:\WINDOWS\system32> Get-AppxPackage | Where-Object Name -like *Copilot | Remove-AppxPackage PS C:\WINDOWS\system32> Get-AppxPackage | Where-Object Name -like *Copilot PS C:\WINDOWS\system32> Remove-AppxProvisionedPackage La commande Remove-AppxProvisionedPackage retire le(s) package(s) de la liste de ceux qui seront installé pour les nouveaux utilisateurs. PS F:\> Get-AppxProvisionedPackage -Path E:\mnt | Where-Object DisplayName -like *Outlook* | Remove-AppxProvisionedPackage Path : E:\mnt Online : False RestartNeeded : False PS F:\> Get-AppxProvisionedPackage -Path E:\mnt | Where-Object DisplayName -like *Outlook* PS F:\> Ces deux commandes pourraient être utilisées en conjonction avec un tableau pour désinstaller une liste d'application dans un script de préparation de nouveau système. $list = @() $list += '*Teams' $list += '*BingSearch' $list += '*BingNews' $list += '*MicrosoftOfficeHub*' $list += '*Game*' $list += '*Gaming*' $list += '*Solitaire*' $list += '*Help*' $list += '*Hub' $list += '*QuickAssist*' Foreach ($i in $list) { Get-AppxPackage | Where-Object Name -like $i | Remove-AppxPackage -AllUsers } Ajout d'applications et fonctionnalités Quoi qu'il soit parfois difficile de trouver les packages .msix et .msixbundle, le site suivant permet de générer des liens de téléchargement pour les fichiers d'installation des applications du Microsoft Store. https://store.rg-adguard.net/ Add-AppxProvisionedPackage Cette commande est utilisée pour déployer une application à tous les utilisateurs d'un système ou pour injecter une application dans une image d'installation de Windows. Les commandes suivantes ajouteraient Microsoft PC Manager et sa dépendance à une image d'installation de Windows décapsulée avec DISM. PS F:\> Add-AppxProvisionedPackage -PackagePath F:\Microsoft.WindowsAppRuntime.1.5_5001.373.1736.0_x64__8wekyb3d8bbwe.Msix -Path E:\mnt -SkipLicense Path : E:\mnt Online : False RestartNeeded : False PS F:\> Add-AppxProvisionedPackage -PackagePath F:\Microsoft.MicrosoftPCManager_3.14.18.0_neutral_~_8wekyb3d8bbwe.Msixbundle -Path E:\mnt -SkipLicense Path : E:\mnt Online : False RestartNeeded : False PS F:\> Get-AppxProvisionedPackage -Path E:\mnt | Where-Object DisplayName -like *Manager* DisplayName : Microsoft.MicrosoftPCManager Version : 3.14.18.0 Architecture : neutral ResourceId : ~ PackageName : Microsoft.MicrosoftPCManager_3.14.18.0_neutral_~_8wekyb3d8bbwe Regions : Les commandes suivantes installeraient Microsoft PC Manager et sa dépendance pour tous les utilisateurs d'un système sur lequel les commandes seraient exécutées. PS C:\Users\Info\Desktop> Add-AppxProvisionedPackage -PackagePath .\Microsoft.WindowsAppRuntime.1.5_5001.373.1736.0_x64__8wekyb3d8bbwe.Msix -Online -SkipLicense Path : Online : True RestartNeeded : False PS C:\Users\Info\Desktop> Add-AppxProvisionedPackage -PackagePath .\Microsoft.MicrosoftPCManager_3.14.18.0_neutral_~_8wekyb3d8bbwe.Msixbundle -Online -SkipLicense Path : Online : True RestartNeeded : False PS C:\Users\Info\Desktop> Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like *Manager* DisplayName : Microsoft.MicrosoftPCManager Version : 3.14.18.0 Architecture : neutral ResourceId : ~ PackageName : Microsoft.MicrosoftPCManager_3.14.18.0_neutral_~_8wekyb3d8bbwe Regions : Add-AppxPackage La commande suivante installerait Spotify et ses dépendances pour l'utilisateur exécutant la commande. PS C:\Users\Info\desktop> Get-Item -Path .\Spotify\* | Add-AppxPackage PS C:\Users\Info\desktop> Get-AppxPackage | Where-Object Name -like *Spotify* | Select-Object -Property * Name : SpotifyAB.SpotifyMusic Publisher : CN=453637B3-4E12-4CDF-B0D3-2A3C863BF6EF PublisherId : zpdnekdrzrea0 Architecture : X64 ResourceId : Version : 1.255.235.0 PackageFamilyName : SpotifyAB.SpotifyMusic_zpdnekdrzrea0 PackageFullName : SpotifyAB.SpotifyMusic_1.255.235.0_x64__zpdnekdrzrea0 InstallLocation : C:\Program Files\WindowsApps\SpotifyAB.SpotifyMusic_1.255.235.0_x64__zpdnekdrzrea0 IsFramework : False PackageUserInformation : {} IsResourcePackage : False IsBundle : False IsDevelopmentMode : False NonRemovable : False Dependencies : {Microsoft.WindowsAppRuntime.1.2_2000.802.31.0_x64__8wekyb3d8bbwe, Microsoft.VCLibs.140.00_14.0.33519.0_x64__8wekyb3d8bbwe, Microsoft.VCLibs.140.00.UWPDesktop_14.0.33728.0_x64__8wekyb3d8bbwe} IsPartiallyStaged : False SignatureKind : Store Status : Ok Registre Windows Powershell traite les entrées de registre au même titre que les fichiers et peuvent donc être récupérés, créés et modifiés avec les mêmes commandes que les fichiers. Plutôt que de viser une lettre de lecteur et un répertoire tel que C:\, la "ruche" ou le registre sera visé avec un identifiant comme HKLM:\ Accès aux ruches du registre Windows Par défaut, seulement HKCU ( HKEY_CURRENT_USER ) et HKLM ( HKEY_LOCAL_MACHINE ) sont accessibles. Puisque le registre est traité au même titre qu'un lecteur, il est possible d'observer ce qui est accessible dans une session ou un script powershell ainsi que de gagner accès à d'autres ruches en manipulant les PSDrives. Get-PSDrive Pour observer la liste des ruches de registres accessibles, il est possible d'utiliser la commande "Get-PSDrive" et de filtrer les résultats par "Provider" (type d'objet à manipuler). PS C:\WINDOWS\system32> Get-PSDrive | Where-Object Provider -like *Registry* Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- HKCU Registry HKEY_CURRENT_USER HKLM Registry HKEY_LOCAL_MACHINE New-PSDrive Il est possible de gagner accès aux autres ruches telles que HKCR ( HKEY_CLASSES_ROOT ) et HKU ( HKEY_USERS ) en les ajoutant comme PSDrive. PS C:\WINDOWS\system32> New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- HKU Registry HKEY_USERS PS C:\WINDOWS\system32> New-PSDrive -PSProvider Registry -Name HKCR -Root HKEY_CLASSES_ROOT Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- HKCR Registry HKEY_CLASSES_ROOT PS C:\WINDOWS\system32> Get-PSDrive | Where-Object Provider -like *Registry* Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- HKCR Registry HKEY_CLASSES_ROOT HKCU Registry HKEY_CURRENT_USER HKLM Registry HKEY_LOCAL_MACHINE HKU Registry HKEY_USERS Récupération d'information du registre Get-ItemProperty La commande Get-ItemProperty est utilisée pour récupérer l'information sur une valeur unique dans une clé. L'exemple suivant afficherait l'état du paramètre masquant les extensions de fichier connus dans l'explorateur Windows. PS C:\Users\alexa> Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "HideFileExt" HideFileExt : 0 PSPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer \Advanced PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer PSChildName : Advanced PSDrive : HKCU PSProvider : Microsoft.PowerShell.Core\Registry Sa valeur étant 0, les extensions de fichiers connues sont donc affichées dans l'explorateur de fichiers. Elle peut être utilisée sur une clé sans mentionner de valeur pour afficher toutes les valeurs assignées à une clé. L'exemple suivant afficherait l'ensemble des applications qui démarreront à la connexion de l'utilisateur concerné. PS C:\Users\alexa> Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" | Select-Object -Property * Discord : "C:\Users\alexa\AppData\Local\Discord\Update.exe" --processStart Discord.exe Steam : "C:\Program Files (x86)\Steam\steam.exe" -silent electron.app.Base Camp™ : C:\Program Files (x86)\Mountain Base Camp\Base Camp.exe --process-start-args --hidden com.squirrel.Teams.Teams : C:\Users\alexa\AppData\Local\Microsoft\Teams\Update.exe --processStart "Teams.exe" --process-start-args "--system-initiated" EADM : "C:\Program Files\Electronic Arts\EA Desktop\EA Desktop\EALauncher.exe" -silent EpicGamesLauncher : "C:\Program Files (x86)\Epic Games\Launcher\Portal\Binaries\Win64\EpicGamesLauncher.exe" -silent -launchcontext=boot HASS.Agent : C:\Users\alexa\AppData\Roaming\LAB02 Research\HASS.Agent\HASS.Agent.exe PSPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVers ion\Run PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVers ion PSChildName : Run PSDrive : HKCU PSProvider : Microsoft.PowerShell.Core\Registry Get-ChildItem La commande Get-ChildItem permet de récupérer tous les éléments contenus dans une clé de registre et peut être exécutée récursivement pour aussi afficher les sous-clés. L'exemple suivant afficherait toutes les clés contenant les paramètres associés au logiciel 7-Zip ainsi que les valeurs associées à ces clés. PS C:\Users\alexa> Get-ChildItem -Path "HKCU:\Software\7-Zip" -Recurse Hive: HKEY_CURRENT_USER\Software\7-Zip Name Property ---- -------- FM FolderShortcuts : {} FolderHistory : {73, 0, 58, 0...} PanelPath0 : I:\Documents\420-153-AT - Conception\A2024\TP2_A24\ FlatViewArc0 : 0 PanelPath1 : FlatViewArc1 : 0 ListMode : 771 Position : {162, 1, 0, 0...} Panels : {1, 0, 0, 0...} ShowDots : 1 ShowRealFileIcons : 1 FullRow : 1 ShowGrid : 0 SingleClick : 0 AlternativeSelection : 0 ShowSystemMenu : 1 CopyHistory : {70, 0, 58, 0...} Hive: HKEY_CURRENT_USER\Software\7-Zip\FM Name Property ---- -------- Columns RootFolder : {1, 0, 0, 0...} 7-Zip.zip : {1, 0, 0, 0...} FSFolder : {1, 0, 0, 0...} 7-Zip.Rar5 : {1, 0, 0, 0...} 7-Zip.Rar : {1, 0, 0, 0...} 7-Zip.gzip : {1, 0, 0, 0...} 7-Zip.Compound : {1, 0, 0, 0...} 7-Zip.7z : {1, 0, 0, 0...} 7-Zip.tar : {1, 0, 0, 0...} 7-Zip.Nsis : {1, 0, 0, 0...} Hive: HKEY_CURRENT_USER\Software\7-Zip Name Property ---- -------- Options MenuIcons : 1 CascadedMenu : 1 ContextMenu : 2147487782 Création et définition de valeurs dans le registre New-ItemProperty La commande Set-ItemProperty permet de définir une valeur associée à une clé. La commande suivante activerait l'affichage avancé à l'écran de connexion d'un utilisateur (chaque étape plutôt que seulement "Veuillez patienter"). New-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System" -Name "VerboseStatus" -Value 1 New-Item La commande New-Item permet la création de nouvelles clés. Accompagné du paramètre -Force, la commande créera l'ensemble de la hiérarchie jusqu'à l'item créé mais si la clé était déjà existante, elle sera vidée. Il est donc généralement préférable de s'assurer de son existance avant de tenter sa création. Ceci peut facilement être réalisé à l'aide d'un "try catch" comme suit. Dans cet exemple, _Lab n'existe pas. PS C:\Users\alexa> try { >> Get-Item -Path "HKCU:\_Lab" -ErrorAction Stop >> } >> catch { >> New-Item -Path "HKCU:\_Lab" -Force >> } Hive: HKEY_CURRENT_USER Name Property ---- -------- _Lab Dans cet exemple, _Lab existe et contient la valeur "Soleil123" nommée "Password". L'item n'est par conséquent pas remplacé. PS C:\Users\alexa> try { >> Get-Item -Path "HKCU:\_Lab" -ErrorAction Stop >> } >> catch { >> New-Item -Path "HKCU:\_Lab" -Force >> } Hive: HKEY_CURRENT_USER Name Property ---- -------- _Lab Password : Soleil123 Set-ItemProperty La commande Set-ItemProperty permet de modifier une valeur assignée à une clé. Il est possible d'exécuter ceci conjointement à une vérification de l'existance de la clé pour s'assurer de la réussite de l'exécution de la commande comme suit. Dans cet exemple, le bouton de Windows Copilot sera retirée de la barre des tâches de l'utilisateur concerné. $registryPath = "HKCU:\Software\Policies\Microsoft\Windows\WindowsCopilot" $registryValueName = "ShowCopilotButton" $registryValueData = 0 try { Get-Item -Path $registryPath -ErrorAction Stop } catch { New-Item -Path $registryPath -Force } Set-ItemProperty -Path $registryPath -Name $registryValueName -Value $registryValueData Modules supplémentaires Il est possible d'ajouter des fonctionnalités à Powershell à l'aide de modules supplémentaires. Certains modules sont inclus avec des fonctionnalités avancées de Windows, d'autres sont disponibles sur Le PowerShell Gallery (https://www.powershellgallery.com/) Mises à jour Windows Installation Le module "PSWindowsUpdate" permet de facilement gérer, automatiser et déclencher à distance des tâches en lien avec les mises à jour Windows. L'installation du module se déroule comme suit et doit être effectuée dans un terminal Powershell exécuté en tant qu'administrateur. PS C:\WINDOWS\system32> Install-Module PSWindowsUpdate Le fournisseur NuGet est requis pour continuer PowerShellGet requiert le fournisseur NuGet, version 2.8.5.201 ou ultérieure, pour interagir avec les référentiels NuGet. Le fournisseur NuGet doit être disponible dans « C:\Program Files\PackageManagement\ProviderAssemblies » ou « C:\Users\Info\AppData\Local\PackageManagement\ProviderAssemblies ». Vous pouvez également installer le fournisseur NuGet en exécutant la commande « Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force ». Voulez-vous que PowerShellGet installe et importe le fournisseur NuGet maintenant ? [O] Oui [N] Non [S] Suspendre [?] Aide (la valeur par défaut est « O ») : O Référentiel non approuvé Vous installez les modules à partir d'un référentiel non approuvé. Si vous approuvez ce référentiel, modifiez sa valeur InstallationPolicy en exécutant l'applet de commande Set-PSRepository. Voulez-vous vraiment installer les modules à partir de PSGallery ? [O] Oui [T] Oui pour tout [N] Non [U] Non pour tout [S] Suspendre [?] Aide (la valeur par défaut est « N ») : T PS C:\WINDOWS\system32> Une fois installé, le module peut être importé et sera prêt à l'utilisation à l'aide de la commande suivante : #Permettre l'exécution de scripts Set-ExecutionPolicy Unrestricted #Importation du module installé Import-Module PSWindowsUpdate Utilisation Toutes les commandes supportent l'argument "-ComputerName" pour exécuter ces actions sur un ordinateur distant. Si l'argument n'est pas mentionné, les actions seront entreprise sur la machine exécutant la commande. Get-WindowsUpdate La commande Get-WindowsUpdate permet de rechercher des mises à jour Windows disponibles de façon granulaire ou globale. Sans paramètres, elle cherchera toutes les mises à jour disponible. Dans le cas suivante, une mise à jour de pilote d'affichage est disponible. PS C:\WINDOWS\system32> Get-WindowsUpdate -Verbose COMMENTAIRES : VIDANGE-WINDOSE (2025-01-19 15:45:21): Connecting to Windows Update server. Please wait... COMMENTAIRES : Found [1] Updates in pre search criteria COMMENTAIRES : Found [1] Updates in post search criteria ComputerName Status KB Size Title ------------ ------ -- ---- ----- VIDANGE-W... ------- 24MB Broadcom Inc. - Display - 9.17.8.9 Il est ensuite possible de procéder au téléchargement sans installer la mise à jour si on mentionne le paramètre -Download PS C:\WINDOWS\system32> Get-WindowsUpdate -Download -Verbose COMMENTAIRES : VIDANGE-WINDOSE (2025-01-19 15:51:08): Connecting to Windows Update server. Please wait... COMMENTAIRES : Found [1] Updates in pre search criteria COMMENTAIRES : Found [1] Updates in post search criteria Confirmer Êtes-vous sûr de vouloir effectuer cette action ? Opération « (2025-01-19 15:51:15) Broadcom Inc. - Display - 9.17.8.9[24MB] » en cours sur la cible « VIDANGE-WINDOSE ». [O] Oui [T] Oui pour tout [N] Non [U] Non pour tout [S] Suspendre [?] Aide (la valeur par défaut est « O ») : O X ComputerName Result KB Size Title - ------------ ------ -- ---- ----- 1 VIDANGE-W... Accepted 24MB Broadcom Inc. - Display - 9.17.8.9 COMMENTAIRES : Accepted [1] Updates ready to Download 2 VIDANGE-W... Downloaded 24MB Broadcom Inc. - Display - 9.17.8.9 COMMENTAIRES : Downloaded [1] Updates ready to Install On peut ensuite observer que le statut de la mise à jour a changé et qu'elle indique maintenant "D" pour indiquer qu'elle est téléchargée. PS C:\WINDOWS\system32> Get-WindowsUpdate -Verbose COMMENTAIRES : VIDANGE-WINDOSE (2025-01-19 15:51:53): Connecting to Windows Update server. Please wait... COMMENTAIRES : Found [1] Updates in pre search criteria COMMENTAIRES : Found [1] Updates in post search criteria ComputerName Status KB Size Title ------------ ------ -- ---- ----- VIDANGE-W... -D----- 24MB Broadcom Inc. - Display - 9.17.8.9 Il est maintenant possible de déclencher l'installation de la mise à jour avec le paramètre -Install PS C:\WINDOWS\system32> Get-WindowsUpdate -Install -Verbose COMMENTAIRES : VIDANGE-WINDOSE (2025-01-19 15:55:03): Connecting to Windows Update server. Please wait... COMMENTAIRES : Found [1] Updates in pre search criteria COMMENTAIRES : Found [1] Updates in post search criteria Confirmer Êtes-vous sûr de vouloir effectuer cette action ? Opération « (2025-01-19 15:55:09) Broadcom Inc. - Display - 9.17.8.9[24MB] » en cours sur la cible « VIDANGE-WINDOSE ». [O] Oui [T] Oui pour tout [N] Non [U] Non pour tout [S] Suspendre [?] Aide (la valeur par défaut est « O ») : T X ComputerName Result KB Size Title - ------------ ------ -- ---- ----- 1 VIDANGE-W... Accepted 24MB Broadcom Inc. - Display - 9.17.8.9 COMMENTAIRES : Accepted [1] Updates ready to Download 2 VIDANGE-W... Downloaded 24MB Broadcom Inc. - Display - 9.17.8.9 COMMENTAIRES : Downloaded [1] Updates ready to Install 3 VIDANGE-W... Installed 24MB Broadcom Inc. - Display - 9.17.8.9 COMMENTAIRES : Installed [1] Updates Get-WUHistory La commande Get-WUHistory permet de consulter l'historique des mises à jour Windows installées. Le paramètre -MaxDate permet d'établir une date limite à partir de laquelle les résultats affichés s'arrêteront. PS C:\WINDOWS\system32> Get-WUHistory ComputerName Operationname Result Date Title ------------ ------------- ------ ---- ----- VIDANGE-W... Installation Succeeded 2025-01-19 15:55:22 Broadcom Inc. - Display - 9.17.8.9 VIDANGE-W... Installation Succeeded 2025-01-19 15:37:32 Mise à jour de la sélection disjointe pour Microsoft Defender ... VIDANGE-W... Installation Succeeded 2025-01-19 13:40:24 2025-01 Mise à jour cumulative pour Windows 11 Version 24H2 po... VIDANGE-W... Installation Succeeded 2025-01-19 13:24:43 2025-01 Mise à jour cumulative pour .NET Framework 3.5 pour et... VIDANGE-W... Installation Succeeded 2025-01-19 13:23:14 Outil de suppression de logiciels malveillants Windows x64 - v... VIDANGE-W... Installation Succeeded 2025-01-19 13:15:38 Mise à jour de la sélection disjointe pour Microsoft Defender ... VIDANGE-W... Installation Succeeded 2025-01-07 20:10:45 Mise à jour pour Microsoft Defender Antivirus plateforme anti-... VIDANGE-W... Installation Succeeded 2025-01-07 19:20:46 2024-12 Mise à jour cumulative pour Windows 11 Version 24H2 po... VIDANGE-W... Installation Succeeded 2025-01-07 18:58:18 2024-11 Mise à jour cumulative pour .NET Framework 3.5 pour et... VIDANGE-W... Installation Succeeded 2025-01-07 18:55:23 Mise à jour de la sélection disjointe pour Microsoft Defender ... VIDANGE-W... Installation Succeeded 2025-01-07 18:54:32 Outil de suppression de logiciels malveillants Windows x64 - v... VIDANGE-W... Installation Succeeded 2025-01-07 18:51:58 Mise à jour pour Windows Security platform - KB5007651 (versio... VIDANGE-W... Installation Succeeded 2025-01-07 18:32:59 Broadcom Inc. - System - 9.8.18.1 VIDANGE-W... Installation Succeeded 2025-01-07 18:27:25 2024-11 Mise à jour pour Windows 11 Version 24H2 sur systèmes ... Remove-WindowsUpdate Vous avez effectué une mise à jour et quelque chose dans votre système a cassé? Pas de panique, vous pouvez désinstaller une mise à jour avec la commande "Remove-WindowsUpdate"! Dans l'exemple suivant, nous désinstallerons une mise à jour pour la plateforme .NET 3.5 : PS C:\WINDOWS\system32> Get-WindowsUpdate -IsInstalled ComputerName Status KB Size Title ------------ ------ -- ---- ----- VIDANGE-W... -DI---- KB4052623 5MB Mise à jour pour la plateforme de logiciels anti-programme malveillant de W... VIDANGE-W... -DI---- KB4052623 13MB Mise à jour pour Microsoft Defender Antivirus plateforme anti-programme mal... VIDANGE-W... -DI---- KB5007651 38MB Mise à jour pour Windows Security platform - KB5007651 (version 10.0.27703.... VIDANGE-W... -DI---- KB890830 76MB Outil de suppression de logiciels malveillants Windows x64 - v5.131 (KB890830) VIDANGE-W... -DI---- KB2267602 1GB Mise à jour de la sélection disjointe pour Microsoft Defender Antivirus – 2... VIDANGE-W... -DI---- KB5049622 142MB 2025-01 Mise à jour cumulative pour .NET Framework 3.5 pour et 4.8.1 pour W... VIDANGE-W... -DI---- KB5050009 86GB 2025-01 Mise à jour cumulative pour Windows 11 Version 24H2 pour les systèm... PS C:\WINDOWS\system32> Remove-WindowsUpdate -KBArticleID KB5049622 Confirmer Êtes-vous sûr de vouloir effectuer cette action ? Opération « (2025-01-19 16:23:30) Remove (WUApi) Windows Update: 2025-01 Mise à jour cumulative pour .NET Framework 3.5 pour et 4.8.1 pour Windows 11, version 24H2 pour les systèmes x64 (KB5049622) » en cours sur la cible « VIDANGE-WINDOSE ». [O] Oui [T] Oui pour tout [N] Non [U] Non pour tout [S] Suspendre [?] Aide (la valeur par défaut est « O ») : O Hide-WindowsUpdate La commande Hide-WindowsUpdate permet de masquer certaines mises à jour pour éviter leur installation. Dans l'exemple suivant, nous masquerons une mise à jour de Windows Defender : PS C:\WINDOWS\system32> Hide-WindowsUpdate -KBArticleID KB2267602 Confirmer Êtes-vous sûr de vouloir effectuer cette action ? Opération « (2025-01-19 16:21:07) Hide Mise à jour de la sélection disjointe pour Microsoft Defender Antivirus – 2267602 Ko (version 1.421.1442.0) – Canal actuel (large)[1GB] » en cours sur la cible « VIDANGE-WINDOSE ». [O] Oui [T] Oui pour tout [N] Non [U] Non pour tout [S] Suspendre [?] Aide (la valeur par défaut est « O ») : T ComputerName Status KB Size Title ------------ ------ -- ---- ----- VIDANGE-W... ---H-- KB2267602 1GB Mise à jour de la sélection disjointe pour Microsoft Defender Antivirus – 2... Le statut "H" indique que la mise à jour est masquée et ne sera pas installée. Winget Winget est un module permettant l'installation automatisée d'applications disponibles dans le répertoire logiciel https://winget.run/ . Il est à noter que la majorité des applications seront installées dans le %AppData% de l'utilisateur installant un logiciel. Ces logiciels sont donc unique à chaque utilisateur impliquant que si 20 utilisateurs du poste de travail désirent la même application, elle sera installée en 20 copies sur le poste. On réfère à ce type d'installation à "per-user" ou par utilisateur. La majorité des gestionnaires de logiciels du genre pour Windows fonctionnent de cette façon, l'avantage étant qu'un utilisateur n'a pas besoin de droits d'administrateur pour installer ces logiciels. Cette méthode peut être une belle façon d'automatiser le déploiement logiciel sur un ordinateur personnel à un seul utilisateur puisqu'une simple tâche planifiée exécutant "winget update" et "winget upgrade --all" met à jour tous les logiciels pour l'utilisateur. Il peut être installé en tant que module Powershell de la façon suivante (en tant qu'administrateur) : PS C:\WINDOWS\system32> Install-Module Microsoft.WinGet.Client Le fournisseur NuGet est requis pour continuer PowerShellGet requiert le fournisseur NuGet, version 2.8.5.201 ou ultérieure, pour interagir avec les référentiels NuGet. Le fournisseur NuGet doit être disponible dans « C:\Program Files\PackageManagement\ProviderAssemblies » ou « C:\Users\Info\AppData\Local\PackageManagement\ProviderAssemblies ». Vous pouvez également installer le fournisseur NuGet en exécutant la commande « Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force ». Voulez-vous que PowerShellGet installe et importe le fournisseur NuGet maintenant ? [O] Oui [N] Non [S] Suspendre [?] Aide (la valeur par défaut est « O ») : O Référentiel non approuvé Vous installez les modules à partir d'un référentiel non approuvé. Si vous approuvez ce référentiel, modifiez sa valeur InstallationPolicy en exécutant l'applet de commande Set-PSRepository. Voulez-vous vraiment installer les modules à partir de PSGallery ? [O] Oui [T] Oui pour tout [N] Non [U] Non pour tout [S] Suspendre [?] Aide (la valeur par défaut est « N ») : T PS C:\WINDOWS\system32> À sa première utilisation, vous devrez accepter les termes et conditions du module comme suit. La commande "update" au même titre que pour "apt" sous Ubuntu et Debian vérifie les mises à jour disponibles et la commande "upgrade --all" permet d'appliquer les mises à jour disponibles. Certaines mises à jour seront silencieuses en arrière plan et d'autres afficheront une fenêtre de progression mais tout sera toujours automatisé. PS C:\WINDOWS\system32> winget update The `msstore` source requires that you view the following agreements before using. Terms of Transaction: https://aka.ms/microsoft-store-terms-of-transaction The source requires the current machine's 2-letter geographic region to be sent to the backend service to function properly (ex. "US"). Do you agree to all the source agreements terms? [Y] Yes [N] No: Y Name Id Version Available Source ----------------------------------------------------------------------------------------------------------------------- Microsoft Visual C++ 2015-2022 Redistribut… Microsoft.VCRedist.2015+.x86 14.36.32532.0 14.42.34433.0 winget Microsoft Visual C++ 2015-2022 Redistribut… Microsoft.VCRedist.2015+.x64 14.36.32532.0 14.42.34433.0 winget Microsoft OneDrive Microsoft.OneDrive 24.226.1110.0004 24.244.1204.0003 winget Microsoft Teams Microsoft.Teams 24295.605.3225.8804 24335.208.3315.1951 winget App Installer Microsoft.AppInstaller 1.24.25199.0 1.24.25200.0 winget Power Automate Microsoft.DevHome 0.0.0.0 0.1901.687.0 winget 6 upgrades available. PS C:\WINDOWS\system32> winget upgrade --all Name Id Version Available Source ----------------------------------------------------------------------------------------------------------------------- Microsoft Visual C++ 2015-2022 Redistribut… Microsoft.VCRedist.2015+.x86 14.36.32532.0 14.42.34433.0 winget Microsoft Visual C++ 2015-2022 Redistribut… Microsoft.VCRedist.2015+.x64 14.36.32532.0 14.42.34433.0 winget Microsoft OneDrive Microsoft.OneDrive 24.226.1110.0004 24.244.1204.0003 winget Microsoft Teams Microsoft.Teams 24295.605.3225.8804 24335.208.3315.1951 winget App Installer Microsoft.AppInstaller 1.24.25199.0 1.24.25200.0 winget Power Automate Microsoft.DevHome 0.0.0.0 0.1901.687.0 winget 6 upgrades available. Installing dependencies: This package requires the following dependencies: - Packages Microsoft.VCLibs.Desktop.14 [>= 14.0.33728.0] Microsoft.UI.Xaml.2.8 [>= 8.2310.30001.0] Microsoft.WindowsAppRuntime.1.5 (1/6) Found Microsoft Visual C++ 2015-2022 Redistributable (x86) [Microsoft.VCRedist.2015+.x86] Version 14.42.34433.0 Starting package install... Successfully installed #[...plein de barres de chargement] La commande "winget --help" vous aidera à trouver les arguments nécessaires à l'utilisation du module : PS C:\WINDOWS\system32> winget --help Gestionnaire de package Windows v1.9.25200 Copyright (c) Microsoft Corporation. Tous droits réservés. L’utilitaire de ligne de commande winget permet d’installer des applications et d’autres packages à partir de la ligne de commande. Utilisation : winget [] [] Les commandes suivantes sont disponibles : install Installe le package donné show Affiche des informations sur un package source Gérer les sources des packages search Rechercher et afficher des informations de base sur les packages list Afficher les packages installés upgrade Affiche et effectue les mises à niveau disponibles. uninstall Désinstallation du paquet donné hash Assistant pour le hachage des fichiers d’installation validate Valide un fichier manifeste settings Ouvrir les paramètres ou définir les paramètres d’administrateur features Affiche le statut des fonctionnalités expérimentales export Exporte une liste des packages installés import Installe tous les packages dans un fichier pin Gérer les broches de package configure Configure le système dans un état souhaité download Télécharge le programme d’installation à partir d’un package donné repair Répare le package sélectionné La commande "winget search [application]" vous permettrait de vérifier si une application est disponible sur leur répertoire. Dans l'exemple suivant,  PS C:\WINDOWS\system32> winget search VSCode Nom ID Version Correspondance Source ----------------------------------------------------------------------------------------------------------------------- Microsoft Visual Studio Code Microsoft.VisualStudioCode 1.96.4 Moniker: vscode winget Codium Alex313031.Codium 1.89.1.24132 Tag: vscode winget TheiaBlueprint EclipseFoundation.TheiaBlueprint 1.44.0 Tag: vscode winget TheiaIDE EclipseFoundation.TheiaIDE 1.54.0 Tag: vscode winget Huawei QuickApp IDE Huawei.QuickAppIde 14.0.1 Tag: vscode winget DevPod LoftLabs.DevPod 0.6.9 Tag: vscode winget VSCodium VSCodium.VSCodium 1.96.4.25017 Tag: vscode winget VSCodium Insiders VSCodium.VSCodium.Insiders 1.97.0.24352 Tag: vscode winget vscli michidk.vscli 1.1.0 Tag: vscode winget Upgit pluveto.Upgit 0.2.18 Tag: vscode winget MrCode zokugun.MrCode 1.82.0.23253 Tag: vscode winget Microsoft Visual Studio Code CLI Microsoft.VisualStudioCode.CLI 1.96.4 Moniker: vscode-cli winget Microsoft Visual Studio Code Insi… Microsoft.VisualStudioCode.Insiders 1.97.0 Moniker: vscode-insiders winget Microsoft Visual Studio Code Insi… Microsoft.VisualStudioCode.Insider… 1.97.0 Moniker: vscode-insiders-cli winget markdown-oxide FelixZeller.markdown-oxide 0.23.1 Tag: vscode-language-support winget Connaissant maintenant l'ID de l'application recherchée, nous pouvons maintenant l'installer! PS C:\WINDOWS\system32> winget install Microsoft.VisualStudioCode Trouvé Microsoft Visual Studio Code [Microsoft.VisualStudioCode] Version 1.96.4 La licence d’utilisation de cette application vous est octroyée par son propriétaire. Microsoft n’est pas responsable des paquets tiers et n’accorde pas de licences à ceux-ci. Téléchargement en cours https://vscode.download.prss.microsoft.com/dbazure/download/stable/cd4ee3b1c348a13bafd8f9ad8060705f6d4b9cba/VSCodeUserSetup-x64-1.96.4.exe ██████████████████████████████ 100 MB / 100 MB Le code de hachage de l’installation a été vérifié avec succès Démarrage du package d’installation... Merci de patienter. Installé correctement # Redémarrage du shell pour recharger les variables d'environnement PS C:\Users\Info> (Get-Command code).path C:\Users\Info\AppData\Local\Programs\Microsoft VS Code\bin\code.cmd La commande "winget list" permet de voir l'ensemble des logiciels et indiquera lesquelles ont été installées et sont gérées par winget. PS C:\Users\Info> winget list Nom ID Version Source ----------------------------------------------------------------------------------------------------------------------- VMware Tools ARP\Machine\X64\{6070BE95-B84D-40FE-8ABD-C70… 12.4.5.23787635 Microsoft Edge Microsoft.Edge 132.0.2957.115 winget Microsoft Visual C++ 2015-2022 Redistributab… Microsoft.VCRedist.2015+.x64 14.42.34433.0 winget Microsoft Visual C++ 2015-2022 Redistributab… Microsoft.VCRedist.2015+.x86 14.42.34433.0 winget Microsoft OneDrive Microsoft.OneDrive 24.244.1204.0003 winget Microsoft Visual Studio Code (User) Microsoft.VisualStudioCode 1.96.4 winget Microsoft Clipchamp MSIX\Clipchamp.Clipchamp_3.1.11920.0_neutral… 3.1.11920.0 Microsoft Teams Microsoft.Teams 24335.208.3315.1951 winget AV1 Video Extension MSIX\Microsoft.AV1VideoExtension_1.3.4.0_x64… 1.3.4.0 AVC Encoder Video Extension MSIX\Microsoft.AVCEncoderVideoExtension_1.1.… 1.1.3.0 Améliorations de la compatibilité des applic… MSIX\Microsoft.ApplicationCompatibilityEnhan… 1.2411.16.0 Actualités MSIX\Microsoft.BingNews_4.55.62231.0_x64__8w… 4.55.62231.0 Recherche Web de Microsoft Bing MSIX\Microsoft.BingSearch_1.1.3.0_x64__8weky… 1.1.3.0 MSN Météo MSIX\Microsoft.BingWeather_4.54.63007.0_x64_… 4.54.63007.0 Copilot MSIX\Microsoft.Copilot_1.24122.48.0_x64__8we… 1.24122.48.0 Installeur d'applications Microsoft.AppInstaller 1.24.25200.0 winget