Поделиться через


Copy-Item

Копирует элемент из одного расположения в другое.

Синтаксис

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 копирует элемент из одного расположения в другое расположение в том же пространстве имен. Например, он может скопировать файл в папку, но он не может скопировать файл на диск сертификата.

Этот командлет не вырезает или не удаляет скопированные элементы. Определенные элементы, которые командлет может копировать, зависят от поставщика PowerShell, предоставляющего элемент. Например, он может копировать файлы и каталоги на диске файловой системы и разделах реестра и записях на диске реестра.

Этот командлет может копировать и переименовать элементы в той же команде. Чтобы переименовать элемент, введите новое имя в значение параметра Назначения. Чтобы переименовать элемент и не скопировать его, используйте командлет Rename-Item.

Примеры

Пример 1. Копирование файла в указанный каталог

В этом примере файл mar1604.log.txt копируется в каталог C:\Presentation. Исходный файл не удаляется.

Copy-Item "C:\Wabash\Logfiles\mar1604.log.txt" -Destination "C:\Presentation"

Пример 2. Копирование содержимого каталога в существующий каталог

В этом примере содержимое каталога C:\Logfiles копируется в существующий каталог C:\Drawings. Каталог Logfiles не копируется.

Если каталог Logfiles содержит файлы в подкаталогах, эти вложенные каталоги копируются с нетронутыми деревьями файлов. По умолчанию параметр контейнера имеет значение True, что сохраняет структуру каталогов.

Copy-Item -Path "C:\Logfiles\*" -Destination "C:\Drawings" -Recurse

Заметка

Если необходимо включить каталог в копию, удалите изпути . Например:

Copy-Item -Path "C:\Logfiles" -Destination "C:\Drawings" -Recurse

Если путь C:\Drawings не существует, командлет копирует все файлы из папки Logfiles в один файл C:\Drawings.

Пример 3. Копирование каталога и содержимого в новый каталог

В этом примере копируется содержимое исходного каталога C:\Logfiles и создается новый целевой каталог. Новый каталог назначения \Logs создается в C:\Drawings.

Чтобы включить имя исходного каталога, скопируйте его в существующий целевой каталог, как показано в примере 2. Или назовите новый целевой каталог тем же, что и исходный каталог.

Copy-Item -Path "C:\Logfiles" -Destination "C:\Drawings\Logs" -Recurse

Заметка

Если пути включает , все содержимое файла каталога, включая подкаталоговые деревья, копируются в новый целевой каталог. Например:

Copy-Item -Path "C:\Logfiles\*" -Destination "C:\Drawings\Logs" -Recurse

Пример 4. Копирование файла в указанный каталог и переименование файла

В этом примере используется командлет Copy-Item для копирования скрипта Get-Widget.ps1 из каталога \\Server01\Share в каталог \\Server12\ScriptArchive. В рамках операции копирования команда изменяет имя элемента с Get-Widget.ps1 на Get-Widget.ps1.txt, чтобы оно было присоединено к сообщениям электронной почты.

Copy-Item "\\Server01\Share\Get-Widget.ps1" -Destination "\\Server12\ScriptArchive\Get-Widget.ps1.txt"

Пример 5. Копирование файла на удаленный компьютер

Сеанс создается на удаленном компьютере с именем Server01 с учетными данными Contoso\User01 и сохраняет результаты в переменной с именем $Session.

Командлет Copy-Item копирует test.log из папки D:\Folder001 в папку C:\Folder001_Copy на удаленном компьютере с помощью сведений о сеансе, хранящихся в переменной $Session. Исходный файл не удаляется.

$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "D:\Folder001\test.log" -Destination "C:\Folder001_Copy\" -ToSession $Session

Пример 6. Копирование папки на удаленный компьютер

Сеанс создается на удаленном компьютере с именем Server01 с учетными данными Contoso\User01 и сохраняет результаты в переменной с именем $Session.

