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] <System.String>] [-Category {Alias | Cmdlet | Provider | General | FAQ | Glossary | HelpFile |
    ScriptCommand | Function | Filter | ExternalScript | All | DefaultHelp | Workflow | DscResource | Class |
    Configuration}] [-Component <System.String[]>] -Detailed [-Functionality <System.String[]>] [-Path <System.String>]
    [-Role <System.String[]>] [<CommonParameters>]

    Get-Help [[-Name] <System.String>] [-Category {Alias | Cmdlet | Provider | General | FAQ | Glossary | HelpFile |
    ScriptCommand | Function | Filter | ExternalScript | All | DefaultHelp | Workflow | DscResource | Class |
    Configuration}] [-Component <System.String[]>] -Examples [-Functionality <System.String[]>] [-Path <System.String>]
    [-Role <System.String[]>] [<CommonParameters>]

    Get-Help [[-Name] <System.String>] [-Category {Alias | Cmdlet | Provider | General | FAQ | Glossary | HelpFile |
    ScriptCommand | Function | Filter | ExternalScript | All | DefaultHelp | Workflow | DscResource | Class |
    Configuration}] [-Component <System.String[]>] [-Full] [-Functionality <System.String[]>] [-Path <System.String>]
    [-Role <System.String[]>] [<CommonParameters>]

    Get-Help [[-Name] <System.String>] [-Category {Alias | Cmdlet | Provider | General | FAQ | Glossary | HelpFile |
    ScriptCommand | Function | Filter | ExternalScript | All | DefaultHelp | Workflow | DscResource | Class |
    Configuration}] [-Component <System.String[]>] [-Functionality <System.String[]>] -Online [-Path <System.String>]
    [-Role <System.String[]>] [<CommonParameters>]

    Get-Help [[-Name] <System.String>] [-Category {Alias | Cmdlet | Provider | General | FAQ | Glossary | HelpFile |
    ScriptCommand | Function | Filter | ExternalScript | All | DefaultHelp | Workflow | DscResource | Class |
    Configuration}] [-Component <System.String[]>] [-Functionality <System.String[]>] -Parameter <System.String> [-Path
    <System.String>] [-Role <System.String[]>] [<CommonParameters>]

    Get-Help [[-Name] <System.String>] [-Category {Alias | Cmdlet | Provider | General | FAQ | Glossary | HelpFile |
    ScriptCommand | Function | Filter | ExternalScript | All | DefaultHelp | Workflow | DscResource | Class |
    Configuration}] [-Component <System.String[]>] [-Functionality <System.String[]>] [-Path <System.String>] [-Role
    <System.String[]>] -ShowWindow [<CommonParameters>]

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 <cmdlet-name>` is the simplest and default syntax of `Get-Help` cmdlet. You can omit the Name parameter.

    The syntax `<cmdlet-name> -?` 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