PowerShell – Gestione del File System

Proseguiamo il nostro viaggio con PowerShell andando a vedere come eseguire operazioni comuni sul filesystem. Avete già letto PowerShell – Introduzione?

Comandi Fondamentali per Esplorare il Filesystem

Visualizzare la posizione corrente: Get-Location (alias: pwd)

Il primo step è capire dove siamo nel filesystem. Possiamo usare due comandi:

Get-Location oppure pwd (di derivazione *nix):

Figura 1: dove sono?

Cambiare cartella: Set-Location (alias: cd)

Anche per cambiare cartella possiamo usare due comandi:

Set-Location Oppure (con tanta fantasia…) CD

Possiamo usare tutte le scorciatoie che siamo abituati ad usare:

Figura 2: cambio cartella

Elencare file e cartelle: Get-ChildItem (alias: ls, dir)

Qui invece abbiamo addirittura e opzioni: Get-ChildItem, ls o dir

In particolare, Get-ChildItem ha alcune opzioni interessanti

Mostra file e cartelle con dettagli

Mostra file nascosti

Mostra ricorsivamente tutte le sottocartelle

Mostra solo file con estensione .txt

Mostra solo i file di testo nella cartella e in tutte le sottocartelle

Figura 3.

Figura 4: opzioni interessanti di Get-ChildItem

Creare File e Cartelle: New-Item

Il cmdlet New-Item consente di creare oggetti (file, cartelle, Chiavi di registro).

La sintassi è: New-Item [-Path] <string> [-Name] <string> [-ItemType] <string> [-Value <Object>] [-Force] [-Credential <pscredential>] [-WhatIf] [-Confirm] [<CommonParameters>]

Parametri di New-Item

Parametro Descrizione
-Path Specifica il percorso in cui verrà creato il nuovo elemento.
-Name Specifica il nome del nuovo elemento.
-ItemType Specifica il tipo di elemento da creare (es. file, directory, chiave di registro).
-Value Imposta il valore del nuovo elemento.
-Force Forza il cmdlet a creare l’elemento anche se esiste già.
-Credential Specifica l’account utente che ha il permesso di eseguire questa azione.
-WhatIf Mostra cosa succederebbe se il cmdlet venisse eseguito.
-Confirm Richiede conferma prima di eseguire il cmdlet.

Il parametro -ItemType è particolare: Se fa riferimento al FileSystem può contenere questi valori: File, Directory, SymbolicLink, HardLink e Junction; se punta ai Certificati, può essere: Certificate Provider, Certificate. Store e StoreLocation.

Attenzione al -Force: il parametro Force sovrascrive l’oggetto esistente! sia che sia un file sia una cartella, sia una registry key

Creare una cartella è semplicissimo:

Anche la creazione di un File:

Possiamo anche creare più file in un solo passaggio:

o creare un file con del contenuto:

Figura 5: New-Item

Ovviamente possiamo concatenare I comandi:

Figura 6: concatenare cmdlet

Oppure in modo più leggibile ed elegante

Leggere il Contenuto dei File: Get-Content

Il cmdlet Get-Content è il cmdlet di PowerShell che legge e restituisce il contenuto di un oggetto (file, Chiavi di registro)

Anche in questo caso abbiamo diverse possibilità:

La sintassi minima è semplice:

Però si possono usare numerosi parametri:
Get-Content [-Path] <String[]> [-ReadCount <Int64>] [-TotalCount <Int64>] [-Tail <Int32>] [-Filter <String>] [-Include <String[]>] [-Exclude <String[]>] [-Force] [-Credential <PSCredential>] [-Delimiter <String>] [-Wait] [-Raw] [-Encoding <Encoding>]

Parametri di Get-Content