Командлет Copy-Item копирует папку D:\Folder002 в каталог C:\Folder002_Copy на удаленном компьютере с помощью сведений о сеансе, хранящихся в переменной $Session. Любые вложенные папки или файлы не копируются без использования параметра Recurse. Операция создает папку Folder002_Copy, если она еще не существует.

$Session = New-PSSession -ComputerName "Server02" -Credential "Contoso\User01"
Copy-Item "D:\Folder002\" -Destination "C:\Folder002_Copy\" -ToSession $Session

Пример 7. Рекурсивно скопируйте все содержимое папки на удаленный компьютер.

Сеанс создается на удаленном компьютере с именем Server01 с учетными данными Contoso\User01 и сохраняет результаты в переменной с именем $Session.

Командлет Copy-Item копирует все содержимое из папки D:\Folder003 в каталог C:\Folder003_Copy на удаленном компьютере с помощью сведений о сеансе, хранящихся в переменной $Session. Вложенные папки копируются с нетронутыми деревьями файлов. Операция создает папку Folder003_Copy, если она еще не существует.

$Session = New-PSSession -ComputerName "Server04" -Credential "Contoso\User01"
Copy-Item "D:\Folder003\" -Destination "C:\Folder003_Copy\" -ToSession $Session -Recurse

Пример 8. Копирование файла на удаленный компьютер и переименование файла

Сеанс создается на удаленном компьютере с именем Server01 с учетными данными Contoso\User01 и сохраняет результаты в переменной с именем $Session.

Командлет Copy-Item копирует scriptingexample.ps1 из папки D:\Folder004 в папку C:\Folder004_Copy на удаленном компьютере с помощью сведений о сеансе, хранящихся в переменной $Session. В рамках операции копирования команда изменяет имя элемента с scriptingexample.ps1 на scriptingexample_copy.ps1, чтобы оно было присоединено к сообщениям электронной почты. Исходный файл не удаляется.

$Session = New-PSSession -ComputerName "Server04" -Credential "Contoso\User01"
Copy-Item "D:\Folder004\scriptingexample.ps1" -Destination "C:\Folder004_Copy\scriptingexample_copy.ps1" -ToSession $Session

Пример 9. Копирование удаленного файла на локальный компьютер

Сеанс создается на удаленном компьютере с именем Server01 с учетными данными Contoso\User01 и сохраняет результаты в переменной с именем $Session.

Командлет Copy-Item копирует test.log из удаленного C:\MyRemoteData\ в локальную папку D:\MyLocalData с помощью сведений о сеансе, хранящихся в переменной $Session. Исходный файл не удаляется.

$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "C:\MyRemoteData\test.log" -Destination "D:\MyLocalData\" -FromSession $Session

Пример 10. Копирование всего содержимого удаленной папки на локальный компьютер

Сеанс создается на удаленном компьютере с именем Server01 с учетными данными Contoso\User01 и сохраняет результаты в переменной с именем $Session.

Командлет Copy-Item копирует все содержимое из удаленной папки C:\MyRemoteData\scripts в локальную папку D:\MyLocalData с помощью сведений о сеансе, хранящихся в переменной $Session. Если папка скриптов содержит файлы в вложенных папках, эти вложенные папки копируются с нетронутыми деревьями файлов.

$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "C:\MyRemoteData\scripts" -Destination "D:\MyLocalData\" -FromSession $Session

Пример 11. Рекурсивно скопируйте все содержимое удаленной папки на локальный компьютер.

Сеанс создается на удаленном компьютере с именем Server01 с учетными данными Contoso\User01 и сохраняет результаты в переменной с именем $Session.

Командлет Copy-Item копирует все содержимое из удаленной папки C:\MyRemoteData\scripts в локальную папку D:\MyLocalData\scripts с помощью сведений о сеансе, хранящихся в переменной $Session. Так как используется параметр Recurse, операция создает папку скриптов, если она еще не существует. Если папка скриптов содержит файлы в вложенных папках, эти вложенные папки копируются с нетронутыми деревьями файлов.

