Uso di file, cartelle e chiavi del Registro di sistema

Questo esempio si applica solo alle piattaforme Windows.

PowerShell usa il sostantivo Item per fare riferimento agli elementi trovati in un'unità di PowerShell. Quando si usa il provider FileSystem di PowerShell, un elemento potrebbe essere un file, una cartella o l'unità di PowerShell. La visualizzazione e l'uso di questi elementi rappresentano attività di base fondamentali nella maggior parte delle impostazioni amministrative, quindi verranno descritte in dettaglio.

Enumerazione di file, cartelle e chiavi del Registro di sistema

Poiché il recupero di una raccolta di elementi da una specifica posizione è un'attività molto comune, il cmdlet Get-ChildItem è stato progettato specificamente per restituire tutti gli elementi presenti in un contenitore, ad esempio una cartella.

Se si desidera restituire tutti i file e le cartelle contenuti direttamente all'interno della cartella C:\Windows, digitare:

PS> Get-ChildItem -Path C:\Windows
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2006-05-16   8:10 AM          0 0.log
-a---        2005-11-29   3:16 PM         97 acc1.txt
-a---        2005-10-23  11:21 PM       3848 actsetup.log
...

L'elenco è simile a quello visualizzato quando si immette il dir comando in cmd.exeo il ls comando in una shell dei comandi UNIX.

È possibile eseguire elenchi complessi usando i parametri del Get-ChildItem cmdlet . È possibile visualizzare la sintassi del cmdlet Get-ChildItem digitando:

Get-Command -Name Get-ChildItem -Syntax

Questi parametri possono essere combinati in vari modi per ottenere un output estremamente personalizzato.

Elenco di tutti gli elementi contenuti

Per visualizzare sia gli elementi all'interno di una cartella di Windows sia quelli contenuti nelle sottocartelle, usare il parametro Recurse di Get-ChildItem. L'elenco visualizza tutto il contenuto della cartella di Windows e tutti gli elementi delle relative sottocartelle. Ad esempio:

PS> Get-ChildItem -Path C:\WINDOWS -Recurse

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS\AppPatch
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM    1852416 AcGenral.dll
...

Filtro degli elementi in base al nome

Per visualizzare solo i nomi degli elementi, usare il parametro Name di Get-Childitem:

PS> Get-ChildItem -Path C:\WINDOWS -Name
addins
AppPatch
assembly
...

Elencare forzatamente gli elementi nascosti

Gli elementi nascosti in Esplora file o cmd.exe non vengono visualizzati nell'output di un Get-ChildItem comando. Per visualizzare gli elementi nascosti, usare il parametro Force di Get-ChildItem. Ad esempio:

Get-ChildItem -Path C:\Windows -Force

Questo parametro è denominato Force perché è possibile eseguire forzatamente l'override del comportamento normale del Get-ChildItem comando. Force è un parametro ampiamente usato che forza un'azione che un cmdlet normalmente non esegue, anche se non può eseguire alcuna azione che comprometta la sicurezza del sistema.

Corrispondenza dei nomi degli elementi con caratteri jolly

Il comando Get-ChildItem accetta i caratteri jolly nel percorso degli elementi da elencare.

Poiché la corrispondenza con caratteri jolly viene gestita dal motore di PowerShell, tutti i cmdlet che accettano caratteri jolly usano la stessa notazione e hanno lo stesso comportamento di corrispondenza. La notazione con caratteri jolly di PowerShell include:

  • L'asterisco (*) trova la corrispondenza con zero o più occorrenze di qualsiasi carattere.
  • Il punto interrogativo (?) trova la corrispondenza con un unico carattere.
  • La parentesi quadra sinistra ([) e quella destra (]) racchiudono un set di caratteri di cui trovare la corrispondenza.

Ecco alcuni esempi del funzionamento dei caratteri jolly.

Per trovare tutti i file nella directory Windows con il suffisso .log e un nome di base costituito esattamente da cinque caratteri, immettere il comando seguente:

PS> Get-ChildItem -Path C:\Windows\?????.log

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
...
-a---        2006-05-11   6:31 PM     204276 ocgen.log
-a---        2006-05-11   6:31 PM      22365 ocmsn.log
...
-a---        2005-11-11   4:55 AM         64 setup.log
-a---        2005-12-15   2:24 PM      17719 VxSDM.log
...

Per trovare tutti i file che iniziano con la lettera x nella directory Windows, digitare:

Get-ChildItem -Path C:\Windows\x*

Per trovare tutti i file che iniziano con "x" o "z", digitare:

Get-ChildItem -Path C:\Windows\[xz]*

Per altre informazioni sui caratteri jolly, vedere about_Wildcards.

Esclusione di elementi

È possibile escludere elementi specifici usando il parametro Exclude di Get-ChildItem. In questo modo è possibile eseguire complesse operazioni di filtro in un'unica istruzione.

Si supponga ad esempio di voler trovare la DLL di Windows Time Service nella cartella System32 e che non si ricordi il nome della DLL, ma solo che inizia con "W" e che contiene "32".

Un'espressione come w*32*.dll troverà tutte le DLL che soddisfano le condizioni, ma potrebbe essere necessario filtrare ulteriormente i file e omettere eventuali file win32. È possibile omettere questi file usando il parametro Exclude con il modello win*:

PS> Get-ChildItem -Path C:\WINDOWS\System32\w*32*.dll -Exclude win*

    Directory: C:\WINDOWS\System32

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           3/18/2019  9:43 PM         495616 w32time.dll
-a---           3/18/2019  9:44 PM          35328 w32topl.dll
-a---           1/24/2020  5:44 PM         401920 Wldap32.dll
-a---          10/10/2019  5:40 PM         442704 ws2_32.dll
-a---           3/18/2019  9:44 PM          66048 wsnmp32.dll
-a---           3/18/2019  9:44 PM          18944 wsock32.dll
-a---           3/18/2019  9:44 PM          64792 wtsapi32.dll

Combinazione dei parametri Get-ChildItem

È possibile usare diversi parametri del cmdlet Get-ChildItem nello stesso comando. Prima di combinare i parametri, assicurarsi di comprendere la ricerca di corrispondenze con caratteri jolly. Ad esempio, il comando seguente non restituisce risultati:

Get-ChildItem -Path C:\Windows\*.dll -Recurse -Exclude [a-y]*.dll

Non ci sono risultati, nonostante ci siano due DLL che iniziano con la lettera "z" nella cartella Windows.

Il motivo è che nel percorso è stato specificato il carattere jolly. Anche se il comando è ricorsivo, il cmdlet Get-ChildItem restituisce solo gli elementi che si trovano nella cartella Windows e i cui nomi terminano con .dll.

Per specificare una ricerca ricorsiva dei file i cui nomi corrispondono a un modello specifico, usare il parametro Include.

PS> Get-ChildItem -Path C:\Windows -Include *.dll -Recurse -Exclude [a-y]*.dll

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\System32\Setup

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM       8261 zoneoc.dll

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\System32

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2004-08-04   8:00 AM     337920 zipfldr.dll