Parametro Descrizione
-Path Specifica il percorso del file da leggere.
-LiteralPath Come -Path, ma tratta i caratteri speciali in modo letterale (es. [, ]).
-TotalCount Legge solo le prime N righe del file.
-Tail Legge solo le ultime N righe del file.
-ReadCount Specifica quante righe inviare alla pipeline alla volta.
-Encoding Specifica la codifica del file (es. UTF8, ASCII, Unicode).
-Raw Restituisce l’intero contenuto come una singola stringa invece che riga per riga.
-Wait Mantiene il file aperto e continua a leggere nuovi contenuti (simile a tail -f su Linux).
-Delimiter Usa un delimitatore personalizzato al posto del fine riga.
-Force Legge file nascosti o di sola lettura.
-Credential Specifica le credenziali utente per accedere al file.

Alcuni esempi:

Leggere solo le prime 5 righe

Leggere solo le ultime 5 righe

Leggere in tempo reale le ultime 5 righe

Cercare del testo in un File: Select-String o sls

Il cmdlet Select-String consente di cercare testo (o pattern) anche utilizzando Regular Expression (regex) in stringhe o file

La sintassi è semplice:

Select-String -Pattern “testoDaCercare” -Path “C:\percorso\file.txt”

ma anche in questo caso le opzioni sono veramente numerose:
Select-String [-Pattern] <String[]> [-Path] <String[]> [-SimpleMatch] [-CaseSensitive] [-Quiet] [-List] [-NotMatch] [-AllMatches] [-Encoding <Encoding>] [-Context <Int32[]>] [-Culture <String>] [-NoEmphasis] [-Filter <String>] [-Include <String[]>] [-Exclude <String[]>] [<CommonParameters>]

Parametri di Select-String

Parametro Descrizione
-Pattern Specifica il testo o l’espressione regolare da cercare.
-Path Specifica il percorso del file o dei file in cui cercare.
-LiteralPath Come -Path, ma tratta i caratteri speciali in modo letterale.
-InputObject Accetta l’input direttamente dalla pipeline invece che da un file.
-CaseSensitive Rende la ricerca sensibile alle maiuscole/minuscole.
-NotMatch Restituisce le righe che non corrispondono al pattern.
-SimpleMatch Tratta il pattern come testo semplice, disabilitando le espressioni regolari.
-AllMatches Trova tutte le corrispondenze in ogni riga, non solo la prima.
-Quiet Restituisce solo True o False invece delle righe corrispondenti.
-List Restituisce solo il primo risultato per ogni file.
-Include Filtra i file da includere nella ricerca (es. *.txt).
-Exclude Filtra i file da escludere dalla ricerca.
-Encoding Specifica la codifica del file da leggere (es. UTF8, ASCII).
-Context Mostra N righe di contesto prima e dopo ogni corrispondenza.

Esempi:

Cerca una parola in un file

Verifica la presenza di una parola in un file

Cerca una parola in più file

Cerca una parola in un file e fa vedere le N riighe prima, dopo della riga con la parola (utilissimo per sgrufolare noi log!)

Figura 7: Select-String

Cercare un eventID nel log di sistema

Ci si aspetterebbe

Invece bisogna usare

Anche se questa sintassi è deprecata. Per confondere i russi bisogna usare

Che però ha un senso lavorando ad oggetti: il che significa che se volessimo cercare ad esempio tutti gli errori ci basta sostituire $_.Id -eq “7023” con $_.LevelDisplayName -eq “Error” o con $_.Message se volessimo cercare un messaggio in particolare

Sovrascrivere il contenuto di un file: Set-Content

Il cmdlet Set-Content che sostituisce il contenuto di un file con un nuovo testo. se il file è vuoto lo crea e lo popola

È il complemento di Get-Content: mentre quest’ultimo legge, Set-Content scrive.

Fa coppia con di Add-Content, che invece di sovrascrive completamente il contenuto esistente, aggiune al fondo il testo Set-Content -Path “documento.txt” -Value “Nuovo contenuto”

Attenzione: Set-Content sovrascrive il contenuto precedente!

Sovrascrivere il contenuto di un file

Figura 8: Set-Content (SOVRASCRIVE)