$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "C:\MyRemoteData\scripts" -Destination "D:\MyLocalData\scripts" -FromSession $Session -Recurse

Пример 12. Рекурсивное копирование файлов из дерева папок в текущую папку

В этом примере показано, как скопировать файлы из многоуровневой структуры папок в одну плоскую папку. Первые три команды показывают существующую структуру папок и содержимое двух файлов, оба имени 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

Командлет Copy-Item имеет параметр контейнера для параметра $false. Это приводит к копированию содержимого исходной папки, но не сохраняет структуру папок. Обратите внимание, что файлы с тем же именем перезаписываются в целевой папке.

Пример 13. Использование фильтров для копирования элементов без рекурсии

В этом примере показаны результаты с помощью параметра Include, чтобы выбрать, какие элементы следует копировать.

В этом примере используется следующая структура папок, содержащая файлы для копирования:

  • 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

В этом примере Copy-Item вызывается с подстановочным знаком для параметров path и Include. Указание подстановочного знака для параметра пути гарантирует, что он обрабатывает все файлы и папки, соответствующие D:\temp\tree\*. Параметр Include фильтрует список элементов для обработки, ограничивая операцию только теми путями, которые начинаются с 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

Параметр Include применяется к содержимому папки D:\temp\tree для копирования всех элементов, соответствующих ex*. Обратите внимание, что без рекурсии папка D:\temp\out\examples копируется, но ни одно из его содержимого не копируется.

Пример 15. Использование фильтров для копирования элементов с рекурсией

В этом примере показаны результаты с помощью параметра Include, чтобы выбрать, какие элементы следует копировать.

В этом примере используется следующая структура папок, содержащая файлы для копирования:

  • 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

В этом примере Copy-Item вызывается с подстановочным знаком для параметров path и Include. Указание подстановочного знака для параметра пути гарантирует, что он обрабатывает все файлы и папки, соответствующие . Параметр Include фильтрует список элементов для обработки, ограничивая операцию только теми путями, которые начинаются с 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

Параметр Include применяется к содержимому папки D:\temp\tree для копирования всех элементов, соответствующих ex*. Обратите внимание, что при рекурсии папка D:\temp\out\examples копируется вместе со всеми файлами и вложенными папками. Копия содержит файлы, которые не совпадают с фильтром включения. При использовании Copy-Itemфильтры применяются только к верхнему уровню, указанному параметром Path. Затем рекурсия применяется к соответствующим элементам.

Заметка

Поведение параметра исключить аналогично описанному в этом примере, за исключением того, что операция ограничивается только теми путями, которые не соответствуют шаблону.

Пример 15. Ограничение файлов для рекурсивной копирования из указанного подстановочного знака пути

В этом примере показано, как ограничить файлы рекурсивно скопированными из пути сопоставления с подстановочными знаками в другую папку. В примере 13 показано, что, так как параметр Include фильтрует только фильтры по пути, разрешенным для подстановочного знака, указывающего путь пути, параметр Include нельзя использовать для ограничения файлов, рекурсивно скопированных из папки. Вместо этого можно использовать Get-ChildItem для поиска элементов, которые необходимо скопировать и передать в Copy-Item.

В этом примере используется следующая структура папок, содержащая файлы для копирования:

  • 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

Чтобы скопировать все элементы, начинающиеся с , используйте с параметрами recurse и фильтровать и передавать результаты в .

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

В отличие от , параметр фильтра для применяется к элементам, обнаруженным во время рекурсии. Это позволяет находить, фильтровать и копировать элементы рекурсивно.

Параметры

-Confirm

Запрашивает подтверждение перед запуском командлета.

Тип:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Container

Указывает, что этот командлет сохраняет объекты контейнера во время операции копирования. По умолчанию параметр контейнера имеет значение True.

Тип:SwitchParameter
Position:Named
Default value:True
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Credential

Заметка

