- Interpreta atributs EFS i OneDrive convertint el sencer a System.IO.FileAttributes i comprovant banderes.
- Usa Get-ItemProperty a FileSystem i Registre; evita sorpreses remotes amb Out-String o llegint valors concrets.
- Complementa EFS amb CMS (Protect/Unprotect-CmsMessage) per a xifratge de contingut portable.
Si treballes amb Windows y PowerShell, tard o d'hora necessitaràs inspeccionar els atributs de fitxers i carpetes xifrats, ja sigui pel Xifratge EFS nadiu, per fitxers protegits via CMS o pel comportament de Fitxers OneDrive a la carta que afegeix banderes especials al sistema de fitxers. En tots aquests escenaris, Get-ItemProperty és la clau anglesa que et permet llegir propietats amb precisió i, a més, moure't amb soltesa pel Registre i altres magatzems gràcies als proveïdors de PowerShell.
En aquesta guia t'explico, amb exemples reals i diverses tècniques, com consultar, interpretar i diagnosticar atributs (incloent-hi els específics del núvol), com enumerar i llegir valors del Registre amb el mateix cmdlet, com evitar trampes en executar remotament i com complementar el xifratge de fitxers amb el ecosistema CMS per xifrar/desxifrar contingut. Tot això, amb ordres llestos per copiar i enganxar, i bones pràctiques perquè no et deixis res pel camí.
Què és Get-ItemProperty i per què és clau per a atributs i Registre
El cmdlet Get-ItemProperty obté propietats dels elements que exposen els proveïdors de PowerShell. Això inclou fitxers i carpetes (FileSystem), però també claus i valors del Registre, certificats, variables d'entorn, àlies, etc. En el cas del sistema de fitxers, ens interessa especialment la propietat Atributs, que encapsula les banderes del fitxer o directori, entre elles Xifrat (EFS) i els indicadors de OneDrive com a Tapat, Unpinned o RecallOnDataAccess.
La sintaxi més usada és directa: Get-ItemProperty. Pots filtrar per nom de propietat amb -Nom, passar rutes literals amb -LiteralPath i usar -Filtre, -Incloure y -Excloure quan el proveïdor ho suporta (FileSystem sí). A més, CommonParameters com ara -Verbose, -ErrorAction o -OutVariable estan disponibles per millorar el diagnòstic mentre inspecciones atributs delicats.
Sintaxi i paràmetres essencials (amb enfocament a FileSystem i Registre)
Per treballar còmode convé tenir a mà la sintaxi admesa pel cmdlet, tant amb rutes habituals com amb rutes literals on no vols interpretació de comodins:
Exemple de sintaxi A:
Get-ItemProperty <String[]> <String[]>] >] >]
Exemple de sintaxi B:
Get-ItemProperty <String[]>] -LiteralPath <String[]> >] >]
Els paràmetres més útils per a la nostra comesa són -Camí y -Nom (per seleccionar propietats concretes), -LiteralPath (evita que s'interpretin comodins), els selectors -Incloure y -Excloure (operen sobre el contingut quan incloses comodins, per exemple C:\Windows\*), i el -Filtre del proveïdor FileSystem que és més eficient a nivell de motor que filtrar després a PowerShell.
Un apunt pràctic: - Credencial existeix, però la seva utilitat amb FileSystem locals és limitada; cobra sentit en proveïdors remots o quan muntes PSDrives amb credencials. I no oblidis que el cmdlet accepta rutes del Registre del tipus HKLM:\
y Registry::
, cosa que et permet treballar amb claus i valors com si fossin fitxers, cosa que facilita molt les auditories.
Exemples ràpids per entrar en calor
Vegem alguns exemples senzills que asseuen les bases abans de ficar-nos de ple amb EFS i OneDrive:
Inspeccionar un directori concret i veure totes les seves propietats disponibles (Attributs inclòs):
Get-ItemProperty C:\Windows
Llistar totes les propietats d'un fitxer concret en format de llista, cosa útil quan vols veure si apareix Xifrat o banderes de núvol:
Get-ItemProperty C:\Test\Weather.xls | Format-List
Registre: llegir el valor ProgramFilesDir a CurrentVersion, útil quan automatitzes inventari:
Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name 'ProgramFilesDir'
Registre: llistar totes les entrades sota PowerShellEngine per veure noms i dades de valors:
Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine
Interpretar correctament els atributs: EFS, OneDrive i la resta de banderes
El camp Atributs és un flags enum de .NET () que es pot tornar com a text («Hidden, ReadOnly, …») o com nombre sencer quan ho consultes en certs contextos (per exemple, algunes rutes de OneDrive amb Get-ItemProperty). Per no perdre't, el millor és convertir explícitament el valor a l'enumeració i comprovar banderes individuals.
Comprovar si un fitxer està xifrat amb EFS (FILE_ATTRIBUTE_ENCRYPTED = 0x4000 = 16384):
$it = Get-ItemProperty -Path 'C:\ruta\fichero.ext';
$attr = $it.Attributes;
$esEfs = $attr.HasFlag(::Encrypted);
$esEfs
Convertir número: Si preferiu veure la traducció d'un número «cru» (per exemple, els que retorna OneDrive), podeu fer el següent per obtenir els noms de banderes:
::ToObject(, 525328)
Amb Fitxers OneDrive a la carta apareixen combinacions que confonen perquè sumen diverses banderes cloud a més de les clàssiques (Directory, Archive, ReparsePoint, Offline…). Per exemple, valors vistos en escenaris reals:
- 525328 (carpeta): correspon a Directory (0x10) + ReparsePoint (0x400) + Tapat (0x80000). Sol dir «sempre disponible en aquest dispositiu».
- 5248544 (arxiu): es descompon com a ReparsePoint (0x400) + Offline (0x1000) + SparseFile (0x200) + Archive (0x20) + Unpinned (0x100000) + RecallOnDataAccess (0x400000). Això encaixa amb «disponible en línia» (només al núvol).
Per validar les teves descomposicions amb PowerShell, fes servir comprovacions de banderes individuals contra el número original, així veuràs exactament quins bits estan actius:
$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 lúnic que tinteressa és distingir xifrat EFS de placeholder d'OneDrive, centra't en aquestes banderes clau: Xifrat (EFS), Tapat, Unpinned, RecallOnOpen, RecallOnDataAccess, desconnectat y ReparsePoint. Així podràs diferenciar un fitxer protegit localment per EFS d'un que només existeix com taló en el núvol.
Responent els dubtes típics sobre atributs OneDrive i com explorar-los
FAQ ràpida: Amb números com 525328 i 5248544 apareixen tres preguntes freqüents. Et deixo aquí les respostes pràctiques per al teu dia a dia:
1) Què vol dir 525328 en una carpeta OneDrive? És la suma de Directory (0x10) + ReparsePoint (0x400) + Pinned (0x80000). A la pràctica, indica que és una carpeta d'OneDrive vinculada al proveïdor de núvol (reparse point) i marcada com «Sempre disponible» locals.
2) Quins altres valors em puc trobar i com explorar-los? Veuràs combinacions amb Unpinned (0x100000), RecallOnOpen (0x40000), RecallOnDataAccess (0x400000), Offline (0x1000), a més de les clàssiques arxiu, Hidden, Sistema, etc. Per descodificar-les:
– Usa ::ToObject() per traduir números a noms de banderes.
– O valida bit a bit amb -Band / HasFlag() com en l'exemple anterior.
– Si prefereixes veure text directament per a fitxers locals, Obtenir-element torna la propietat Attributes ja «resolta»: (Get-Item 'C:\ruta\fichero').Attributes
.
3) Hi ha més atributs de fitxer a més dels d'OneDrive? sí: Xifrat (EFS), Comprimit, Llegeix només, Hidden, Sistema, arxiu, Temporal, NotContentIndexed, IntegrityStream, NoScrubData, etc. A PowerShell pots explorar-los totes enumerant la classe:
::GetNames()
Comprovar i establir el xifratge EFS des de PowerShell
Per verificar si un fitxer està protegit amb EFS, ja vesteix la comprovació amb la bandera Encrypted. Si necessites establir el xifratge de manera ràpida, pots estirar el clàssic cipher.exe o utilitzar la pròpia propietat Attributes:
Activar EFS amb línia d'ordres:
cipher /E "C:\ruta\fichero.ext"
PowerShell (sumant la bandera Encrypted):
$i = Get-Item 'C:\ruta\fichero.ext'
$i.Attributes = $i.Attributes -bor ::Encrypted
Si vols deshabilitar EFS, només cal restar la bandera amb -band -bxor o fer servir cipher /D, el que et dóna un control fi sense sortir de PowerShell i mantenint automatitzacions coherents amb Get-ItemProperty.
Treballar amb el Registre: enumeració, lectura puntual i navegació
El Registre a PowerShell es tracta com un altre magatzem més gràcies al proveïdor Registre. Les entrades de valors són propietats de cada clau, així que per veure-les amb millor format l'ideal és fer servir Get-ItemProperty. Un flux típic seria:
Veure noms d'entrades (propietat Property) d'una clau:
Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion | Select-Object -ExpandProperty Property
Veure entrades amb noms i dades (format llegible):
Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
Pots navegar amb Set-Location i usar .
per a la ubicació actual, igual que al sistema de fitxers:
Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion
Get-ItemProperty -Path .
Lectures puntuals típiques amb -Nom per a valors concrets:
Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath
Per escriure o crear valors tens els cmdlets germans: Set-ItemProperty, New-ItemProperty, Rename-ItemProperty y Elimina-ItemProperty, amb suport per a tipus com Cadena, ExpandString, Binari, DWORD, MultiString o QWord segons RegistryValueKind.
Precaució amb l'execució remota: el cas de MachineGuid
Hi ha una peculiaritat curiosa amb Invoke-Command i el proveïdor del Registre: si executes Get-Item
sobre HKLM:\Software\Microsoft\Cryptography\
en remot, potser el valor MachineGuid que vegis sigui el del teu equip local encara que el PSComputerName mostri la màquina remota. Això sembla estar relacionat amb la serialització de l'objecte retornat pel proveïdor.
Per evitar lectures equivocades, força una sortida plana o consulta els valors amb Get-ItemProperty. Aquestes dues variants tornen el MachineGuid correcte de l'equip remot:
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' }
Quan la teva auditoria depengui de valors crítics de Registre, és millor validar amb Get-ItemProperty o serialitzar cadena abans de portar la resposta a la sessió local, evitant així resultats confusos.
Proveïdors de PowerShell i PSDrives: el mapa per arribar a tot
Els proveïdors de PowerShell són components .NET que exposen magatzems de dades com si fossin unitats (PSDrives). Gràcies a ells, cmdlets com Get-Item, Get-ChildItem, Get-ItemProperty o Set-Location funcionen igual a FileSystem, Registry, Environment, Certificate, Variable, Function, Àlies o WSMan. Pots llistar proveïdors amb Get-PSProvider
i veure PSDrives actius amb Get-PSDrive
.
Alguns cmdlets universals que utilitzaràs sense parar amb proveïdors són: Get-Location (gl), Set-Location (cd), Copy-Item (cpi), Get-Item (gi), Set-Item (si), Get-ChildItem (dir/ls), a més de tota la família ItemProperty per al Registre. Recorda: els proveïdors comparteixen els mateixos verbs, així que mateix múscul, diferent magatzem.
Uns exemples curts per moure't amb soltesa:
- àlies:
Set-Location Alias:
yGet-ChildItem
per llistar àlies; filtra per nom amb-Name R*
oWhere-Object
. - Mediambient:
Set-Location Env:
yGet-ChildItem
per veure variables; crea una nova ambNew-Item -Path . -Name MiVariable -Value 'texto'
. - Registre:
Set-Location HKLM:\Software
,Get-ChildItem
per a claus,Get-ItemProperty
per a dades; crea/elimina amb els cmdlets de ItemProperty.
Casos dús que combinen Get-ItemProperty amb auditoria del sistema
Quan fas inventari o diagnòstic, Get-ItemProperty apareix en infinitat de receptes. Per exemple, per llistar aplicacions instal·lades consultant les claus de desinstal·lació:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Sort-Object InstallDate
O per veure l'historial de actualitzacions in-place de Windows des del Registre:
Get-ItemProperty -Path 'HKLM:\SYSTEM\Setup\Source OS*' |
Select-Object PSChildName, ProductName, ReleaseId, DisplayVersion, CurrentBuild
En altres àrees del sistema pots complementar la teva auditoria amb cmdlets i utilitats ben conegudes (no tots usen Get-ItemProperty, però s'integren als teus scripts): Get-Hotfix, Get-WindowsUpdateLog, ipconfig / all, powercfg (energy, sleepstudy, waketimers), Get-CimInstance per a dispositius, monitors o volums, o Get-NetAdapterAdvancedProperty per a xarxa. La idea és que, amb els proveïdors i el Registre sota control, compons un col·lector d'evidències robust i coneixes els artefactes a Windows.
En altres àrees del sistema pots complementar la teva auditoria amb cmdlets i utilitats ben conegudes (no tots usen Get-ItemProperty, però s'integren als teus scripts): Get-Hotfix, Get-WindowsUpdateLog, ipconfig / all, powercfg (energy, sleepstudy, waketimers), Get-CimInstance per a dispositius, monitors o volums, o Get-NetAdapterAdvancedProperty per a xarxa. La idea és que, amb els proveïdors i el Registre sota control, compons un col·lector d'evidències robust.
En altres àrees del sistema pots complementar la teva auditoria amb cmdlets i utilitats ben conegudes (no tots usen Get-ItemProperty, però s'integren als teus scripts): Get-Hotfix, Get-WindowsUpdateLog, ipconfig / all, powercfg (energy, sleepstudy, waketimers), Get-CimInstance per a dispositius, monitors o volums, o Get-NetAdapterAdvancedProperty per a xarxa. La idea és que, amb els proveïdors i el Registre sota control, compons un col·lector d'evidències robust.
Xifrar i desxifrar dades amb CMS: complement ideal a l'atribut Encrypted
l'atribut Xifrat (EFS) protegeix a nivell de sistema de fitxers. Quan necessitis xifrar contingut portable per compartir amb tercers, els cmdlets CMS de PowerShell són el teu aliat: Protect-CmsMessage (xifrar), Desfés-CmsMessage (desxifrar) i Get-CmsMessage (inspeccionar metadades).
Creació ràpida d'un certificat de xifrat des d'un INF (ajusta el Subject a la teva identitat), sol·licitud amb certreq
i verificació al magatzem de l'usuari:
certreq.exe -new DocumentEncryption.inf DocumentEncryption.cer
Get-ChildItem -Path Cert:\CurrentUser\My -DocumentEncryptionCert
Amb el certificat llest, pots xifrar un text a fitxer i després verificar/desxifrar:
$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'
Aquesta combinació us permet cobrir tant l'atribut Xifrat (EFS) en disc com el xifrat de missatges per a intercanvi segur, i tot això visible/gestionable amb els mateixos principis que ja maneges amb Get-ItemProperty.
Trucs i formats per presentar la informació amb claredat
Quan inspeccioneu atributs, la presentació importa. Per veure llistes llegibles utilitza Format-List (FL) i Format-Table (FT); si treballes amb rutes llargues o moltes propietats, Out-String de vegades evita sorpreses amb proveïdors com el del Registre:
Format de llista complet d'un fitxer:
Get-ItemProperty 'C:\ruta\fichero.ext' | Format-List *
Sortida textual (útil en remot amb Invoke-Command):
Get-Item 'HKLM:\Software\Microsoft\Cryptography\' | Out-String
Per exportar les teves troballes a CSV (inventari, auditoria), selecciona només el que és rellevant i guarda amb Export-Csv, cosa que facilita comparatives a futur i revisions per tercers del teu equip:
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
Bones pràctiques i notes finals per no ensopegar
- Diferència EFS de núvol: que un fitxer no estigui «sempre disponible» no vol dir que estigui xifrat. Busca explícitament la bandera Xifrat quan el teu objectiu sigui EFS.
- Usa LiteralPath si hi ha caràcters rars en rutes per evitar que s'interpretin com a comodins, especialment al Registre i rutes UNC.
- Proveïdor FileSystem suporta filtres: fes-lo servir per a eficiència quan escanejis grans arbres de directoris.
- Invoke-Command: si llegeixes el Registre remot, opta per Get-ItemProperty o serialitza a text amb Out-String per evitar desajustos (cas MachineGuid).
Amb aquest arsenal sabràs en tot moment si un element està xifrat per EFS, si és un placeholder d'OneDrive, com descodificar nombres d'atributs aparentment críptics, i com recolzar-te en els proveïdors de PowerShell per explorar el Registre i altres magatzems de manera homogènia. Tot això amb exemples reproduïbles i comandes que podeu integrar en els vostres scripts d'inventari, auditoria o seguretat sense trencar els vostres fluxos actuals.
Redactor apassionat del món dels bytes i la tecnologia en general. M'encanta compartir els meus coneixements a través de l'escriptura, i això és el que faré en aquest bloc, mostrar tot el més interessant sobre gadgets, programari, maquinari, tendències tecnològiques, i més. El meu objectiu és ajudar-te a navegar pel món digital de forma senzilla i entretinguda.