Get-ChildItem: Elenca File e Cartelle con PowerShell

Ricorda i bei vecchi tempi del comando dir in DOS? E il comando ls in Linux? In tal caso, il cmdlet Get-childItem è essenzialmente quello, ma portato ad un livello superiore.

Infatti, abbiamo anche dir e ls in PowerShell sotto forma di alias. Il cmdlet Get-Childitem di PowerShell può non solo elencare file e cartelle in un sistema di file tramite la console di PowerShell o lo script di PowerShell , ma può anche enumerare chiavi e valori del registro, certificati in vari store di certificati e persino Active Directory, per citarne alcuni.

Se sei uno scripter di PowerShell principiante/intermedio, assicurati di dare un’occhiata al mio mini-corso GRATUITO sulla costruzione di uno strumento PowerShell! Oltre 9.000 parole di spiegazioni approfondite e approfondimenti su come costruire uno strumento PowerShell.

Per capire Get-Childitem, pensa prima a dir e ls, ma invece di trattare solo file, tratta molti oggetti come un elemento figlio e li enumera. Puoi usare l’alias o il nome completo del comando per utilizzarlo.

Dato che questo comando è disponibile sin da PowerShell v1, puoi essere sicuro che funzionerà con la tua versione di PowerShell.

Get-ChildItem attraversa un albero

A file system is a hierarchy. It has a folder structure with files inside of folders and those folders inside of other folders. A file system is like a tree. That tree has a trunk (C:\ for example) and “branches” coming off of it (folders). In fact, we even have a tree command.

PS> tree
Folder PATH listing for volume HD
Volume serial number is 0000007B 22DC:666C
C:.
 \modules
   \AdsiPS
     \1.0.0.2
       \Public
       \AWSPowerShell
<SNIP>

Puoi indirizzare questo comando sia a percorsi locali sul computer locale, utilizzare uno scriptblock remoto di PowerShell e utilizzare Get-ChildItem al suo interno o semplicemente indirizzarlo a un percorso UNC. Tutti funzionano allo stesso modo. Forse voglio solo elencare tutti i file nella directory corrente.

PS> dir -Path .
PS> Invoke-Command -ComputerName SERVER1 -Scriptblock { dir -Path . }

Provider di PowerShell

Microsoft si rese conto che la navigazione di questa struttura “a albero” di un sistema di file poteva essere applicata anche ad altri sistemi. Un sistema di file “a albero” ha cartelle e file, ma un registro ha chiavi e valori, mentre il sistema di certificati in Windows ha archivi e certificati all’interno di quegli archivi. Ognuna di queste aree specifiche può essere rappresentata come un albero, quindi nacque il provider PowerShell. Perché tutto questo discorso sui provider PowerShell? Perché il cmdlet Get-ChildItem fa parte dei cmdlet *-Item che interagiscono con i drive PowerShell che ogni provider espone.

Il cmdlet Get-ChildItem può restituire qualsiasi numero di oggetti su un drive PowerShell e consente di elaborare ogni elemento tramite il pipeline o forse in un ciclo foreach di PowerShell. Comprende il concetto di un drive PowerShell che consente di specificare un Path di una cartella di sistema di file, una chiave di registro o un archivio di certificati, tutto in uno.

Puoi vedere qui sotto che questo comando può elencare la cartella C:\, l’hive HKEY Current User e l’archivio dei certificati di PowerShell.

PS> Get-ChildItem -Path C:\


    Directory: C:\


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----         7/2/2017   7:01 AM                AppData
d-----        4/25/2017   4:36 PM                CheckPoint

PS> Get-ChildItem -Path HKCU:\


    Hive: HKEY_CURRENT_USER


Name                           Property
----                           --------
BCD00000000

PS> dir -Path Cert:\


Location   : CurrentUser
StoreNames : {TrustedPublisher, ClientAuthIssuer, Root, UserDS...}

Filtraggio

Il comando PowerShell Get-ChildItem non può solo recuperare tutti gli oggetti su un’unità, ma può anche filtrare le informazioni attraverso un paio di diversi parametri: Filtro, Includi ed Escludi. Vorrai sempre utilizzare il diffuso parametro PowerShell Filtro quando possibile. Questo parametro passa direttamente la sintassi del filtro al provider individuale. Anche se molto più veloce, questa sintassi dipende esclusivamente dal provider che viene interrogato.

Ad esempio, una sintassi di Filtro come Nome -eq 'foo' può essere completamente corretta quando si interrogano i file, ma non funzionerà affatto quando si interrogano il registro perché il provider del registro non ha nemmeno un filtro!

PS> dir HKLM:\ -Filter "Name -eq 'foo'"
ls : Cannot call method. The provider does not support the use of filters.
At line:1 char:1 + ls HKLM:\ -Filter "Name -eq 'foo'" +
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     + CategoryInfo          :
NotImplemented: (:) [Get-ChildItem], PSNotSupportedException     +
FullyQualifiedErrorId :
NotSupported,Microsoft.PowerShell.Commands.GetChildItemCommand

Quando tutto il resto fallisce, hai sempre anche i parametri Includi ed Escludi.

Questo comando in PowerShell ha anche alcuni parametri specifici del filesystem come Forza che visualizzerà file e cartelle nascosti, File e Directory che trovano solo file o cartelle. Dai un’occhiata alla panoramica completa di Get-ChildItem tramite Get-Help o nella documentazione di Microsoft.

Un’altra cosa interessante riguardo a Get-ChildItem è la sua capacità di risolvere percorsi quando si utilizza il carattere jolly. In PowerShell, il carattere jolly rappresenta tipicamente qualsiasi cosa. Ad esempio, se desideri vedere tutti i file con l’estensione file .txt, specifica semplicemente il percorso alla cartella e *.txt.

PS> Get-ChildItem -Path 'C:\*.txt'

Potremmo anche filtrare gli attributi dei file. Forse vogliamo solo trovare i file in sola lettura in una cartella.

PS> Get-ChildItem -Path C:\ -Attributes R -File

Riepilogo

Questo comando PowerShell è uno di quelli che userai ripetutamente. La maggior parte delle volte, probabilmente userai il provider FileSystem, ma è importante ricordare che questo cmdlet è in grado di fare molto di più. Usalo per interrogare file, cartelle, chiavi di registro, valori di registro, certificati, utenti di Active Directory, computer o addirittura variabili di ambiente, funzioni e altro ancora!

In caso di dubbio, esegui il comando Get-PSDrive per vedere un elenco di tutti i drive PowerShell caricati che Get-ChildItem può interrogare per te.

Source:
https://adamtheautomator.com/get-childitem/