Sovrascrivere il contenuto di un file con più righe

Oppure

Set-Content e variabili

Figura 9: Set-Content multilinea e variabili

Aggiungere contenuto ad un file: Add-Content

il cmdlet Add-Content aggiunge contenuto in coda a un file esistente, senza sovrascriverlo.

Se il file non esite lo crea automaticamente. Quindi per sicurezza conviene spesso usare Add -Content invece di Set-Content. Al massimo ci troviamo più linee 😉

Aggiungo una riga al fondo del file

Aggiungo una variabile

Aggiungo più linee

Figura 10: Add-Content

Fare ordine nel File System

Qui PowerShell cala il poker: Copy-Item, Move-Item, Rename-Item e Remove-Item.

Copiare file: Copy-Item (alias: cp)

Il cmdlet Copy-Item copia file e cartelle da un percorso a un altro. Non elimina gli elementi sorgente ma se esiste già la destinazione sovrascrive il contenuto

Sintassi:

Copy-Item [-Path] <string[]> [[-Destination] <string>] [-Recurse] [-Force] [-Filter <string>] [-Include <string[]>] [-Exclude <string[]>] [-PassThru] [-WhatIf] [-Confirm]

Parametri di Copy-Item

Parametro Descrizione
-Path File o cartella sorgente da copiare
-Destination Cartella o file di destinazione
-Recurse Include tutte le sottocartelle nella copia
-Force Sovrascrive i file esistenti senza chiedere conferma
-Filter Filtra i file per pattern (es. *.txt)
-Include Include solo i file che corrispondono al pattern specificato
-Exclude Esclude i file che corrispondono al pattern specificato
-WhatIf Simula l’operazione senza eseguirla realmente
-PassThru Restituisce l’oggetto copiato come output
-Confirm Chiede conferma prima di eseguire ogni copia


Copio un file con un nome nuovo

Copio tutto il contento di una cartella in una cartella nuova


Copio solo i file di un certo tipo

NOTA: visto che la cartella progetto non contiene file .txt il comando non ha creato la sottocartella progetto



Spostare file: Move-Item (alias: mv o move)

Il cmdlet Move-Item sposta file e cartelle da un percorso a un altro. Attenzione se esiste già l’oggetto di destinazione Fallisce. Se si sposta un file nello stesso percorso è come se lo rinominassi.

Sintassi:

Move-Item [-Path] <string[]> [[-Destination] <string>] [-Force] [-Filter <string>] [-Include <string[]>] [-Exclude <string[]>] [-PassThru] [-WhatIf] [-Confirm]

Parametri di Move-Item

Parametro Descrizione
-Path File o cartella da eliminare
-Recurse Elimina anche tutto il contenuto della cartella
-Force Elimina anche file nascosti o di sola lettura
-Filter Filtra per pattern (es. *.txt)
-Include Include solo certi file
-Exclude Esclude certi file
-WhatIf Simula senza eseguire
-Confirm Chiede conferma prima di eliminare

Esempi:

Spostare un file:

Spostare tutti i file .txt

Spostare una cartella intera

spostare un file nello stesso percorso (è lo stesso che rinominarlo)

Spostare e rinominare un file in un solo passaggio:

Si può anche dare la Move-Item di folder. In questo caso è come se si facesse un rename della cartella

NOTA: la keyword -Destination si può omettere

Rinominare file: Rename-Item (alias: ren)

Il cmdlet Rename-Item rinomina file e cartelle nello stesso percorso.

Sitassi:

Rename-Item [-Path] <string> [-NewName] <string> [-Force] [-PassThru] [-WhatIf] [-Confirm]

Parametri di Rename-Item

Parametro Descrizione
-Path File o cartella da rinominare
-NewName Nuovo nome (solo nome, senza percorso)
-Force Sovrascrive senza conferma
-PassThru Restituisce l’oggetto rinominato
-WhatIf Simula senza eseguire
-Confirm Chiede conferma prima di eseguire