Этот параметр не поддерживается поставщиками, установленными с помощью PowerShell. Чтобы олицетворить другого пользователя или повысить свои учетные данные при выполнении этого командлета, используйте Invoke-Command.

Тип:PSCredential
Position:Named
Default value:Current user
Обязательно:False
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-Destination

Указывает путь к новому расположению. По умолчанию используется текущий каталог.

Чтобы переименовать скопированный элемент, укажите новое имя в значении параметра назначения.

Тип:String
Position:1
Default value:Current directory
Обязательно:False
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-Exclude

Задает один или несколько элементов пути или шаблонов, например "*.txt", чтобы ограничить операцию этого командлета. Значение этого параметра фильтрует результат сопоставления подстановочных знаков параметра Path, а не конечные результаты. Этот параметр действует только при указании пути с одним или несколькими подстановочными знаками. Так как этот параметр фильтрует только пути, разрешенные для параметра Path, он не фильтрует элементы, обнаруженные при рекурсии через дочерние папки с параметром Recurse.

Тип:String[]
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:True

-Filter

Указывает фильтр для квалификации параметра Path. Поставщик файловой системы является единственным установленным поставщиком PowerShell, поддерживающим использование фильтров. Синтаксис для языка фильтрации файловой системы можно найти в about_Wildcards. Фильтры более эффективны, чем другие параметры, так как поставщик применяет их, когда командлет получает объекты, а не фильтрует объекты после их получения.

Тип:String
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:True

-Force

Указывает, что этот командлет копирует элементы, которые не могут быть изменены, например копирование по файлу только для чтения или псевдониму.

Тип:SwitchParameter
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-FromSession

Указывает объект PSSession, из которого копируется удаленный файл. При использовании этого параметра параметры path и LiteralPath ссылаются на локальный путь на удаленном компьютере.

Тип:PSSession
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Include

Задает один или несколько элементов пути или шаблонов, например "*.txt", чтобы ограничить операцию этого командлета. Значение этого параметра фильтрует результат сопоставления подстановочных знаков параметра Path, а не конечные результаты. Этот параметр действует только при указании пути с одним или несколькими подстановочными знаками. Так как этот параметр фильтрует только пути, разрешенные для параметра Path, он не фильтрует элементы, обнаруженные при рекурсии через дочерние папки с параметром Recurse.

Тип:String[]
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:True

-LiteralPath

Указывает путь к одному или нескольким расположениям. Значение LiteralPath используется точно так же, как и типизированный. Символы не интерпретируются как подстановочные знаки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки говорят PowerShell не интерпретировать какие-либо символы как escape-последовательности.

Дополнительные сведения см. в about_Quoting_Rules.

Тип:String[]
Aliases:PSPath, LP
Position:Named
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-PassThru

Возвращает объект, представляющий элемент, с которым вы работаете. По умолчанию этот командлет не создает выходные данные.

Тип:SwitchParameter
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Path

Указывает в виде строкового массива путь к элементам для копирования. Разрешены подстановочные знаки.

Тип:String[]
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:True

-Recurse

Указывает, что этот командлет выполняет рекурсивную копию.

Тип:SwitchParameter
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-ToSession

Указывает объект PSSession, в который копируется удаленный файл. При использовании этого параметра параметр назначения ссылается на локальный путь на удаленном компьютере.

Тип:PSSession
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-WhatIf

Показывает, что произойдет, если командлет выполняется. Командлет не выполняется.

Тип:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

Входные данные

String

Можно передать строку, содержащую путь к этому командлету.

Выходные данные

None or an object representing the copied item

При использовании параметра PassThru этот командлет возвращает объект, представляющий скопированный элемент. В противном случае этот командлет не создает выходные данные.

Примечания

Этот командлет предназначен для работы с данными, предоставляемыми любым поставщиком. Чтобы вывести список поставщиков, доступных в сеансе, введите Get-PSProvider. Дополнительные сведения см. в разделе about_Providers.