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
Può succedere che i file debbano essere cancellati regolarmente o copiati altrove. Questo non è un problema in sé, purché tu sappia un po ‘di scripting. Ma molte persone non arrivano così lontano, comprano semplicemente il prodotto successivo, si spera non Total Commander, ma “Super Copy”. La barra degli strumenti Ask verrà quindi installata contemporaneamente. Successivamente, ci sono molte discussioni sulle vulnerabilità di Windows. Ironia spenta.
PowerShell offre cmdlet Item completi. Li chiamo Item Family.
1
|
Get-Command -Noun Item |
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 |
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\ |
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 |
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' |
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 |
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 |
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 |
Perché non Remove-Item -Include *. * -Recurse? Bene, ho scoperto che ci sono alcuni problemi quando si combinano filtri e ricorsione: