Copy-Item
Kopiuje element z jednej lokalizacji do innej.
Składnia
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>]
Opis
Polecenie cmdlet Copy-Item
kopiuje element z jednej lokalizacji do innej lokalizacji w tej samej przestrzeni nazw.
Na przykład może skopiować plik do folderu, ale nie może skopiować pliku na dysk certyfikatu.
To polecenie cmdlet nie powoduje wycinania ani usuwania kopiowanych elementów. Określone elementy, które polecenie cmdlet może skopiować, zależy od dostawcy programu PowerShell, który uwidacznia element. Na przykład może kopiować pliki i katalogi na dysku systemu plików oraz klucze rejestru i wpisy na dysku rejestru.
To polecenie cmdlet może kopiować i zmieniać nazwy elementów w tym samym poleceniu. Aby zmienić nazwę elementu, wprowadź nową nazwę w wartości parametru Destination. Aby zmienić nazwę elementu i nie skopiować go, użyj polecenia cmdlet Rename-Item
.
Przykłady
Przykład 1. Kopiowanie pliku do określonego katalogu
Ten przykład kopiuje plik mar1604.log.txt
do katalogu C:\Presentation
. Oryginalny plik nie jest usuwany.
Copy-Item "C:\Wabash\Logfiles\mar1604.log.txt" -Destination "C:\Presentation"
Przykład 2. Kopiowanie zawartości katalogu do istniejącego katalogu
W tym przykładzie zawartość katalogu C:\Logfiles
jest kopiowana do istniejącego katalogu C:\Drawings
. Katalog Logfiles
nie jest kopiowany.
Jeśli katalog Logfiles
zawiera pliki w podkatalogach, te podkatalogi są kopiowane z drzewami plików nienaruszonymi. Domyślnie parametr Container jest ustawiony na wartość True, która zachowuje strukturę katalogów.
Copy-Item -Path "C:\Logfiles\*" -Destination "C:\Drawings" -Recurse
Nuta
Jeśli musisz dołączyć katalog Logfiles
do kopii, usuń \*
ze ścieżki .
Na przykład:
Copy-Item -Path "C:\Logfiles" -Destination "C:\Drawings" -Recurse
Jeśli ścieżka C:\Drawings
nie istnieje, polecenie cmdlet kopiuje wszystkie pliki z folderu Logfiles
do jednego pliku C:\Drawings
.
Przykład 3. Kopiowanie katalogu i zawartości do nowego katalogu
Ten przykład kopiuje zawartość katalogu źródłowego C:\Logfiles
i tworzy nowy katalog docelowy. Nowy katalog docelowy \Logs
jest tworzony w C:\Drawings
.
Aby dołączyć nazwę katalogu źródłowego, skopiuj do istniejącego katalogu docelowego, jak pokazano w Przykład 2. Możesz też nazwać nowy katalog docelowy tym samym co katalog źródłowy.
Copy-Item -Path "C:\Logfiles" -Destination "C:\Drawings\Logs" -Recurse
Nuta
Jeśli ścieżka
Copy-Item -Path "C:\Logfiles\*" -Destination "C:\Drawings\Logs" -Recurse
Przykład 4. Kopiowanie pliku do określonego katalogu i zmienianie nazwy pliku
W tym przykładzie użyto polecenia cmdlet Copy-Item
do skopiowania skryptu Get-Widget.ps1
z katalogu \\Server01\Share
do katalogu \\Server12\ScriptArchive
. W ramach operacji kopiowania polecenie zmienia nazwę elementu z Get-Widget.ps1
na Get-Widget.ps1.txt
, aby można było dołączyć ją do wiadomości e-mail.
Copy-Item "\\Server01\Share\Get-Widget.ps1" -Destination "\\Server12\ScriptArchive\Get-Widget.ps1.txt"
Przykład 5. Kopiowanie pliku na komputer zdalny
Sesja jest tworzona na komputerze zdalnym o nazwie Server01 przy użyciu poświadczeń Contoso\User01
i zapisuje wyniki w zmiennej o nazwie $Session
.
Polecenie cmdlet Copy-Item
kopiuje test.log
z folderu D:\Folder001
do folderu C:\Folder001_Copy
na komputerze zdalnym przy użyciu informacji o sesji przechowywanych w zmiennej $Session
. Oryginalny plik nie jest usuwany.
$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "D:\Folder001\test.log" -Destination "C:\Folder001_Copy\" -ToSession $Session
Przykład 6. Kopiowanie folderu na komputer zdalny
Sesja jest tworzona na komputerze zdalnym o nazwie Server01 przy użyciu poświadczeń Contoso\User01
i zapisuje wyniki w zmiennej o nazwie $Session
.
Polecenie cmdlet Copy-Item
kopiuje folder D:\Folder002
do katalogu C:\Folder002_Copy
na komputerze zdalnym przy użyciu informacji o sesji przechowywanych w zmiennej $Session
. Żadne podfoldery lub pliki nie są kopiowane bez użycia przełącznika Recurse.
Operacja tworzy folder Folder002_Copy
, jeśli jeszcze nie istnieje.
$Session = New-PSSession -ComputerName "Server02" -Credential "Contoso\User01"
Copy-Item "D:\Folder002\" -Destination "C:\Folder002_Copy\" -ToSession $Session
Przykład 7. Rekursywnie skopiuj całą zawartość folderu na komputer zdalny
Sesja jest tworzona na komputerze zdalnym o nazwie Server01 przy użyciu poświadczeń Contoso\User01
i zapisuje wyniki w zmiennej o nazwie $Session
.
Polecenie cmdlet Copy-Item
kopiuje całą zawartość z folderu D:\Folder003
do katalogu C:\Folder003_Copy
na komputerze zdalnym przy użyciu informacji o sesji przechowywanych w zmiennej $Session
. Podfoldery są kopiowane z drzewami plików nienaruszonymi. Operacja tworzy folder Folder003_Copy
, jeśli jeszcze nie istnieje.
$Session = New-PSSession -ComputerName "Server04" -Credential "Contoso\User01"
Copy-Item "D:\Folder003\" -Destination "C:\Folder003_Copy\" -ToSession $Session -Recurse
Przykład 8: Kopiowanie pliku na komputer zdalny, a następnie zmienianie nazwy pliku
Sesja jest tworzona na komputerze zdalnym o nazwie Server01 przy użyciu poświadczeń Contoso\User01
i zapisuje wyniki w zmiennej o nazwie $Session
.
Polecenie cmdlet Copy-Item
kopiuje scriptingexample.ps1
z folderu D:\Folder004
do folderu C:\Folder004_Copy
na komputerze zdalnym przy użyciu informacji o sesji przechowywanych w zmiennej $Session
. W ramach operacji kopiowania polecenie zmienia nazwę elementu z scriptingexample.ps1
na scriptingexample_copy.ps1
, aby można było dołączyć ją do wiadomości e-mail. Oryginalny plik nie jest usuwany.
$Session = New-PSSession -ComputerName "Server04" -Credential "Contoso\User01"
Copy-Item "D:\Folder004\scriptingexample.ps1" -Destination "C:\Folder004_Copy\scriptingexample_copy.ps1" -ToSession $Session
Przykład 9. Kopiowanie pliku zdalnego na komputer lokalny
Sesja jest tworzona na komputerze zdalnym o nazwie Server01 przy użyciu poświadczeń Contoso\User01
i zapisuje wyniki w zmiennej o nazwie $Session
.
Polecenie cmdlet Copy-Item
kopiuje test.log
z C:\MyRemoteData\
zdalnego do lokalnego folderu D:\MyLocalData
przy użyciu informacji o sesji przechowywanych w zmiennej $Session
. Oryginalny plik nie jest usuwany.
$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "C:\MyRemoteData\test.log" -Destination "D:\MyLocalData\" -FromSession $Session
Przykład 10: Kopiowanie całej zawartości folderu zdalnego na komputer lokalny
Sesja jest tworzona na komputerze zdalnym o nazwie Server01 przy użyciu poświadczeń Contoso\User01
i zapisuje wyniki w zmiennej o nazwie $Session
.
Polecenie cmdlet Copy-Item
kopiuje całą zawartość z folderu C:\MyRemoteData\scripts
zdalnego do folderu D:\MyLocalData
lokalnego przy użyciu informacji o sesji przechowywanych w zmiennej $Session
. Jeśli folder scripts zawiera pliki w podfolderach, te podfoldery są kopiowane ze swoimi drzewami plików bez zmian.
$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "C:\MyRemoteData\scripts" -Destination "D:\MyLocalData\" -FromSession $Session
Przykład 11: Rekursywnie skopiuj całą zawartość folderu zdalnego na komputer lokalny
Sesja jest tworzona na komputerze zdalnym o nazwie Server01 przy użyciu poświadczeń Contoso\User01
i zapisuje wyniki w zmiennej o nazwie $Session
.
Polecenie cmdlet Copy-Item
kopiuje całą zawartość z folderu C:\MyRemoteData\scripts
zdalnego do folderu D:\MyLocalData\scripts
lokalnego przy użyciu informacji o sesji przechowywanych w zmiennej $Session
. Ponieważ jest używany parametr Recurse, operacja tworzy folder scripts, jeśli jeszcze nie istnieje. Jeśli folder scripts zawiera pliki w podfolderach, te podfoldery są kopiowane ze swoimi drzewami plików bez zmian.
$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "C:\MyRemoteData\scripts" -Destination "D:\MyLocalData\scripts" -FromSession $Session -Recurse
Przykład 12: Cykliczne kopiowanie plików z drzewa folderów do bieżącego folderu
W tym przykładzie pokazano, jak skopiować pliki ze struktury folderów wieloszczepowych do pojedynczego folderu płaskiego.
Pierwsze trzy polecenia pokazują istniejącą strukturę folderów i zawartość dwóch plików, obie nazwy 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
Polecenie cmdlet Copy-Item
ma parametr Container ustawiony na $false
. Powoduje to skopiowanie zawartości folderu źródłowego, ale nie zachowuje struktury folderów. Zwróć uwagę, że pliki o tej samej nazwie są zastępowane w folderze docelowym.
Przykład 13. Używanie filtrów do kopiowania elementów bez rekursji
W tym przykładzie przedstawiono wyniki przy użyciu parametru Include, aby wybrać elementy, które mają zostać skopiowane.
W tym przykładzie użyto następującej struktury folderów zawierającej pliki do skopiowania:
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
W tym przykładzie D:\temp\tree\*
. Parametr include
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
Parametr Include jest stosowany do zawartości folderu D:\temp\tree
w celu skopiowania wszystkich elementów pasujących do ex*
. Zwróć uwagę, że bez rekursji folder D:\temp\out\examples
jest kopiowany, ale żadna z jego zawartości nie jest kopiowana.
Przykład 15. Używanie filtrów do kopiowania elementów z rekursją
W tym przykładzie przedstawiono wyniki przy użyciu parametru Include, aby wybrać elementy, które mają zostać skopiowane.
W tym przykładzie użyto następującej struktury folderów zawierającej pliki do skopiowania:
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
W tym przykładzie
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
Parametr Include jest stosowany do zawartości folderu D:\temp\tree
w celu skopiowania wszystkich elementów pasujących do ex*
. Zwróć uwagę, że w przypadku rekursji folder D:\temp\out\examples
jest kopiowany wraz ze wszystkimi plikami i podfolderami. Kopia zawiera pliki, które nie zgodne z filtrem dołączania. W przypadku korzystania z
Nuta
Zachowanie parametru Exclude jest takie samo, jak opisano w tym przykładzie, z tą różnicą, że ogranicza operację tylko do tych ścieżek, które nie są zgodne ze wzorcem.
Przykład 15. Ogranicz pliki do cyklicznego kopiowania ze ścieżki określonej symbolem wieloznacznymi
W tym przykładzie pokazano, jak ograniczyć pliki rekursywnie skopiowane ze ścieżki dopasowania symboli wieloznacznych do innego folderu. W przykładzie 13 pokazano, że ponieważ Uwzględnij parametr tylko filtry na ścieżkach rozpoznanych dla symboli wieloznacznych określających ścieżkę , parametr Include nie może służyć do ograniczenia plików cyklicznie kopiowanych z folderu. Zamiast tego możesz użyć Get-ChildItem
, aby znaleźć elementy, które chcesz skopiować i przekazać te elementy do Copy-Item
.
W tym przykładzie użyto następującej struktury folderów zawierającej pliki do skopiowania:
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
Aby skopiować wszystkie elementy rozpoczynające się od ex*
, użyj Get-ChildItem
z Recurse i parametrami Filter i potoku wyników, aby 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
W przeciwieństwie do Copy-Item
parametr Filter dla Get-ChildItem
dotyczy elementów odnalezionych podczas rekursji. Dzięki temu można wyszukiwać, filtrować i kopiować elementy rekursywnie.
Parametry
-Confirm
Monituje o potwierdzenie przed uruchomieniem polecenia cmdlet.
Typ: | SwitchParameter |
Aliasy: | cf |
Position: | Named |
Domyślna wartość: | False |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Container
Wskazuje, że to polecenie cmdlet zachowuje obiekty kontenera podczas operacji kopiowania. Domyślnie parametr Container jest ustawiony na wartość True.
Typ: | SwitchParameter |
Position: | Named |
Domyślna wartość: | True |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Credential
Nuta
Ten parametr nie jest obsługiwany przez żadnych dostawców zainstalowanych w programie PowerShell. Aby personifikować innego użytkownika lub podnieść poziom poświadczeń podczas uruchamiania tego polecenia cmdlet, użyj Invoke-Command.
Typ: | PSCredential |
Position: | Named |
Domyślna wartość: | Current user |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | False |
-Destination
Określa ścieżkę do nowej lokalizacji. Wartość domyślna to bieżący katalog.
Aby zmienić nazwę skopiowanego elementu, określ nową nazwę w wartości parametru Destination.
Typ: | String |
Position: | 1 |
Domyślna wartość: | Current directory |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | False |
-Exclude
Określa co najmniej jeden element ścieżki lub wzorce, takie jak "*.txt"
, aby ograniczyć operację tego polecenia cmdlet. Wartość tego parametru filtruje względem wyniku dopasowania symboli wieloznacznych parametru Path, a nie wyników końcowych. Ten parametr jest skuteczny tylko wtedy, gdy ścieżki
Typ: | String[] |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | True |
-Filter
Określa filtr, aby zakwalifikować parametr ścieżki
Typ: | String |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | True |
-Force
Wskazuje, że to polecenie cmdlet kopiuje elementy, których nie można zmienić w inny sposób, na przykład kopiowanie pliku lub aliasu tylko do odczytu.
Typ: | SwitchParameter |
Position: | Named |
Domyślna wartość: | False |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-FromSession
Określa obiekt PSSession, z którego jest kopiowany plik zdalny. Jeśli używasz tego parametru, parametry ścieżki i LiteralPath odwołują się do ścieżki lokalnej na maszynie zdalnej.
Typ: | PSSession |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Include
Określa co najmniej jeden element ścieżki lub wzorce, takie jak "*.txt"
, aby ograniczyć operację tego polecenia cmdlet. Wartość tego parametru filtruje względem wyniku dopasowania symboli wieloznacznych parametru Path, a nie wyników końcowych. Ten parametr jest skuteczny tylko wtedy, gdy ścieżki
Typ: | String[] |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | True |
-LiteralPath
Określa ścieżkę do co najmniej jednej lokalizacji. Wartość LiteralPath jest używana dokładnie tak, jak jest typowana. Znaki nie są interpretowane jako symbole wieloznaczne. Jeśli ścieżka zawiera znaki ucieczki, należy ująć ją w pojedynczy cudzysłów. Pojedyncze znaki cudzysłowu informują program PowerShell, aby nie interpretował żadnych znaków jako sekwencji ucieczki.
Aby uzyskać więcej informacji, zobacz about_Quoting_Rules.
Typ: | String[] |
Aliasy: | PSPath, LP |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | False |
-PassThru
Zwraca obiekt reprezentujący element, z którym pracujesz. Domyślnie to polecenie cmdlet nie generuje żadnych danych wyjściowych.
Typ: | SwitchParameter |
Position: | Named |
Domyślna wartość: | False |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Path
Określa jako tablicę ciągów ścieżkę do elementów do skopiowania. Dozwolone są symbole wieloznaczne.
Typ: | String[] |
Position: | 0 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | True |
-Recurse
Wskazuje, że to polecenie cmdlet wykonuje cykliczną kopię.
Typ: | SwitchParameter |
Position: | Named |
Domyślna wartość: | False |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-ToSession
Określa obiekt PSSession, do którego jest kopiowany plik zdalny. Jeśli używasz tego parametru, parametr Destination odnosi się do ścieżki lokalnej na maszynie zdalnej.
Typ: | PSSession |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-WhatIf
Pokazuje, co się stanie, jeśli polecenie cmdlet zostanie uruchomione. Polecenie cmdlet nie jest uruchamiane.
Typ: | SwitchParameter |
Aliasy: | wi |
Position: | Named |
Domyślna wartość: | False |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
Dane wejściowe
Możesz potokować ciąg zawierający ścieżkę do tego polecenia cmdlet.
Dane wyjściowe
None or an object representing the copied item
Jeśli używasz parametru PassThru, to polecenie cmdlet zwraca obiekt reprezentujący skopiowany element. W przeciwnym razie to polecenie cmdlet nie generuje żadnych danych wyjściowych.
Uwagi
To polecenie cmdlet jest przeznaczone do pracy z danymi udostępnianymi przez dowolnego dostawcę. Aby wyświetlić listę dostawców dostępnych w sesji, wpisz Get-PSProvider
. Aby uzyskać więcej informacji, zobacz about_Providers.