Condividi tramite


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

String

È possibile inviare tramite pipe una stringa contenente un percorso a questo cmdlet.

Output

None

Per impostazione predefinita, questo cmdlet non restituisce alcun output.

PSObject

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.