Get-ItemProperty pour inspecter les attributs de fichiers et le chiffrement sous Windows

Dernière mise à jour: 10/10/2025
Auteur: Isaac
  • Interprète les attributs EFS et OneDrive en convertissant l'entier en System.IO.FileAttributes et en vérifiant les indicateurs.
  • Utilisez Get-ItemProperty dans FileSystem et Registry ; évitez les mauvaises surprises avec Out-String ou la lecture de valeurs spécifiques.
  • Complète EFS avec CMS (Protect/Unprotect-CmsMessage) pour le cryptage de contenu portable.

Attributs de fichiers chiffrés dans Windows avec PowerShell

Si vous travaillez avec Windows y PowerShell, tôt ou tard, vous devrez inspecter le attributs des fichiers et dossiers cryptés, que ce soit par le chiffrement EFS natif, par des fichiers protégés via CMS ou par le comportement de Fichiers OneDrive à la demande qui ajoute des indicateurs spéciaux au système de fichiers. Dans tous ces scénarios, Obtenir la propriété de l'élément C'est la clé qui vous permet de lire les propriétés avec précision et, en plus, de vous déplacer librement dans le registre et d'autres entrepôts grâce à la Fournisseurs PowerShell.

Dans ce guide, j'explique, avec des exemples réels et plusieurs techniques, comment consulter, interpréter et diagnostiquer les attributs (y compris celles spécifiques au cloud), comment répertorier et lire les valeurs de registre avec la même applet de commande, comment éviter les pièges lors de l'exécution à distance et comment compléter le chiffrement de fichiers avec le Écosystème CMS pour crypter/décrypter le contenu. Tout cela, avec commandes prêt à copier et coller, et de bonnes pratiques pour ne rien laisser derrière soi.

Qu'est-ce que Get-ItemProperty et pourquoi est-il essentiel pour les attributs et l'enregistrement ?

Utilisation de Get-ItemProperty dans PowerShell

L'applet de commande Obtenir la propriété de l'élément obtient les propriétés du éléments que les fournisseurs exposent PowerShell. Cela inclut les fichiers et dossiers (FileSystem), mais aussi les clés et valeurs dans le enregistrer, certificats, variables d'environnement, alias, etc. Dans le cas du système de fichiers, nous sommes particulièrement intéressés par la propriété Attributs, qui encapsule les indicateurs du fichier ou du répertoire, y compris Encrypted (EFS) et indicateurs de onedrive como Post-it, Débloqué o Rappel sur accès aux données.

La syntaxe la plus utilisée est directe : Obtenir la propriété de l'élément. Vous pouvez filtrer par nom de propriété avec -Nom, passer des chemins littéraux avec -CheminLiteral et utiliser -Filtre, -Comprendre y -Exclure lorsque le fournisseur le prend en charge (FileSystem le fait). De plus, Paramètres communs tels que -Verbose, -ErrorAction ou -OutVariable sont disponibles pour améliorer les diagnostics lors de l'inspection des attributs sensibles.

Syntaxe et paramètres essentiels (avec un accent sur le système de fichiers et le registre)

Pour travailler confortablement, il est pratique d'avoir à portée de main le syntaxe prise en charge par l'applet de commande, à la fois avec des chemins réguliers et avec des chemins littéraux où vous ne voulez pas d'interprétation générique :

Exemple de syntaxe A:
Get-ItemProperty <String[]> <String[]>] >] >]

Exemple de syntaxe B:
Get-ItemProperty <String[]>] -LiteralPath <String[]> >] >]