Esempi:

Rinominare un file

Rinominare una cartella

Alcuni giochi più simpatici

Rinominare aggiungendo la data al nome del file

Cambiare estensione da .txt a .log

Rinominare tutti i .txt dentro una cartella aggiungendo il prefisso “OLD_”

Rinominare tutti i file di una Cartella sostituendo gli spazi con underscore

rinominare in sequenza (File_001.txt, File_002.txt, File_003.txt), tutti i file .*txt dentro una cartella

Eliminare file e cartelle: Remove-Item (alias: rm)

Il cmdlet Remove-Item elimina file e cartelle.

ATTENZIONE: non usa il cestino. La cancellazione è definitiva

Remove-Item [-Path] <string[]> [-Recurse] [-Force] [-Filter <string>] [-Include <string[]>] [-Exclude <string[]>] [-WhatIf] [-Confirm]

Parametri di Remove-Item

Parametro Descrizione
-Path File o cartella da eliminare
-Recurse Elimina anche tutto il contenuto della cartella
-Force Elimina anche file nascosti o di sola lettura
-Filter Filtra per pattern (es. *.txt)
-Include Include solo certi file
-Exclude Esclude certi file
-WhatIf Simula senza eseguire
-Confirm Chiede conferma prima di eliminare

Eliminare un file

Eliminare tutti i file .txt nella cartella corrente

Eliminare una cartella con tutto il contenuto

Forzare l’eliminazione di un file di sola lettura o nascosto

Eliminare con richiesta di conferma

Eliminare solo i file più vecchi di 30 giorni

Attenzione: L’eliminazione è permanente! Non c’è un cestino in PowerShell.

Informazioni su File e Cartelle

Ottenere informazioni dettagliate: Get-Item

Il cmdlet Get-Item restituisce l’oggetto (file o cartella) indicato, con le sue proprietà principali.

Output:

Visualizzare proprietà specifiche: Get-ItemProperty

Esempi utili:

Ottenere solo la data di modifica

Ottenere solo la dimensione in byte

Ottenere la dimensione in KB

Ottenere tutte le proprietà di un file

Calcolare la dimensione di una cartella

Questo comando mostra la dimensione totale di una cartella in megabyte.

Esempi:

Dimensione della cartella corrente

Dimensione di una cartella specifica in GB

Operazioni Avanzate e Utili

Trovare file per nome: Where-Object

Esempi:

Trovare tutti i file .pdf nella cartella

Trovare file modificati negli ultimi 7 giorni

Trovare file vuoti

Ordinare file per data: Sort-Object

Esempi:

Mostrare i file più recenti per primi

Ordinare per dimensione (dal più grande)

Ordinare per nome alfabetico

Creare cartelle e file in batch

Creare una struttura di cartelle e di file di configurazione per un nuovo progetto:

Creare una struttura di cartelle

Creare file di configurazione

Verificare se un file o cartella esiste: Test-Path

Se il file esiste Test-Path restituisce True, altrimenti False.

Esempi:

Verificare se un file esiste

Verificare se una cartella esiste

Esempi Pratici Completi

Esempio 1: Fare un backup di una cartella

Esempio 2: Pulire i file vecchi

Esempio 3: Rinominare batch di file

Esempio 4: Generare un rapporto delle dimensioni

Consigli Utili per Principianti

  1. Usa i tab per completare i percorsi: Scrivi parte di un percorso e premi TAB per far completare a PowerShell.
  2. Leggi gli errori con attenzione: PowerShell di solito dà messaggi di errore chiari e utili.
  3. Usa -Confirm prima di operazioni pericolose: Questo chiederà una conferma prima di eliminare o sovrascrivere file.
  4. Copia i comandi complessi in un blocco note prima: Facilita la correzione di errori di sintassi.
  5. Usa Get-Help: Per sapere come usare un comando, digita Get-Help Get-ChildItem per vedere i dettagli.
  6. Lavora sempre in cartelle di test all’inizio: Prima di fare operazioni importanti, prova su file di test.

