Crea sito
21 Ottobre 2020

Officine Informatiche Roma

ICT SERVICES ROMA – BAZAAR INFORMATICO

Corso Powershell Lezione 9 – Get Move Copy Remove Item

3 min read

Altra lezione su PowerShell come gestire file e cartelle coi comandi

Get-Item Move-Item Copy-Item Remove-Iterm

 

 

 

Copia elemento e Rimuovi elemento: automatizza le operazioni di copia ed eliminazione

PowerShell offre cmdlet Item completi. Li chiamo Item Family.

1
Get-Command -Noun Item

1.PNG

In questo articolo vorrei concentrarmi su due cmdlet: Copy-Item e Remove-Item.

Copia articolo

Il comando seguente copia un file C: \ Temp \ pwd.txt in C: \ Temp1 \.

1
Copy-Item -Path C:\Temp\pwd.txt -Destination C:\Temp1\ -Verbose

2.PNG

Il parametro dettagliato può essere omesso. È lì solo per mostrare cosa succede.

Copia di cartelle e sottocartelle

Che ne dici di copiare l’intero contenuto della directory comprese le sottodirectory? Per questo, usa il parametro Recurse.

1
Copy-Item -Path C:\Temp\ -Destination C:\Temp1\ -Recurse -Verbose

Copia solo file

Per copiare solo i file senza la cartella e la struttura delle cartelle posso pensare a 2 esempi.

Utilizzo di Get-ChildItem con il parametro File e invio di tutti i file tramite la pipe a Copy-Item.

1
Get-ChildItem C:\Temp\ -File -Recurse | Copy-Item -Destination C:\Tempnew\

Unbenannt.PNG

Oppure utilizzando Where-Object e specificando che le cartelle, che significa contenitori, non devono essere copiate.

1
Get-ChildItem "C:\Temp\*" -Force -Recurse | Where-Object { -not $_.PSIsContainer } | Copy-Item -Destination C:\Tempnew\ -Verbose

Unbenannt.PNG

Copia di file di un tipo di file specifico

Supponiamo di voler copiare solo file di testo, ovvero tutti i file con estensione file txt. A tale scopo, possiamo utilizzare il parametro filter, incluso nel cmdlet Copy-Item.

Il comando seguente copia tutti i file di testo, ma non la cartella stessa. Notare l’asterisco * dopo il nome della cartella e il filtro.

1
Copy-Item -Path C:\temp\* -Destination C:\Temptxt -Filter '*.txt'

Unbenannt.PNG

Copia in sessioni remote

Conosci le connessioni remote di PowerShell? Enter-PSSession e New-PSSession sono i tuoi amici quando si tratta di remoting. Due esempi da me:

Copia di tutte le cartelle e file da C: \ Temp su dc01 a C: \ Temp su client01. Nota che ho effettuato l’accesso a dc01. La gestione remota su client01 è abilitata (winrm qc).

1
Copy-Item -Path C:\Temp\ -Destination C:\ -ToSession (New-PSSession -ComputerName Client01) -Recurse

1.PNG

Per copiare tutti quei file, utilizzare il parametro FromSession.

1
Copy-Item -Path C:\Temp\ -Destination C:\ -FromSession (New-PSSession -ComputerName Client01) -Recurse

Rimuovi oggetto

Il cmdlet Remove-Item consente di rimuovere gli elementi, il che significa non solo i file, ma anche tutti gli altri elementi. In PowerShell tutto è un oggetto e un oggetto!

1
Remove-Item -Path C:\Temp\hotfixes.htm -Verbose

Per mostrarti come eliminare le voci di registro, voglio solo prendere l’esempio dalla Guida di Remove-Item. Questo comando elimina le chiavi di registro OldApp.

1
Remove-Item hklm:\software\mycompany\OldApp -Recurse

Per eliminare solo i file txt in una cartella e le sue sottocartelle vengono eseguite

1
Remove-Item -Include *.txt -Recurse -Path C:\Temp1\ -Verbose

1.PNG

Automatizza la copia e la rimozione dei lavori

Adesso veniamo al punto. Come dice il titolo, voglio mostrarti come automatizzare tutto questo. Supponiamo di avere il seguente scenario.

  • Tutti i file di una cartella e della relativa sottocartella verranno copiati come backup in una cartella di destinazione

  • Successivamente i file nella cartella di origine dovrebbero essere eliminati. Dovremmo fare attenzione che la struttura delle cartelle della cartella di origine rimanga intatta, ciò significa che non dobbiamo eliminare la struttura delle cartelle

  • Il lavoro deve essere eseguito ogni sabato alle 11:00

Questo comando copia tutti i file da C: \ Original e le sue sottocartelle in C: \ Destination.

1
Copy-Item -Path C:\Original\* -Destination C:\Destination\ -Recurse -Force

E questo comando elimina tutti i file in C: \ Original.

1
Get-ChildItem -Path C:\Original\ -Include *.* -Recurse | Remove-Item -Force

Unbenannt.PNG

Perché non Remove-Item -Include *. * -Recurse? Bene, ho scoperto che ci sono alcuni problemi quando si combinano filtri e ricorsione:

 

Translate »