Les paramètres les plus utiles pour notre objectif sont -Chemin y -Nom (pour sélectionner des propriétés spécifiques), -CheminLiteral (empêche l'interprétation des caractères génériques), sélecteurs -Comprendre y -Exclure (ils opèrent sur le contenu lorsque vous incluez des caractères génériques, par exemple C:\Windows\*), et le -Filtre du fournisseur FileSystem qui est plus efficace au niveau du moteur que le filtrage ultérieur dans PowerShell.

Une note pratique : -Identifiant Il existe, mais son utilité avec les systèmes de fichiers locaux est limitée ; il a du sens sur les fournisseurs distants ou lorsque vous montez PSDrides avec les informations d'identification. Et n'oubliez pas que l'applet de commande accepte Chemins d'accès au registre du type HKLM:\ y Registry::, qui vous permet de travailler avec des clés et des valeurs comme s'il s'agissait de fichiers, ce qui rend l'audit beaucoup plus facile.

Exemples rapides pour s'échauffer

Voyons quelques exemples simples qui posent les bases avant de nous plonger dans EFS et OneDrive:

Inspecter un répertoire spécifique et voir toutes ses propriétés disponibles (Attributs inclus) :
Get-ItemProperty C:\Windows

Répertoriez toutes les propriétés d'un fichier spécifique sous forme de liste, utile lorsque vous souhaitez voir s'il apparaît Encrypted ou drapeaux de nuages :
Get-ItemProperty C:\Test\Weather.xls | Format-List

Registre : lire la valeur ProgramFilesDir dans CurrentVersion, utile lors de l'automatisation de l'inventaire :
Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name 'ProgramFilesDir'

Journal : lister toutes les entrées sous PowerShellEngine pour voir les noms de valeur et les données :
Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine

Interprétation correcte des attributs : EFS, OneDrive et autres indicateurs

La campagne Attributs est un énumération des drapeaux de .NET () qui peut être renvoyé sous forme de texte (« Masqué, Lecture seule, … ») ou sous forme entier Lorsque vous l'interrogez dans certains contextes (par exemple, certains chemins OneDrive avec Get-ItemProperty), il est préférable de convertir explicitement la valeur en une énumération et de la vérifier. drapeaux individuels.

  L'objet invoqué a été déconnecté de ses acheteurs[Fix]

Vérifier si un fichier est crypté avec EFS (FILE_ATTRIBUTE_ENCRYPTED = 0x4000 = 16384) :
$it = Get-ItemProperty -Path 'C:\ruta\fichero.ext';
$attr = $it.Attributes;
$esEfs = $attr.HasFlag(::Encrypted);
$esEfs

Convertir un nombreSi vous préférez voir la traduction d'un nombre « brut » (par exemple, ceux renvoyés par OneDrive), vous pouvez procéder comme suit pour obtenir les noms des indicateurs :
::ToObject(, 525328)

Avec Fichiers OneDrive à la demande Il existe des combinaisons déroutantes qui incluent plusieurs indicateurs « cloud » en plus des indicateurs classiques (Répertoire, Archive, Point de réparation, Hors ligne, etc.). Par exemple, les valeurs observées dans des scénarios réels :

  • 525328 (dossier): correspond à Directory (0x10) + ReparsePoint (0x400) + Post-it (0x80000). Cela signifie généralement « toujours disponible sur cet appareil ».
  • 5248544 (fichier): se décompose en ReparsePoint (0x400) + Offline (0x1000) + SparseFile (0x200) + Archive (0x20) + Débloqué (0x100000) + Rappel sur accès aux données (0x400000). Ceci correspond à « disponible en ligne » (cloud uniquement).

Pour valider vos décompositions avec PowerShell, utilisez des vérifications d'indicateurs individuels par rapport au numéro d'origine, afin de voir exactement quels bits sont actifs:
$n = 5248544
$fa =
@('Directory','Archive','Hidden','System','ReadOnly','Compressed','Encrypted','Offline','ReparsePoint','SparseFile','Temporary','Pinned','Unpinned','RecallOnOpen','RecallOnDataAccess') |
ForEach-Object {
$flag = ::Parse($fa, $_)
'{0,-18} : {1}' -f $_, ((($n) -band $flag))
}

Si tout ce qui vous intéresse est de distinguer Cryptage EFS En tant qu'espace réservé OneDrive, concentrez-vous sur ces indicateurs clés : Encrypted (SAI), Post-it, Débloqué, Rappel à l'ouverture, Rappel sur accès aux données, Hors ligne y Point de réparation. De cette façon, vous pouvez différencier un fichier protégé localement par EFS d'un fichier qui existe uniquement en tant que talon sur le cloud.

Répondre aux questions courantes sur les attributs OneDrive et comment les explorer

FAQ rapideLes nombres comme 525 328 et 5248 544 sont les trois questions les plus fréquemment posées. Voici des réponses pratiques au quotidien :

1) Que signifie 525328 dans un dossier OneDrive ? C'est la somme de Répertoire (0x10) + Point de réparation (0x400) + Épinglé (0x80000). En pratique, cela indique qu'il s'agit d'un dossier OneDrive lié au fournisseur de cloud (point d'analyse) et marqué comme "Toujours disponible" localement.

2) Quelles autres valeurs puis-je trouver et comment puis-je les explorer ? Vous verrez des combinaisons avec Débloqué (0x100000), Rappel sur ouverture (0x40000), Rappel sur accès aux données (0x400000), Hors ligne (0x1000), en plus des classiques Archive, caché, Système, etc. Pour les décoder :

- Etats-Unis ::ToObject() pour traduire les nombres en noms de drapeaux.

– Ou valider petit à petit avec -bande / A un indicateur() comme dans l'exemple ci-dessus.

– Si vous préférez afficher directement le texte des fichiers locaux, Obtenir l'article renvoie la propriété Attributes déjà « résolue » : (Get-Item 'C:\ruta\fichero').Attributes.

3) Existe-t-il d’autres attributs de fichiers en plus de OneDrive ? Oui: Encrypted (SAI), Comprimé, Lecture seulement, caché, Système, Archive, Temporaire, NonContenuIndexé, IntegrityStream, Aucune donnée de nettoyage, etc. Dans PowerShell, vous pouvez les explorer tous énumération de la classe :
::GetNames()

Vérifier et définir le chiffrement EFS à partir de PowerShell

Pour vérifier si un fichier est protégé par EFSVous avez déjà vu la case à cocher avec l'indicateur « Chiffré ». Si vous avez besoin de configurer rapidement un chiffrement, vous pouvez utiliser la case à cocher classique. cipher.exe ou utilisez la propriété Attributes elle-même :

Activer EFS avec la ligne de commande:
cipher /E "C:\ruta\fichero.ext"

PowerShell (ajout de l'indicateur chiffré):
$i = Get-Item 'C:\ruta\fichero.ext'
$i.Attributes = $i.Attributes -bor ::Encrypted

Si vous souhaitez désactiver EFS, supprimez simplement le drapeau avec -bande -bxor ou utiliser chiffrement /D, vous offrant un contrôle précis sans quitter PowerShell et gardant les automatisations cohérentes avec Obtenir la propriété de l'élément.

Travailler avec le Registre : énumération, lecture spécifique et navigation

Le registre dans PowerShell est traité comme un autre magasin grâce au fournisseur Liste de mariage. Les entrées de valeur sont propriétés de chaque clé, donc pour les voir dans un meilleur format l'idéal est d'utiliser Obtenir la propriété de l'élémentUn flux typique serait :

  Les 5 meilleurs lecteurs de cartes de crédit mobiles pour votre entreprise

Afficher les noms des entrées (propriété "Propriété") d'une clé :
Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion | Select-Object -ExpandProperty Property

Afficher les entrées avec les noms et les données (format lisible) :
Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

Vous naviguer avec Set-Location et utiliser . pour l'emplacement actuel, tout comme dans le système de fichiers :
Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion
Get-ItemProperty -Path .

Lectures ponctuelles typiques avec -Nom pour des valeurs spécifiques :
Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath

Pour écrire ou créer des valeurs, vous disposez des applets de commande sœurs : Définir-ItemProperty, Propriété du nouvel élément, Renommer-ItemProperty y Supprimer la propriété de l'élément, avec prise en charge de types tels que Chaîne, Développer la chaîne, binaire, dword, MultiString o QWord selon Type de valeur de registre.

Attention à l'exécution à distance : le cas de MachineGuid

Il y a une curieuse particularité avec Invoke-Command et le fournisseur de registre : si vous exécutez Get-Item sur HKLM:\Software\Microsoft\Cryptography\ à distance, la valeur peut être GuideMachine ce que vous voyez est celui de votre équipe locale même si le Nom de l'ordinateur PS afficher la machine distante. Cela semble être lié à sérialisation de l'objet retourné par le fournisseur.

Pour éviter des lectures erronées, forcez une sortie plate ou interrogez les valeurs avec Obtenir la propriété de l'élément. Ces deux variantes renvoient le Guide de la machine correct de l'équipe à distance :
Invoke-Command -ComputerName 'PC1' -ScriptBlock { Get-Item 'HKLM:\Software\Microsoft\Cryptography\' | Out-String }
Invoke-Command -ComputerName 'PC1' -ScriptBlock { Get-ItemProperty 'HKLM:\Software\Microsoft\Cryptography\' -Name 'MachineGuid' }

Lorsque votre audit dépend de valeurs de journal critiques, il est préférable valider avec Get-ItemProperty ou sérialiser en chaîne avant de ramener la réponse à la session locale, évitant ainsi des résultats confus.

Fournisseurs PowerShell et PSDrive : la feuille de route pour tout

Les fournisseurs PowerShell sont des composants .NET qui exposent entrepôts de données comme s'ils étaient des unités (PSDrives). Grâce à eux, les applets de commande comme Get-Item, Get-ChildItem, Get-ItemProperty ou Set-Location fonctionnent de la même manière dans Système de fichiers, Registre, Environnement, Certificat, Variable, Fonction, Alias o WSMan. Vous pouvez lister les fournisseurs avec Get-PSProvider et afficher les PSDrives actifs avec Get-PSDrive.

Certaines applets de commande universelles que vous utiliserez sans cesse avec les fournisseurs sont : Obtenir l'emplacement (gl), Set-Location (cd), Copie-élément (cpi), Obtenir un objet (gi), Ensemble d'éléments (si), Obtenir-ChildItem (dir/ls), ainsi que toute la famille Propriété de l'élément pour le registre. N'oubliez pas : les fournisseurs partagent les mêmes verbes, donc même muscle, stockage différent.

Quelques petits exemples pour vous aider à vous déplacer en toute simplicité :

  • Alias: Set-Location Alias: y Get-ChildItem pour lister les alias ; filtrer par nom avec -Name R* o Where-Object.
  • Environnement: Set-Location Env: y Get-ChildItem pour voir les variables ; créez-en une nouvelle avec New-Item -Path . -Name MiVariable -Value 'texto'.
  • Liste de mariage: Set-Location HKLM:\Software, Get-ChildItem pour les clés, Get-ItemProperty pour les données ; créer/supprimer avec les applets de commande ItemProperty.

Cas d'utilisation combinant Get-ItemProperty avec l'audit système

Lorsque vous faites un inventaire ou un diagnostic, Obtenir la propriété de l'élément On le retrouve dans d'innombrables recettes. Par exemple, pour lister applications installées consultation des clés de désinstallation :
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Sort-Object InstallDate

Ou pour voir l'histoire de mises à niveau sur place depuis Windows depuis le registre :
Get-ItemProperty -Path 'HKLM:\SYSTEM\Setup\Source OS*' |
Select-Object PSChildName, ProductName, ReleaseId, DisplayVersion, CurrentBuild

Dans d'autres zones du système, vous pouvez compléter votre audit avec des applets de commande et des utilitaires bien connus (qui n'utilisent pas tous Get-ItemProperty, mais ils peuvent être intégrés à vos scripts) : Obtenir un correctif, Obtenir-WindowsUpdateLog, ipconfig / all, powercfg (énergie, étude du sommeil, réveils), Get-CimInstance pour les appareils, les moniteurs ou les volumes, ou Obtenir la propriété avancée de l'adaptateur réseau pour le réseau. L'idée est qu'avec les fournisseurs et le registre sous contrôle, tu composes un collecteur de preuves robuste et vous connaissez le artefacts dans Windows.

Dans d'autres zones du système, vous pouvez compléter votre audit avec des applets de commande et des utilitaires bien connus (qui n'utilisent pas tous Get-ItemProperty, mais ils peuvent être intégrés à vos scripts) : Obtenir un correctif, Obtenir-WindowsUpdateLog, ipconfig / all, powercfg (énergie, étude du sommeil, réveils), Get-CimInstance pour les appareils, les moniteurs ou les volumes, ou Obtenir la propriété avancée de l'adaptateur réseau pour le réseau. L'idée est qu'avec les fournisseurs et le registre sous contrôle, tu composes un collecteur de preuves robuste.

  Comment arrêter l'enregistrement vocal pendant l'envoi de SMS sur iPhone

Dans d'autres zones du système, vous pouvez compléter votre audit avec des applets de commande et des utilitaires bien connus (qui n'utilisent pas tous Get-ItemProperty, mais ils peuvent être intégrés à vos scripts) : Obtenir un correctif, Obtenir-WindowsUpdateLog, ipconfig / all, powercfg (énergie, étude du sommeil, réveils), Get-CimInstance pour les appareils, les moniteurs ou les volumes, ou Obtenir la propriété avancée de l'adaptateur réseau pour le réseau. L'idée est qu'avec les fournisseurs et le registre sous contrôle, tu composes un collecteur de preuves robuste.