Riepilogo dei Comandi Essenziali

Operazione Comando Alias
Cartella corrente Get-Location pwd
Cambiare cartella Set-Location cd
Elencare file Get-ChildItem ls, dir
Creare cartella New-Item -ItemType Directory mkdir
Creare file New-Item -ItemType File
Leggere file Get-Content cat, type
Cercare testo Select-String sls
Sovrascrivere contenuto Set-Content
Aggiungere contenuto Add-Content >>
Copiare Copy-Item cp
Spostare Move-Item mv, move
Rinominare Rename-Item ren
Eliminare Remove-Item rm, del
Informazioni file Get-Item
Esiste? Test-Path

Conclusione

PowerShell è uno strumento incredibilmente potente per gestire file e cartelle. Anche se all’inizio potrebbe sembrare complesso, con la pratica diventerà naturale. Inizia con i comandi semplici, poi passa gradualmente a quelli più avanzati.

Ricorda: il modo migliore per imparare è fare pratica! Apri PowerShell e inizia a sperimentare con questi comandi su file rigorosamente di test.

Alcune note su quello che ho fatto o notato:

Output di Get-Item: l’ho messo in un

Ecco l’articolo aggiornato. Ora ogni … esatto è diventato

, comprese le occorrenze inline (-Destination, Get-Item, Test-Path, True, False) e l’output di Get-Item.

html
Copio solo i file di un certo tipo

NOTA: visto che la cartella progetto non contiene file .txt il comando non ha creato la sottocartella progetto



Spostare file: Move-Item (alias: mv o move)

Il cmdlet Move-Item sposta file e cartelle da un percorso a un altro. Attenzione se esiste già l’oggetto di destinazione Fallisce. Se si sposta un file nello stesso percorso è come se lo rinominassi.

Sintassi:

Parametri di Move-Item

Parametro Descrizione
-Path File o cartella da eliminare
-Recurse Elimina anche tutto il contenuto della cartella
-Force Elimina anche file nascosti o di sola lettura
-Filter Filtra per pattern (es. *.txt)
-Include Include solo certi file
-Exclude Esclude certi file
-WhatIf Simula senza eseguire
-Confirm Chiede conferma prima di eliminare

Esempi:

Spostare un file:

Spostare tutti i file .txt

Spostare una cartella intera

spostare un file nello stesso percorso (è lo stesso che rinominarlo)

Spostare e rinominare un file in un solo passaggio:

Si può anche dare la Move-Item di folder. In questo caso è come se si facesse un rename della cartella

NOTA: la keyword

 

Rinominare file: Rename-Item (alias: ren)

Il cmdlet Rename-Item rinomina file e cartelle nello stesso percorso.

Sitassi:

Parametri di Rename-Item

Parametro Descrizione
-Path File o cartella da rinominare
-NewName Nuovo nome (solo nome, senza percorso)
-Force Sovrascrive senza conferma
-PassThru Restituisce l’oggetto rinominato
-WhatIf Simula senza eseguire
-Confirm Chiede conferma prima di eseguire

Esempi:

Rinominare un file

Rinominare una cartella

Alcuni giochi più simpatici

Rinominare aggiungendo la data al nome del file

Cambiare estensione da .txt a .log

Rinominare tutti i .txt dentro una cartella aggiungendo il prefisso “OLD_”

Rinominare tutti i file di una Cartella sostituendo gli spazi con underscore

rinominare in sequenza (File_001.txt, File_002.txt, File_003.txt), tutti i file .*txt dentro una cartella

Eliminare file e cartelle: Remove-Item (alias: rm)

Il cmdlet Remove-Item elimina file e cartelle.

ATTENZIONE: non usa il cestino. La cancellazione è definitiva

Parametri di Remove-Item

