Il cmdlet get-childitem è l’equivalente, con alcune migliorie, del comando dir che si utilizzava una volta per elencare i file presenti nel disco fisso o in alcune cartelle. Vediamo alcuni esempi su come utilizzarlo in PowerShell.
Get-ChildItem
, o la sua versione abbreviata gci, visualizza i file e le cartelle presenti nella posizione corrente, quindi in c:\users\crazy.cat, si può anche indicare un percorso dove cercare, quindi Get-ChildItem c:\windows
mostrerà il contenuto della cartella Windows.
Se non ci interessa vedere a video l’esito del comando possiamo reindirizzare l’output dello stesso verso un file di testo Get-ChildItem d:\iso > d:\report.txt
.
Get-ChildItem non visualizza i file nascosti, se vogliamo mostrare anche questi file bisogna aggiungere l’opzione -force, quindi il comando diventa Get-ChildItem -force
. Se volessimo elencare il contenuto completo di tutto il disco fisso, con tutte le sue cartelle, va aggiunta anche l’opzione -recurse
.
Le lettere presenti nella colonna Mode indicano gli attributi e le caratteristiche dell’oggetto:
l
– un collegamentod
– una cartellaa
– un filer
– un file in sola letturah
– un file nascostos
– un file di sistema
Get-ChildItem d:\*.doc -recurse
invece ci permette di cercare tutti i file con estensione .doc nell’intero disco fisso D.
Se invece volessimo trovare tutti i file che contengo nel nome una determinata stringa possiamo usare questo comando: Get-ChildItem d:\*turbolab*.doc -recurse
Se vi serve solo l’elenco di file e cartelle, senza tutti gli altri dati, basta aggiungere -name
al comando.
Per trovare i file con una, o più di una, determinata estensione si utilizza questo comando Get-ChildItem -Path C:\windows\* -Include ("*.log","*.txt") -Name
, se ci interessano i dati completi si toglie l’opzione -name, se si vuole cercare in tutte le sotto cartelle all’interno di c:\windows si aggiunge -recurse.
Se invece vogliamo escludere alcuni tipi di file dall’elenco basta solo cambiare l’opzione presente nel comando. Così Get-ChildItem -Path C:\windows\* -exclude ("*.log","*.txt") -Name
visualizza tutti gli altri file e cartelle tranne i .log e .txt.
I filtri
Possiamo estrapolare dati in base alla tipologia o agli attributi del file o della cartella.
Get-ChildItem C:\Windows -Directory
elenca tutte le cartelle presenti in c:\windows.Get-ChildItem C:\Windows -file
mostra tutti i file presenti della cartella c:\windows
Invece questi comandi mostrano tutti i Mode (la colonna a sinistra) presenti sempre in c:\windows, i file possono avere anche più caratteristiche, quindi potrebbero essere presenti in più di un elenco.
Get-ChildItem C:\Windows -Hidden
Get-ChildItem C:\Windows -ReadOnly
Get-ChildItem C:\Windows -System
Get-ChildItem C:\Windows -attributes a
(altre lettere utilizzabili sono d, r, h, s). Le lettere nell’ultimo comando possono essere usate in combinazione tra di loro, basta separarle con una virgola Get-ChildItem C:\Windows -attributes a, r
Un altro filtro che ci può tornare utile, se vogliamo trovare tutti i file modificati o creati nelle ultime 24 ore è questo: Get-ChildItem -Path d:\ -recurse | Where-Object { $_.LastWriteTime -gt (Get-Date).AddHours(-24) }
Invece Get-ChildItem -Path "D:\Dati Personali\Lettere\Articoli Turbolab.it" -recurse | Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-7)}
mi trova gli articoli a cui ho lavorato, e archiviato, negli ultimi sette giorni.
Se invece volete trovare i file più grandi di una certa dimensione, presenti in un percorso specificato, potete utilizzare questo comando:
Get-ChildItem -Path d:\iso -Recurse | Where-Object { $_.Length -gt 1GB } | Select-Object Name, Directory, Length
Attenzione: se il percorso della cartella indicata ha un nome molto lungo questo taglia la visualizzazione della dimensione (Lenght) del file.
Conteggio file
Se vi serve sapere quanti file sono contenuti in una cartella, e in tutte le sue sotto cartelle, ci sono due comandi da poter utilizzare:
(Get-ChildItem -Path "D:\Dati Personali\Lettere\Articoli Turbolab.it" -recurse -File).count
(Get-ChildItem "D:\Dati Personali\Lettere\Articoli Turbolab.it" -File -Recurse | Measure-Object).count