Copy-Item
Copia un elemento da una posizione a un'altra.
Sintassi
Copy-Item
[-Path] <String[]>
[[-Destination] <String>]
[-Container]
[-Force]
[-Filter <String>]
[-Include <String[]>]
[-Exclude <String[]>]
[-Recurse]
[-PassThru]
[-Credential <PSCredential>]
[-WhatIf]
[-Confirm]
[-FromSession <PSSession>]
[-ToSession <PSSession>]
[<CommonParameters>]
Copy-Item
-LiteralPath <String[]>
[[-Destination] <String>]
[-Container]
[-Force]
[-Filter <String>]
[-Include <String[]>]
[-Exclude <String[]>]
[-Recurse]
[-PassThru]
[-Credential <PSCredential>]
[-WhatIf]
[-Confirm]
[-FromSession <PSSession>]
[-ToSession <PSSession>]
[<CommonParameters>]
Copy-Item
[-Path] <string[]>
[[-Destination] <string>]
[-Container]
[-Force]
[-Filter <string>]
[-Include <string[]>]
[-Exclude <string[]>]
[-Recurse]
[-PassThru]
[-Credential <pscredential>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Copy-Item
[[-Destination] <string>]
-LiteralPath <string[]>
[-Container]
[-Force]
[-Filter <string>]
[-Include <string[]>]
[-Exclude <string[]>]
[-Recurse]
[-PassThru]
[-Credential <pscredential>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Descrizione
Il Copy-Item
cmdlet copia un elemento da una posizione a un'altra nello stesso spazio dei nomi.
Ad esempio, può copiare un file in una cartella, ma non può copiare un file in un'unità certificato.
Questo cmdlet non taglia o elimina gli elementi copiati. Gli elementi specifici che il cmdlet può copiare dipendono dal provider di PowerShell che espone l'elemento. Ad esempio, può copiare file e directory in un'unità del file system e chiavi e voci del Registro di sistema nell'unità del Registro di sistema.
Questo cmdlet può copiare e rinominare gli elementi nello stesso comando. Per rinominare un elemento, immettere il nuovo nome nel valore del parametro Destination . Per rinominare un elemento e non copiarlo, usare il Rename-Item
cmdlet .
Esempio
Esempio 1: Copiare un file nella directory specificata
In questo esempio il file viene mar1604.log.txt
copiato nella C:\Presentation
directory . Il file originale non viene eliminato.
Copy-Item "C:\Wabash\Logfiles\mar1604.log.txt" -Destination "C:\Presentation"
Esempio 2: Copiare il contenuto della directory in una directory esistente
In questo esempio il contenuto della C:\Logfiles
directory viene copiato nella directory esistente C:\Drawings
. La Logfiles
directory non viene copiata.
Se la Logfiles
directory contiene file nelle sottodirectory, tali sottodirectory vengono copiate con i relativi alberi dei file intatti. Per impostazione predefinita, il parametro Container è impostato su True, che mantiene la struttura di directory.
Copy-Item -Path "C:\Logfiles\*" -Destination "C:\Drawings" -Recurse
Nota
Se il percorso C:\Drawings
non esiste, il cmdlet copia tutti i file dall'albero delle Logfiles
cartelle in una singola cartella C:\Drawings
, sovrascrivendo tutti i file con lo stesso nome.
Esempio 3: Copiare directory e contenuto in una nuova directory
In questo esempio viene copiato il contenuto della C:\Logfiles
directory di origine e viene creata una nuova directory di destinazione. La nuova directory \Logs
di destinazione viene creata in C:\Drawings
.
Per includere il nome della directory di origine, copiare in una directory di destinazione esistente, come illustrato nell'esempio 2. In alternativa, assegnare alla nuova directory di destinazione lo stesso nome della directory di origine.
Copy-Item -Path "C:\Logfiles" -Destination "C:\Drawings\Logs" -Recurse
Nota
Se il percorso include \*
, tutti i contenuti del file della directory, inclusi gli alberi delle sottodirectory, vengono copiati nella nuova directory di destinazione. Ad esempio:
Copy-Item -Path "C:\Logfiles\*" -Destination "C:\Drawings\Logs" -Recurse
Esempio 4: Copiare un file nella directory specificata e rinominare il file
In questo esempio viene usato il Copy-Item
cmdlet per copiare lo Get-Widget.ps1
script dalla \\Server01\Share
directory alla \\Server12\ScriptArchive
directory . Come parte dell'operazione di copia, il comando modifica il nome dell'elemento da Get-Widget.ps1
a Get-Widget.ps1.txt
, in modo che possa essere collegato in modo sicuro ai messaggi di posta elettronica.
Copy-Item "\\Server01\Share\Get-Widget.ps1" -Destination "\\Server12\ScriptArchive\Get-Widget.ps1.txt"
Esempio 5: Copiare un file in un computer remoto
Viene creata una sessione nel computer remoto denominato Server01 con le credenziali di Contoso\User01
e archivia i risultati nella variabile denominata $Session
.
Il Copy-Item
cmdlet copia test.log
dalla D:\Folder001
cartella alla C:\Folder001_Copy
cartella nel computer remoto usando le informazioni di sessione archiviate nella $Session
variabile . Il file originale non viene eliminato.
$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "D:\Folder001\test.log" -Destination "C:\Folder001_Copy\" -ToSession $Session
Esempio 6: Copiare una cartella in un computer remoto
Viene creata una sessione nel computer remoto denominato Server01 con le credenziali di Contoso\User01
e archivia i risultati nella variabile denominata $Session
.
Il Copy-Item
cmdlet copia la D:\Folder002
cartella nella C:\Folder002_Copy
directory nel computer remoto usando le informazioni di sessione archiviate nella $Session
variabile . Le sottocartelle o i file non vengono copiati senza usare l'opzione Recurse . L'operazione crea la Folder002_Copy
cartella se non esiste già.
$Session = New-PSSession -ComputerName "Server02" -Credential "Contoso\User01"
Copy-Item "D:\Folder002\" -Destination "C:\Folder002_Copy\" -ToSession $Session
Esempio 7: Copiare in modo ricorsivo l'intero contenuto di una cartella in un computer remoto
Viene creata una sessione nel computer remoto denominato Server01 con le credenziali di Contoso\User01
e archivia i risultati nella variabile denominata $Session
.
Il Copy-Item
cmdlet copia l'intero contenuto dalla D:\Folder003
cartella alla C:\Folder003_Copy
directory nel computer remoto usando le informazioni sulla sessione archiviate nella $Session
variabile . Le sottocartelle vengono copiate con gli alberi dei file intatti. L'operazione crea la Folder003_Copy
cartella se non esiste già.
$Session = New-PSSession -ComputerName "Server04" -Credential "Contoso\User01"
Copy-Item "D:\Folder003\" -Destination "C:\Folder003_Copy\" -ToSession $Session -Recurse
Esempio 8: Copiare un file in un computer remoto e quindi rinominare il file
Viene creata una sessione nel computer remoto denominato Server01 con le credenziali di Contoso\User01
e archivia i risultati nella variabile denominata $Session
.
Il Copy-Item
cmdlet copia scriptingexample.ps1
dalla D:\Folder004
cartella alla C:\Folder004_Copy
cartella nel computer remoto usando le informazioni di sessione archiviate nella $Session
variabile . Il file originale non viene eliminato.
$Session = New-PSSession -ComputerName "Server04" -Credential "Contoso\User01"
Copy-Item "D:\Folder004\scriptingexample.ps1" -Destination "C:\Folder004_Copy\scriptingexample_copy.ps1" -ToSession $Session
Esempio 9: Copiare un file remoto nel computer locale
Viene creata una sessione nel computer remoto denominato Server01 con le credenziali di Contoso\User01
e archivia i risultati nella variabile denominata $Session
.
Il Copy-Item
cmdlet copia test.log
dalla cartella remota C:\MyRemoteData\
alla cartella locale D:\MyLocalData
usando le informazioni di sessione archiviate nella $Session
variabile . Il file originale non viene eliminato.
$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "C:\MyRemoteData\test.log" -Destination "D:\MyLocalData\" -FromSession $Session
Esempio 10: Copiare l'intero contenuto di una cartella remota nel computer locale
Viene creata una sessione nel computer remoto denominato Server01 con le credenziali di Contoso\User01
e archivia i risultati nella variabile denominata $Session
.
Il Copy-Item
cmdlet copia l'intero contenuto dalla cartella remota C:\MyRemoteData\scripts
alla cartella locale D:\MyLocalData
usando le informazioni di sessione archiviate nella $Session
variabile . Se la cartella scripts contiene file in sottocartelle, tali sottocartelle vengono copiate con i relativi alberi dei file intatti.
$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "C:\MyRemoteData\scripts" -Destination "D:\MyLocalData\" -FromSession $Session
Esempio 11: copiare in modo ricorsivo l'intero contenuto di una cartella remota nel computer locale
Viene creata una sessione nel computer remoto denominato Server01 con le credenziali di Contoso\User01
e archivia i risultati nella variabile denominata $Session
.
Il Copy-Item
cmdlet copia l'intero contenuto dalla cartella remota C:\MyRemoteData\scripts
alla cartella locale D:\MyLocalData\scripts
usando le informazioni di sessione archiviate nella $Session
variabile . Poiché viene usato il parametro Recurse , l'operazione crea la cartella scripts se non esiste già. Se la cartella scripts contiene file in sottocartelle, tali sottocartelle vengono copiate con i relativi alberi dei file intatti.
$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "C:\MyRemoteData\scripts" -Destination "D:\MyLocalData\scripts" -FromSession $Session -Recurse
Esempio 12: copiare in modo ricorsivo i file da un albero di cartelle nella cartella corrente
In questo esempio viene illustrato come copiare i file da una struttura di cartelle a più livelli in una singola cartella flat.
I primi tre comandi mostrano la struttura di cartelle esistente e il contenuto di due file, entrambi i nomi file3.txt
.
PS C:\temp\test> (Get-ChildItem C:\temp\tree -Recurse).FullName
C:\temp\tree\subfolder
C:\temp\tree\file1.txt
C:\temp\tree\file2.txt
C:\temp\tree\file3.txt
C:\temp\tree\subfolder\file3.txt
C:\temp\tree\subfolder\file4.txt
C:\temp\tree\subfolder\file5.txt
PS C:\temp\test> Get-Content C:\temp\tree\file3.txt
This is file3.txt in the root folder
PS C:\temp\test> Get-Content C:\temp\tree\subfolder\file3.txt
This is file3.txt in the subfolder
PS C:\temp\test> Copy-Item -Path C:\temp\tree -Filter *.txt -Recurse -Container:$false
PS C:\temp\test> (Get-ChildItem . -Recurse).FullName
C:\temp\test\subfolder
C:\temp\test\file1.txt
C:\temp\test\file2.txt
C:\temp\test\file3.txt
C:\temp\test\file4.txt
C:\temp\test\file5.txt
PS C:\temp\test> Get-Content .\file3.txt
This is file3.txt in the subfolder
Il Copy-Item
cmdlet ha il parametro Container impostato su $false
. In questo modo il contenuto della cartella di origine viene copiato ma non mantiene la struttura di cartelle. Si noti che i file con lo stesso nome vengono sovrascritti nella cartella di destinazione.
Esempio 13: Uso dei filtri per copiare elementi senza ricorsione
Questo esempio mostra i risultati usando il parametro Include per selezionare gli elementi da copiare.
In questo esempio viene utilizzata la struttura di cartelle seguente contenente i file da copiare:
D:\temp\tree\example.ps1
D:\temp\tree\example.txt
D:\temp\tree\examples\
D:\temp\tree\examples\example_1.txt
D:\temp\tree\examples\example_2.txt
D:\temp\tree\examples\subfolder\
D:\temp\tree\examples\subfolder\test.txt
In questo esempio viene Copy-Item
chiamato con un carattere jolly sia per i parametri Path che Include . La specifica di un carattere jolly per il parametro Path garantisce che elabora tutti i file e le cartelle corrispondenti a D:\temp\tree\*
. Il parametro Include filtra l'elenco di elementi da elaborare, limitando l'operazione solo ai percorsi che iniziano con ex
.
PS D:\temp\test\out> Copy-Item -Path D:\temp\tree\* -Include ex*
PS D:\temp\test\out> (Get-ChildItem -Recurse).FullName
D:\temp\out\examples
D:\temp\out\example.ps1
D:\temp\out\example.txt
Il parametro Include viene applicato al contenuto della D:\temp\tree
cartella per copiare tutti gli elementi corrispondenti ex*
a . Si noti che, senza ricorsione, la D:\temp\out\examples
cartella viene copiata, ma nessuno dei relativi contenuti viene copiato.
Esempio 14: Uso dei filtri per copiare elementi con ricorsione
Questo esempio mostra i risultati usando il parametro Include per selezionare gli elementi da copiare.
In questo esempio viene utilizzata la struttura di cartelle seguente contenente i file da copiare:
D:\temp\tree\example.ps1
D:\temp\tree\example.txt
D:\temp\tree\examples\
D:\temp\tree\examples\example_1.txt
D:\temp\tree\examples\example_2.txt
D:\temp\tree\examples\subfolder\
D:\temp\tree\examples\subfolder\test.txt
In questo esempio viene Copy-Item
chiamato con un carattere jolly sia per i parametri Path che Include . Se si specifica un carattere jolly per il parametro Path , si garantisce che vengano elaborati tutti i file e le cartelle corrispondenti a D:\temp\tree\*
. Il parametro Include filtra l'elenco di elementi da elaborare, limitando l'operazione solo ai percorsi che iniziano con ex
.
D:\temp\out> Copy-Item -Path D:\temp\tree\* -Include ex* -Recurse
D:\temp\out> (Get-ChildItem -Recurse).FullName
D:\temp\out\examples
D:\temp\out\example.ps1
D:\temp\out\example.txt
D:\temp\out\examples\subfolder
D:\temp\out\examples\example_1.txt
D:\temp\out\examples\example_2.txt
D:\temp\out\examples\subfolder\test.txt
Il parametro Include viene applicato al contenuto della D:\temp\tree
cartella per copiare tutti gli elementi corrispondenti ex*
a . Si noti che, con la ricorsione, la D:\temp\out\examples
cartella viene copiata insieme a tutti i file e le sottocartelle. La copia include file che non corrispondono al filtro di inclusione. Quando si usa Copy-Item
, i filtri si applicano solo al livello superiore specificato dal parametro Path . La ricorsione viene quindi applicata a tali elementi corrispondenti.
Nota
Il comportamento del parametro Exclude è uguale a quello descritto in questo esempio, ad eccezione del fatto che limita l'operazione solo a quei percorsi che non corrispondono al modello.
Esempio 15: Limitare i file alla copia ricorsiva da un percorso specificato con caratteri jolly
In questo esempio viene illustrato come limitare i file copiati in modo ricorsivo da un percorso di corrispondenza con caratteri jolly in un'altra cartella. L'esempio 13 mostra che, poiché il parametro Include filtra solo i percorsi risolti per un percorso con caratteri jolly, il parametro Include non può essere usato per limitare i file copiati in modo ricorsivo da una cartella. È invece possibile usare Get-ChildItem
per trovare gli elementi da copiare e passare tali elementi a Copy-Item
.
In questo esempio viene utilizzata la struttura di cartelle seguente contenente i file da copiare:
D:\temp\tree\example.ps1
D:\temp\tree\example.txt
D:\temp\tree\examples\
D:\temp\tree\examples\example_1.txt
D:\temp\tree\examples\example_2.txt
D:\temp\tree\examples\subfolder\
D:\temp\tree\examples\subfolder\test.txt
Per copiare tutti gli elementi che iniziano con ex*
, usare Get-ChildItem
con i parametri Recurse e Filter e inviare i risultati tramite pipe a Copy-Item
.
D:\temp\out> Get-ChildItem -Path D:\temp\tree -Recurse -Filter ex* | Copy-Item
D:\temp\out> (Get-ChildItem -Recurse).FullName
D:\temp\out\examples
D:\temp\out\example_1.txt
D:\temp\out\example_2.txt
D:\temp\out\example.ps1
D:\temp\out\example.txt
A differenza di Copy-Item
, il parametro Filter per Get-ChildItem
si applica agli elementi individuati durante la ricorsione. In questo modo è possibile trovare, filtrare e copiare gli elementi in modo ricorsivo.
Parametri
-Confirm
Richiede conferma prima di eseguire il cmdlet.
Tipo: | SwitchParameter |
Alias: | cf |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Container
Indica che questo cmdlet mantiene gli oggetti contenitore durante l'operazione di copia. Per impostazione predefinita, il parametro Container è impostato su True.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | True |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Credential
Nota
Questo parametro non è supportato da alcun provider installato con PowerShell. Per rappresentare un altro utente o elevare le credenziali durante l'esecuzione di questo cmdlet, usare Invoke-Command.
Tipo: | PSCredential |
Posizione: | Named |
Valore predefinito: | Current user |
Necessario: | False |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-Destination
Specifica il percorso della nuova posizione. Il valore predefinito è la directory corrente.
Per rinominare l'elemento da copiare, specificare un nuovo nome nel valore del parametro Destination .
Tipo: | String |
Posizione: | 1 |
Valore predefinito: | Current directory |
Necessario: | False |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-Exclude
Specifica uno o più elementi o modelli di percorso, ad esempio "*.txt"
, per limitare l'operazione di questo cmdlet. Il valore di questo parametro filtra in base al risultato corrispondente con caratteri jolly del parametro Path , non ai risultati finali. Questo parametro è efficace solo quando si specifica Path con uno o più caratteri jolly. Poiché questo parametro filtra solo i percorsi risolti per il parametro Path , non filtra gli elementi individuati durante la ripresa delle cartelle figlio con il parametro Recurse .
Tipo: | String[] |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | True |
-Filter
Specifica un filtro per qualificare il parametro Path . Il provider FileSystem è l'unico provider di PowerShell installato che supporta l'uso dei filtri. È possibile trovare la sintassi per il linguaggio di filtro FileSystem in about_Wildcards. I filtri sono più efficienti rispetto ad altri parametri, perché il provider li applica quando il cmdlet ottiene gli oggetti anziché filtrare gli oggetti dopo il recupero.
Tipo: | String |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | True |
-Force
Indica che questo cmdlet copia gli elementi che non possono essere altrimenti modificati, ad esempio la copia su un file o un alias di sola lettura.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-FromSession
Si tratta di un parametro dinamico reso disponibile dal provider FileSystem .
Specificare l'oggetto PSSession da cui viene copiato un file remoto. Quando si usa questo parametro, i parametri Path e LiteralPath fanno riferimento al percorso locale nel computer remoto.
Per altre informazioni, vedere about_FileSystem_Provider.
Tipo: | PSSession |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Include
Specifica uno o più elementi o modelli di percorso, ad esempio "*.txt"
, per limitare l'operazione di questo cmdlet. Il valore di questo parametro filtra in base al risultato corrispondente con caratteri jolly del parametro Path , non ai risultati finali. Questo parametro è efficace solo quando si specifica Path con uno o più caratteri jolly. Poiché questo parametro filtra solo i percorsi risolti per il parametro Path , non filtra gli elementi individuati durante la ripresa delle cartelle figlio con il parametro Recurse .
Tipo: | String[] |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | True |
-LiteralPath
Specifica un percorso di una o più posizioni. Il valore di LiteralPath viene usato esattamente come viene digitato. Nessun carattere viene interpretato come carattere jolly. Se il percorso include caratteri di escape, racchiuderlo tra virgolette singole. Le virgolette singole indicano a PowerShell di non interpretare alcun carattere come sequenze di escape.
Per altre informazioni, vedere about_Quoting_Rules.
Tipo: | String[] |
Alias: | PSPath, LP |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-PassThru
Restituisce un oggetto che rappresenta l'elemento con cui si sta lavorando. Per impostazione predefinita, questo cmdlet non genera alcun output.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Path
Specifica, come matrice di stringhe, il percorso degli elementi da copiare. I caratteri jolly sono consentiti.
Tipo: | String[] |
Posizione: | 0 |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | True |
-Recurse
Indica che questo cmdlet esegue una copia ricorsiva.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-ToSession
Si tratta di un parametro dinamico reso disponibile dal provider FileSystem .
Specificare l'oggetto PSSession in cui viene copiato un file remoto. Quando si usa questo parametro, il parametro Destination fa riferimento al percorso locale nel computer remoto.
Per altre informazioni, vedere about_FileSystem_Provider.
Tipo: | PSSession |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-WhatIf
Mostra gli effetti dell'esecuzione del cmdlet. Il cmdlet non viene eseguito.
Tipo: | SwitchParameter |
Alias: | wi |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
Input
È possibile inviare tramite pipe una stringa contenente un percorso a questo cmdlet.
Output
None
Per impostazione predefinita, questo cmdlet non restituisce alcun output.
Quando si utilizza il parametro PassThru , questo cmdlet restituisce un oggetto che rappresenta l'elemento copiato.
Note
PowerShell include gli alias seguenti per Copy-Item
:
- Tutte le piattaforme:
copy
cpi
- Windows:
cp
Questo cmdlet è progettato per lavorare con i dati esposti da qualsiasi provider. Per elencare i provider disponibili nella sessione, digitare Get-PSProvider
. Per altre informazioni, vedere about_Providers.