Parametro Descrizione
-Path File o cartella da eliminare
-Recurse Elimina anche tutto il contenuto della cartella
-Force Elimina anche file nascosti o di sola lettura
-Filter Filtra per pattern (es. *.txt)
-Include Include solo certi file
-Exclude Esclude certi file
-WhatIf Simula senza eseguire
-Confirm Chiede conferma prima di eliminare

Eliminare un file

Eliminare tutti i file .txt nella cartella corrente

Eliminare una cartella con tutto il contenuto

Forzare l’eliminazione di un file di sola lettura o nascosto

Eliminare con richiesta di conferma

Eliminare solo i file più vecchi di 30 giorni

Attenzione: L’eliminazione è permanente! Non c’è un cestino in PowerShell.

Informazioni su File e Cartelle

Ottenere informazioni dettagliate: Get-Item

Il cmdlet

restituisce l’oggetto (file o cartella) indicato, con le sue proprietà principali.

Output:

Visualizzare proprietà specifiche: Get-ItemProperty

Esempi utili:

Ottenere solo la data di modifica

Ottenere solo la dimensione in byte

Ottenere la dimensione in KB

Ottenere tutte le proprietà di un file

Calcolare la dimensione di una cartella

Questo comando mostra la dimensione totale di una cartella in megabyte.

Esempi:

Dimensione della cartella corrente

Dimensione di una cartella specifica in GB

Operazioni Avanzate e Utili

Trovare file per nome: Where-Object

Esempi:

Trovare tutti i file .pdf nella cartella

Trovare file modificati negli ultimi 7 giorni

Trovare file vuoti

Ordinare file per data: Sort-Object

Esempi:

Mostrare i file più recenti per primi

Ordinare per dimensione (dal più grande)

Ordinare per nome alfabetico

Creare cartelle e file in batch

Creare una struttura di cartelle e di file di configurazione per un nuovo progetto:

Creare una struttura di cartelle

Creare file di configurazione

Verificare se un file o cartella esiste: Test-Path

Se il file esiste

restituisce

, altrimenti

.

Esempi:

Verificare se un file esiste

Verificare se una cartella esiste

Esempi Pratici Completi

Esempio 1: Fare un backup di una cartella

Esempio 2: Pulire i file vecchi

Esempio 3: Rinominare batch di file

Esempio 4: Generare un rapporto delle dimensioni

Consigli Utili per Principianti

  1. Usa i tab per completare i percorsi: Scrivi parte di un percorso e premi TAB per far completare a PowerShell.
  2. Leggi gli errori con attenzione: PowerShell di solito dà messaggi di errore chiari e utili.
  3. Usa -Confirm prima di operazioni pericolose: Questo chiederà una conferma prima di eliminare o sovrascrivere file.
  4. Copia i comandi complessi in un blocco note prima: Facilita la correzione di errori di sintassi.
  5. Usa Get-Help: Per sapere come usare un comando, digita Get-Help Get-ChildItem per vedere i dettagli.
  6. Lavora sempre in cartelle di test all’inizio: Prima di fare operazioni importanti, prova su file di test.

Riepilogo dei Comandi Essenziali

Operazione Comando Alias
Cartella corrente Get-Location pwd
Cambiare cartella Set-Location cd
Elencare file Get-ChildItem ls, dir
Creare cartella New-Item -ItemType Directory mkdir
Creare file New-Item -ItemType File
Leggere file Get-Content cat, type
Cercare testo Select-String sls
Sovrascrivere contenuto Set-Content
Aggiungere contenuto Add-Content >>
Copiare Copy-Item cp
Spostare Move-Item mv, move
Rinominare Rename-Item ren
Eliminare Remove-Item rm, del
Informazioni file Get-Item
Esiste? Test-Path

Conclusione

PowerShell è uno strumento incredibilmente potente per gestire file e cartelle. Anche se all’inizio potrebbe sembrare complesso, con la pratica diventerà naturale. Inizia con i comandi semplici, poi passa gradualmente a quelli più avanzati.

Ricorda: il modo migliore per imparare è fare pratica! Apri PowerShell e ini