Crypter et décrypter des données avec CMS : complément idéal à l'attribut Crypté

Attribut Encrypted (EFS) protège au niveau du système de fichiers. Lorsque vous en avez besoin crypter le contenu Portables pour le partage avec des tiers, les applets de commande PowerShell CMS sont votre allié : Protéger-CmsMessage (code), Déprotéger-CmsMessage (déchiffrer) et Obtenir-CmsMessage (inspecter les métadonnées).

Création rapide d'un certificat de cryptage à partir d'un INF (définissez le sujet sur votre identité), demandez avec certreq et vérification dans l'entrepôt de l'utilisateur :
certreq.exe -new DocumentEncryption.inf DocumentEncryption.cer
Get-ChildItem -Path Cert:\CurrentUser\My -DocumentEncryptionCert

Avec le certificat prêt, vous pouvez crypter un fichier texte, puis vérifier/décrypter:

$Text = 'Texto secreto que quiero proteger';
Protect-CmsMessage -To 'cn=tu@dominio.local' -Content $Text -OutFile MiTextoCifrado.txt
Get-CmsMessage -Path .\MiTextoCifrado.txt | Unprotect-CmsMessage -To 'cn=tu@dominio.local'

Cette combinaison vous permet de couvrir à la fois l'attribut Encrypted (EFS) sur le disque comme cryptage des messages pour un échange sécurisé, et tout cela visible/gérable avec les mêmes principes que vous gérez déjà avec Obtenir la propriété de l'élément.

Astuces et formats pour présenter clairement les informations

Lors de l'inspection des attributs, la présentation est importante. Pour afficher des listes lisibles, utilisez Format-Liste (FL) et Format-Table (FT) ; si vous travaillez avec de longs itinéraires ou de nombreuses propriétés, Out-String évite parfois les surprises avec des prestataires comme le Registre :

Format de la liste complète à partir d'un fichier :
Get-ItemProperty 'C:\ruta\fichero.ext' | Format-List *

Sortie textuelle (utile à distance avec Invoke-Command) :
Get-Item 'HKLM:\Software\Microsoft\Cryptography\' | Out-String

Pour exporter vos résultats au format CSV (inventaire, audit), sélectionnez uniquement ce qui est pertinent et enregistrez avec Exporter-CSV, ce qui facilite les comparaisons futures et les évaluations par des tiers de votre équipement :

Get-ChildItem 'C:\Users\tu\OneDrive' -Recurse -File |
Select-Object FullName, @{n='AttrNum';e={(Get-ItemProperty $_.FullName).Attributes}}, @{n='Attributes';e={(Get-Item $_.FullName).Attributes}} |
Export-Csv C:\Temp\oneDrive_attrs.csv -NoTypeInformation -Encoding UTF8

Bonnes pratiques et notes finales pour éviter les trébuchements

  • Différence entre EFS et cloudCe n'est pas parce qu'un fichier n'est pas « toujours disponible » qu'il est chiffré. Recherchez explicitement cette option. Encrypted quand votre objectif est l'EFS.
  • Utiliser LiteralPath s'il y a des caractères rares dans les chemins pour éviter qu'ils soient interprétés comme des caractères génériques, en particulier dans les chemins de registre et UNC.
  • Fournisseur de système de fichiers les soutiens filtres:Utilisez ceci pour plus d'efficacité lors de l'analyse de grandes arborescences de répertoires.
  • Invoke-Command: Si vous lisez le registre distant, choisissez Obtenir la propriété de l'élément ou sérialiser en texte avec Out-String pour éviter les incompatibilités (cas MachineGuid).

Avec cet arsenal vous saurez à tout moment si un élément est Cryptage EFS, si c'est un Espace réservé OneDrive, comment décoder des numéros d'attributs apparemment cryptiques et comment s'appuyer sur le Fournisseurs PowerShell Pour explorer le Registre et d'autres dépôts en toute fluidité. Le tout avec des exemples et des commandes reproductibles, que vous pouvez intégrer à vos scripts d'inventaire, d'audit ou de sécurité sans perturber vos flux de travail actuels.

Modifier les attributs de fichier dans Windows 6
Article connexe:
Comment modifier les attributs de fichier sous Windows