Прямое управление элементами — PowerShell
- Чтение занимает 4 мин
В этой статье
Элементы, которые отображаются на дисках Windows PowerShell, например файлы и папки на дисках файловой системы и разделы реестра на дисках реестра Windows PowerShell, называются в Windows PowerShell элементами .The elements that you see in Windows PowerShell drives, such as the files and folders in the file system drives, and the registry keys in the Windows PowerShell registry drives, are called items in Windows PowerShell. Командлеты для работы с ними содержат существительное Item в именах.The cmdlets for working with them item have the noun Item in their names.
В выходных данных команды Get-Command -Noun Item показано, что существует девять элементов Windows PowerShell.The output of the Get-Command -Noun Item command shows that there are nine Windows PowerShell item cmdlets.
PS> Get-Command -Noun Item CommandType Name Definition ----------- ---- ---------- Cmdlet Clear-Item Clear-Item [-Path] <String[]... Cmdlet Copy-Item Copy-Item [-Path] <String[]>... Cmdlet Get-Item Get-Item [-Path] <String[]> ... Cmdlet Invoke-Item Invoke-Item [-Path] <String[... Cmdlet Move-Item Move-Item [-Path] <String[]>... Cmdlet New-Item New-Item [-Path] <String[]> ... Cmdlet Remove-Item Remove-Item [-Path] <String[... Cmdlet Rename-Item Rename-Item [-Path] <String>... Cmdlet Set-Item Set-Item [-Path] <String[]> ...
Создание новых элементов (New-Item)Creating New Items (New-Item)
Чтобы создать новый элемент в файловой системе, используйте командлет New-Item .To create a new item in the file system, use the New-Item cmdlet. Включите параметр Path с путем к элементу и параметр
Например, чтобы создать каталог с именем «New.Directory» в каталоге C:\Temp, введите:For example, to create a new directory named «New.Directory»in the C:\Temp directory, type:
PS> New-Item -Path c:\temp\New.Directory -ItemType Directory Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2006-05-18 11:29 AM New.Directory
Чтобы создать файл, измените значение параметра ItemType на file.To create a file, change the value of the ItemType parameter to «file». Например, чтобы создать файл с именем file1.txt в каталоге New.Directory, введите:For example, to create a file named «file1.txt» in the New.Directory directory, type:
PS> New-Item -Path C:\temp\New.Directory\file1.txt -ItemType file
Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp\New.Directory
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2006-05-18 11:44 AM 0 file1
Тот же метод можно использовать для создания нового раздела реестра.You can use the same technique to create a new registry key. На самом деле, раздел реестра создать проще, так как единственный тип элементов в реестре Windows — это раздел.In fact, a registry key is easier to create because the only item type in the Windows registry is a key. (Записи реестра — это свойства элементов.) Например, чтобы создать ключ с именем _Test в подразделе CurrentVersion, введите:(Registry entries are item properties .) For example, to create a key named «_Test» in the CurrentVersion subkey, type:
PS> New-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion_Test Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Micros oft\Windows\CurrentVersion SKC VC Name Property --- -- ---- -------- 0 0 _Test {}
При вводе пути реестра не забудьте добавить двоеточие ( : ) в имена дисков Windows PowerShell: HKLM: и HKCU:.When typing a registry path, be sure to include the colon ( : ) in the Windows PowerShell drive names, HKLM: and HKCU:. Без двоеточия Windows PowerShell не распознает имена дисков в пути.Without the colon, Windows PowerShell does not recognize the drive name in the path.
Причины, по которым значения реестра не являются элементамиWhy Registry Values are not Items
При использовании командлета Get-ChildItem для поиска элементов в разделе реестра вы не увидите фактических записей реестра или их значений.When you use the
Например, раздел реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run обычно содержит записи реестра, представляющие приложения, которые выполняются при запуске системы.For example, the registry key HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run usually contains several registry entries that represent applications that run when the system starts.
Однако при использовании Get-ChildItem
PS> Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Run
Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Micros
oft\Windows\CurrentVersion\Run
SKC VC Name Property
--- -- ---- --------
3 0 OptionalComponents {}
Хотя удобнее использовать записи реестра как элементы, невозможно указать путь к записи реестра способом, гарантирующим его уникальность.Although it would be convenient to treat registry entries as items, you cannot specify a path to a registry entry in a way that ensures that it is unique. Нотация пути не различает подраздел реестра с именем
Переименование существующих элементов (Rename-Item)Renaming Existing Items (Rename-Item)
Чтобы изменить имя файла или папки, используйте командлет Rename-Item .To change the name of a file or folder, use the Rename-Item cmdlet. Следующая команда изменяет имя файла file1.txt на
Rename-Item -Path C:\temp\New.Directory\file1.txt fileOne.txt
Командлет Rename-Item может изменить имя файла или папки, но не может переместить элемент.The Rename-Item cmdlet can change the name of a file or a folder, but it cannot move an item. Произойдет сбой следующей команды, так как она попытается переместить файл из каталога New.Directory во временный каталог.The following command fails because it attempts to move the file from the New.Directory directory to the Temp directory.
PS> Rename-Item -Path C:\temp\New.Directory\fileOne.txt c:\temp\fileOne.txt Rename-Item : Cannot rename because the target specified is not a path. At line:1 char:12 + Rename-Item <<<< -Path C:\temp\New.Directory\fileOne c:\temp\fileOne.txt
Перемещение элементов (Move-Item)Moving Items (Move-Item)
Чтобы переместить файл или папку, используйте командлет Move-Item .To move a file or folder, use the Move-Item cmdlet.
Например, следующая команда перемещает каталог New.Directory из каталога C:\temp в корень диска C:.For example, the following command moves the New.Directory directory from the C:\temp directory to the root of the C: drive. Чтобы убедиться, что элемент перемещен, включите параметр PassThru
PS> Move-Item -Path C:\temp\New.Directory -Destination C:\ -PassThru
Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2006-05-18 12:14 PM New.Directory
Копирование элементов (Copy-Item)Copying Items (Copy-Item)
Если вы знакомы с операциями копирования в других оболочках, поведение командлета Copy-Item в Windows PowerShell может показаться нестандартным.If you are familiar with the copy operations in other shells, you might find the behavior of the Copy-Item cmdlet in Windows PowerShell to be unusual. При копировании элемента из одного расположения в другое командлет Copy-Item не копирует его содержимое по умолчанию.When you copy an item from one location to another, Copy-Item does not copy its contents by default.
Например, при копировании каталога New.Directory с диска C: в каталог C:\temp команда выполняется, но файлы в каталоге New.Directory не копируются.For example, if you copy the New.Directory directory from the C: drive to the C:\temp directory, the command succeeds, but the files in the New.Directory directory are not copied.
Copy-Item -Path C:\New.Directory -Destination C:\temp
Если отобразить содержимое C:\temp\New.Directory , там не будет файлов:If you display the contents of C:\temp\New.Directory , you will find that it contains no files:
PS> Get-ChildItem -Path C:\temp\New.Directory
PS>
Почему командлет Copy-Item не копирует содержимое в новое расположение?Why doesn’t the Copy-Item cmdlet copy the contents to the new location?
Командлет Copy-Item предполагалось использовать как универсальный; он не предназначен для простого копирования файлов и папок.The Copy-Item cmdlet was designed to be generic; it is not just for copying files and folders. Кроме того, даже при копировании файлов и папок может потребоваться копировать только контейнер без элементов внутри него.Also, even when copying files and folders, you might want to copy only the container and not the items within it.
Чтобы скопировать все содержимое папки, включите параметр Recurse командлета Copy-Item в команду.To copy all of the contents of a folder, include the Recurse parameter of the Copy-Item cmdlet in the command. Если вы уже скопировали каталог без содержимого, добавьте параметр Force , который позволит перезаписать пустую папку.If you have already copied the directory without its contents, add the Force parameter, which allows you to overwrite the empty folder.
PS> Copy-Item -Path C:\New.Directory -Destination C:\temp -Recurse -Force -Passthru
Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2006-05-18 1:53 PM New.Directory
Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp\New.Directory
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2006-05-18 11:44 AM 0 file1
Удаление элементов (Remove-Item)Deleting Items (Remove-Item)
Чтобы удалить файлы и папки, используйте командлет Remove-Item .To delete files and folders, use the Remove-Item cmdlet. Командлеты Windows PowerShell, например Remove-Item , которые могут вносить значительные и необратимые изменения, часто будут запрашивать подтверждение при вводе команд.Windows PowerShell cmdlets, such as Remove-Item , that can make significant, irreversible changes will often prompt for confirmation when you enter its commands. Например, при попытке удалить папку New.Directory вас попросят подтвердить команду, так как папка содержит файлы:For example, if you try to remove the New.Directory folder, you will be prompted to confirm the command, because the folder contains files:
PS> Remove-Item C:\New.Directory
Confirm
The item at C:\temp\New.Directory has children and the -recurse parameter was not
specified. If you continue, all children will be removed with the item. Are you
sure you want to continue?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help
(default is "Y"):
Так как ответ Да является ответом по умолчанию, чтобы удалить папку вместе файлами, нажмите клавишу ВВОД .Because Yes is the default response, to delete the folder and its files, press the Enter key. Чтобы удалить папку без подтверждения, используйте параметр -Recurse .To remove the folder without confirming, use the -Recurse parameter.
Remove-Item C:\temp\New.Directory -Recurse
Выполнение элементов (Invoke-Item)Executing Items (Invoke-Item)
Windows PowerShell использует командлет Invoke-Item для выполнения действия по умолчанию для файла или папки.Windows PowerShell uses the Invoke-Item cmdlet to perform a default action for a file or folder. Это действие по умолчанию определяется обработчиком приложений по умолчанию в реестре; эффект будет таким же, что и при двойном щелчке элемента в проводнике.This default action is determined by the default application handler in the registry; the effect is the same as if you double-click the item in File Explorer.
Предположим, вы запускаете следующую команду:For example, suppose you run the following command:
Invoke-Item C:\WINDOWS
Появится окно проводника, расположенного в C:\Windows, как если бы вы дважды щелкнули папку C:\Windows.An Explorer window that is located in C:\Windows appears, just as if you had double-clicked the C:\Windows folder.
При вызове файла Boot.ini в системе более ранней версии, чем Windows Vista:If you invoke the Boot.ini file on a system prior to Windows Vista:
Invoke-Item C:\boot.ini
Если тип INI-файла связан с Блокнотом, файл boot.ini будет открыт в Блокноте.If the .ini file type is associated with Notepad, the boot.ini file opens in Notepad.
Copy-Item копирование файлов и папок из PowerShell
PowerShell командлет Copy-Item используется для копирования файлов между локальными, сетевыми каталогами или между компьютерами по сети через WinRM. Командлет Copy-Item предоставляет большое количество опций, которые можно использовать в разных сценариях копирования файлов и каталогов (по своим возможностям этот командлет почти не уступает утилите robocopy). Например:
- перезапись файлов (override)
- фильтрация по имени/шаблону
- исключение по имени/шаблону
- Verbose режим
- Копирование файлов с/на удаленные компьютеры
Начнем с простых примеров использования Copy-Item и будем переходить к более сложным.
Копирование файлов и каталогов
Чтобы скопировать один файл 1.txt из каталога C:\SourceFolder\ в F:\DestFolder\, выполните:
Copy-Item -Path "C:\SourceFolder\1.txt" -Destination "F:\DestFolder\1.txt"
Можно использовать сокращенный синтаксис командлета, пропустив указание параметров Path и Destination:
cpi "C:\SourceFolder\1.txt" "F:\DestFolder\1.txt"
Теперь скопируем каталог C:\SourceFolder\folder в F:\DestFolder\folder. В папке folder находится файл 1.txt. Обратите внимание что без ключа –Recurse, папка folder копируется без содержимого:
Copy-Item -Path "C:\SourceFolder\folder" -Destination "F:\DestFolder\folder" -Recurse
С помощью Copy-Item также можно просто объединить файлы из несколько директорий в одну (слияние директории), для этого нужно перечислить директории в ключе –Path:
Copy-Item -Path "C:\SourceFolder\*", "C:\SourceFolder2\*", "C:\SourceFolder3\*" -Destination "F:\DestFolder\"
Копирование с заменой и копирование с заменой read-only файлов
Copy-Item по умолчанию при копировании заменяет файлы в целевом каталоге. Никаких дополнительных параметров указывать не нужно. При копировании каталога, если нужно заменить каталог в целевой папке, нужно использовать ключ –Force, иначе будет ошибка “Элемент folder с указанным именем уже существует — DirectoryExists”.
Для перезаписи файла с атрибутом read-only, нужно использовать ключ -Force. Если его не использовать, вы получите ошибку “отказано в доступе по пути… CopyFileInfoItemUnauthorizedAccessError”.
Чтобы скопировать файл с перезаписью файла с read-only атрибутом используйте параметр Force.
Copy-Item -Path "C:\SourceFolder\1.txt" -Destination "F:\DestFolder\1.txt" -Force
Совет. Чтобы не путаться, ключ –Force можно рассматривать как ключ для копирования с заменой.
Чтобы Copy-Item скопировал файлы из одной папки в другую без замены существующих файлов, можно использовать этот простой скрипт
Copy-Item (Join-Path "C:\SourceFolder\" "*") "F:\DestFolder\" -Exclude (Get-ChildItem "F:\DestFolder\") -Recurse
Этот скрипт скопирует все файлы и папки из C:\SourceFolder в F:\DestFolder без замены файлов уже существующих в F:\DestFolder
Копирование с фильтрацией по шаблону
С помощью Copy-Item можно скопировать файлы/директории выбранные с помощью wildcard символа * или с помощью символа ?. Также поддерживаются некоторые регулярные выражения
- * — обозначает любое количество любых символов
- ? – обозначает 1 любой символ
- [a-z], [0-9] – символы между a-z и цифры между 0 и 9
Для примера возьмём такую структуру файлов:
Выполним копирование командой:
Copy-Item -Path "C:\SourceFolder\fol*" -Destination "F:\DestFolder\"
Результат в F:\DestFolder\
Теперь чистим папку назначения и выполняем:
Copy-Item -Path "C:\SourceFolder\folder[0-3]" -Destination "F:\DestFolder\"
Результат:
Папка без цифры в окончании не скопировалась, потому что folder[0-3] подразумевает что после folder будет как минимум еще 1 символ между 0 и 3
Исключение файлов при копировании
С помощью ключа –Exclude можно исключить файлы при копировании. Например, следующай команда скопирует все файлы кроме файлов с расширением txt.
Copy-Item -Path "C:\SourceFolder\*" -Destination "F:\DestFolder\" -Recurse -Force -Exclude "*.txt"
Аналогичным же образом можно применить ключ –Include, например
Copy-Item -Path "C:\SourceFolder\*" -Destination "F:\DestFolder\" -Recurse -Force -Include "*.txt"
Скопирует только txt файлы. Хотя для простоты гораздо удобнее использовать при копировании вид -Path "C:\SourceFolder\*.txt"
.
Копирование файлов на удаленный компьютер по сети
Copy-File может копировать не только по SMB протоколу, но и через WinRM (WSMan).
Создайте новую сессию с компьютером testnode1 и выполните копирование в её контексте:
$session = New-PSSession -ComputerName testnode1
Copy-Item -Path "C:\SourceFolder\*" -ToSession $session -Destination "C:\SourceFolder\" -Recurse -Force
Эта команда скопирует файлы с локального компьютера из директории C:\SourceFolder на компьютер testnode1 в C:\SourceFolder\.
Примечание. Доступность WSMan на удаленном компьютере можно проверить с помощью командлета Test-WSMan.Test-WSMan -ComputerName testnode1
Если WSMan не настроен, вы можете выполнить его быструю конфигурацию. Для этого откройте командную строку с правами администратора и выполните winrm quickconfig
Также можно копировать и через обычные сетевые SMB шары, для этого просто используйте UNC формат сетевого пути.
Copy-Item -Path "C:\SourceFolder\*" -Destination "\\testnode1\C$\copy_tutorial\"
Можно скопировать файл с удаленного компьютера. Принцип такой же, как и при копировании файлов на удаленный компьютер, за исключением параметра –ToSession, вместо него нужно использовать –FromSession:
$session = New-PSSession -ComputerName testnode1
Copy-Item -FromSession $session -Path "C:\SourceFolder\*" -Destination "F:\DestFolder\" -Recurse -Force
Эта команда скопирует содержимое папки C:\SourceFolder\ с компьютера testnode1 на локальный компьютер в директорию F:\DestFolder
Ключ PassThru
Командлет Copy-Item (как и многие другие командлеты PowerShell) не возвращает результатов в консоль. Параметр PassThru применяется скриптах, или для лог-файлов, когда нужно получить список скопированных файлов и работать с ним дальше. Рассмотрим пример
$items = Copy-Item -Path "C:\SourceFolder\*" –Destination "\\testnode1\C$\copy_tutorial\" -PassThru
Переменная $items
будет содержать список скопированных файлов, с которым вы можете работать дальше.Это значит что вы можете напрямую работать с этими файлами. Например выполнив команду Remove-Item $items[0]
, вы удалите директорию folder.
Ключ Verbose
При использовании ключа -Verbose вы получите подробный лог операций копирования. Например, вывод команды
Copy-Item -Path "C:\SourceFolder\*.txt" -Destination "F:\DestFolder\" -Recurse -Force -Verbose
Несколько полезных скриптов с Copy-Item
Скопировать только файлы:
Get-ChildItem "C:\SourceFolder" -File -Recurse | Copy-Item -Destination "F:\DestFolder"
Скопировать структуру папок, без файлов:
$path = Get-ChildItem "C:\SourceFolder" -Recurse | ?{$_.PsIsContainer -eq $true}
$dest = "F:\DestFolder\"
$parent = $path[0].Parent.Name
$path | foreach {
$_.FullName -match "$parent.+"
New-Item -ItemType directory ($dest + $Matches[0])
}
Copy-Item очень простой и удобный в использовании командлет PowerShell для выполнения операций копирования и перемещения файлов. В сочетании с другими инструментами PowerShell, Copy-Item также является мощным инструментом для написания скриптов.
Copy-Item -Destination Unknown — sergey vasin
Если вы часто используете командлет Copy-Item в скриптах или интерактивно, то вы могли заметить, что результат его работы, в части того, как в итоге будут расположены копируемые элементы, в некоторой степени непредсказуем.
Тем не менее, логика здесь есть, и зависит она от существования элемента, указанного в параметре -Destination.
Выражается это в следующем: если элемент, указанный в параметре -Destination, отсутствует, то происходит копирование элемента, указанного в параметре -Path или -LiteralPath в совокупности с его переименованием в значение параметра -Destination.
А если элемент, указанный в параметре -Destination существует, к примеру, некий каталог, то элементы, указанные в параметре -Path или -LiteralPath копируются в этот каталог.
Files
То есть, если мы решим скопировать файл C:\script.ps1 в каталог C:\Scripts, которого еще не существует, и попробуем для этого воспользоваться командой
Copy-Item -Path C:\Script.ps1 -Destination c:\Scripts
то в итоге мы получим копию файла Script.ps1, расположенную в корне диска C:\ и называющуюся Scripts.
Что здесь происходит. Так как каталог C:\Scripts отсутствует, то Copy-Item считает, что значение параметра -Destination — это конечное имя копируемого элемента, а так как исходный элемент является файлом, то таковым должен быть и конечный элемент.
Естественно, это полезно, если мы хотим скопировать файл с одновременным его переименованием, например, так:
Copy-Item -Path C:\Script.ps1 -Destination c:\Scripts\AnotherScript.ps1
Но если нам нужно скопировать его под своим именем в некий, пока еще не существующий, каталог, то сначала нам нужно его создать.
New-Item -Path C:\Scripts -ItemType Directory Copy-Item -Path C:\Script.ps1 -Destination c:\Scripts
Кроме того, создать каталог нам придется, даже в том случае, если мы намерены скопировать файл в несуществующий каталог с одновременным его, файла, переименованием.
New-Item -Path C:\Scripts -ItemType Directory Copy-Item -Path C:\Script.ps1 -Destination c:\Scripts\AnotherScript.ps1
Ну и, для полноты картины, если мы введем следующую команду
Copy-Item -Path C:\Scripts -Destination c:\File.txt
то в итоге получим папку с именем File.txt. Логика здесь та же самая — элемент, указанный в параметре -Destination отсутствует, поэтому командлет считает, что File.txt это конечное имя копируемого элемента — C:\Scripts, а так как C:\Scripts — это каталог, то и результирующий элемент должен быть каталогом, вне зависимости от того, присутствует в его имени расширение или нет.
Folders
Теперь давайте рассмотрим копирование каталогов с некоторым содержимым. Для экспериментов создадим следующую структуру папок
New-Item -ItemType Directory -Path C:\RootFolder New-Item -ItemType File -Path C:\RootFolder\RootFile1.txt New-Item -ItemType File -Path C:\RootFolder\RootFile2.txt New-Item -ItemType Directory -Path C:\RootFolder\Folder1 New-Item -ItemType File -Path C:\RootFolder\Folder1\File1.txt New-Item -ItemType Directory -Path C:\RootFolder\Folder2 New-Item -ItemType File -Path C:\RootFolder\Folder2\File2.txt
Если мы введем следующую команду
Copy-Item -Path C:\RootFolder -Destination C:\AnotherRootFolder
и при этом каталога C:\AnotherRootFolder в файловой системе не существует, это приведет к тому, что каталог C:\RootFolder будет скопирован на диск C: под именем AnotherRootFolder. Так как мы не указали параметр -Recurse, то скопирован будет только сам каталог, его содержимое операция копирования никак не затронет.
Собственно, для того, чтобы скопировать каталог C:\RootFolder со всем его содержимым, а также в процессе переименовать его в AnotherRootFolder, к вышеприведенной команде потрбуется добавить параметр -Recurse.
При этом по-прежнему подразумевается, что на момент выполнения команды каталога C:\AnotherRootFolder не существует.
Copy-Item -Path C:\RootFolder -Destination C:\AnotherRootFolder -Recurse
Теперь предположим, что каталог AnotherRootFolder на диске C: присутствует. Выполнение этой же самой команды
Copy-Item -Path C:\RootFolder -Destination C:\AnotherRootFolder -Recurse
приведет к тому, что каталог C:\RootFolder будет скопирован под своим именем внутрь каталога C:\AnotherRootFolder вместе со всем своим содержимым.
Эта разница в поведении командлета Copy-Item будет особенно заметна, если в отсутствие каталога C:\AnotherRootFolder два раза запустить одну и ту же команду
Copy-Item -Path C:\RootFolder -Destination C:\AnotherRootFolder -Recurse Copy-Item -Path C:\RootFolder -Destination C:\AnotherRootFolder -Recurse
Результатом будет следующая структура каталогов
C:\AnotherRootFolder
C:\AnotherRootFolder\RootFile1.txt
C:\AnotherRootFolder\RootFile2.txt
C:\AnotherRootFolder\Folder1
C:\AnotherRootFolder\Folder1\File1.txt
C:\AnotherRootFolder\Folder2
C:\AnotherRootFolder\Folder2\File2.txt
C:\AnotherRootFolder\RootFolder
C:\AnotherRootFolder\RootFolder\RootFile1.txt
C:\AnotherRootFolder\RootFolder\RootFile2.txt
C:\AnotherRootFolder\RootFolder\Folder1
C:\AnotherRootFolder\RootFolder\Folder1\File1.txt
C:\AnotherRootFolder\RootFolder\Folder2
C:\AnotherRootFolder\RootFolder\Folder2\File2.txt
Wildcards
Если мы собираемся использовать командлет Copy-Item в скриптах, то понятно, что результаты его выполнения должны быть предсказуемы. Это значит, что перед тем, как начинать копирование, нам стоит удостовериться в наличии папки назначения, и, в том случае, если ее еще не существует — создать.
Конечно, можно зайти с другого конца, и пытаться удостовериться в отсутствии папки, но в случае, если она все же есть, перед нами встанет другая дилемма — что же с ней делать, в особенности если в ней присутствует какое-либо содержимое. Поэтому давайте остановимся на варианте, когда мы используем существующую папку, или создаем ее в случае отсутствия.
Сделать это можно так
if(-not (Test-Path -Path C:\AnotherRootFolder)) {New-Item -ItemType Directory -Path C:\AnotherRootFolder}
Теперь мы можем скопировать нужные нам элементы в каталог назначения. В случае, если мы хотим скопировать только содержимое определенной папки, а не ее саму, мы можем воспользоваться следующей командой
Copy-Item -Path C:\RootFolder\* -Destination C:\AnotherRootFolder -Recurse
О чем тут стоит сказать, так это о том, что, если мы запустим эту команду в отсутствие каталога назначения, результатом будет достаточно выборочное копирование, а также сообщение об ошибке.
Если более детально, результат будет следующим
C:\AnotherRootFolder C:\AnotherRootFolder\File1.txt C:\AnotherRootFolder\RootFile1.txt C:\AnotherRootFolder\RootFile2.txt
Происходит это потому, что использование символа ‘*’ в значении параметра -Path фактически приводит к тому, что операция копирования происходит для каждого элемента каталога C:\RootFolder по отдельности. То есть, сначала копируется каталог C:\RootFolder\Folder1 и, так как на момент запуска командлета элемент, указанный в параметре -Destination, отсутствует, происходит копирование с переименованием, а именно — каталог C:\RootFolder\Folder1 становится каталогом C:\AnotherRootFolder.
Далее то же самое пытается проделать и каталог C:\RootFolder\Folder2, что и вызывает сообщение об ошибке, так как при копировании он пытается переименовать себя в уже существующий каталог.
Таким образом, можно сказать, что количество полученных ошибок будет на единицу меньше количества копируемых каталогов.
-Container:$false
О чем еще стоит поговорить, так это о параметре -Container. Он указывает, что копирование данных должно происходить с учетом структуры каталогов. Так как это является поведением по умолчанию, в обычной ситуации использование параметра -Container не является необходимым.
А пригождается он тогда, когда эту самую структуру каталогов мы сохранять не намерены и в качестве результата хотим получить каталог, содержащий в себе все скопированные файлы, в каких бы вложенных каталогах они до этого не находились.
Copy-Item -Path C:\RootFolder\* -Destination C:\AnotherRootFolder -Recurse -Container:$false
Страницы в социальных сетях:
Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell
Copy-Item (Microsoft.PowerShell.Management) — PowerShell | Документы Microsoft
Копирует элемент из одного места в другое.
В этой статье
Синтаксис
Копируемый элемент
[-Path]
[[-Пункт назначения] ]
[-Контейнер]
[-Сила]
[-Фильтр ]
[-Include ]
[-Exclude ]
[-Recurse]
[-Пройти через]
[-Credential ]
[-Что, если]
[-Подтверждать]
[-FromSession ]
[-ToSession ]
[<Общие параметры>]
Копируемый элемент
-LiteralPath
[[-Пункт назначения] ]
[-Контейнер]
[-Сила]
[-Фильтр ]
[-Include ]
[-Exclude ]
[-Recurse]
[-Пройти через]
[-Credential ]
[-Что, если]
[-Подтверждать]
[-FromSession ]
[-ToSession ]
[<Общие параметры>]
Описание
Командлет Copy-Item
копирует элемент из одного места в другое в том же пространстве имен.Например, он может скопировать файл в папку, но не может скопировать файл на диск с сертификатом.
Этот командлет не вырезает и не удаляет копируемые элементы. Конкретные элементы, которые командлет может копирование зависит от поставщика PowerShell, который предоставляет элемент. Например, он может копировать файлы и каталоги на диске файловой системы и разделы реестра и записи на диске реестра.
Этот командлет может копировать и переименовывать элементы в одной команде. Чтобы переименовать элемент, введите новое имя в
значение параметра Destination .Чтобы переименовать элемент, а не копировать его, используйте Rename-Item
командлет.
Примеры
Пример 1: Скопируйте файл в указанный каталог
В этом примере копируется файл mar1604.log.txt
в каталог C: \ Presentation
. Исходный файл
не удаляется.
Копировать элемент "C: \ Wabash \ Logfiles \ mar1604.log.txt" -Пункт назначения "C: \ Presentation"
Пример 2: Копирование содержимого каталога в существующий каталог
В этом примере содержимое каталога C: \ Logfiles
копируется в существующий каталог C: \ Drawings
каталог.Каталог Logfiles
не копируется.
Если каталог Logfiles
содержит файлы в подкаталогах, эти подкаталоги копируются с
их файловые деревья нетронутыми. По умолчанию для параметра Container установлено значение True , что сохраняет
структура каталогов.
Copy-Item -Path "C: \ Logfiles \ *" -Destination "C: \ Drawings" -Recurse
Примечание
Если вам нужно включить в копию каталог Logfiles
, удалите \ *
из Path .Например:
Copy-Item -Path "C: \ Logfiles" -Destination "C: \ Drawings" -Recurse
Пример 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
каталог на удаленном компьютере, используя информацию о сеансе, хранящуюся в $ Переменная сеанса
. Никакие вложенные папки или файлы не копируются без использования переключателя 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 Каталог
на удаленном компьютере, используя информацию о сеансе, хранящуюся в $ Переменная сеанса
. Подпапки копируются с неизменными деревьями файлов. Операция создает
папку 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
папку на удаленном компьютере, используя информацию о сеансе, хранящуюся в $ Переменная сеанса
. В рамках операции копирования команда изменяет имя элемента с 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"
Копировать элемент "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"
Копировать элемент "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 \ подпапка
C: \ временное \ дерево \ file1.txt
C: \ temp \ tree \ file2.txt
C: \ временное \ дерево \ file3.txt
C: \ temp \ tree \ подпапка \ file3.txt
C: \ temp \ tree \ подпапка \ file4.txt
C: \ temp \ tree \ подпапка \ file5.txt
PS C: \ temp \ test> Get-Content C: \ temp \ tree \ file3.txt
Это file3.txt в корневой папке
PS C: \ temp \ test> Get-Content C: \ temp \ tree \ подпапка \ file3.txt
Это файл file3.txt в подпапке
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 \ подпапка
C: \ темп \ тест \ файл1.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
Это file3.txt в подпапке
Командлет Copy-Item
имеет для параметра Container значение $ false
. Это приводит к тому, что содержимое
исходная папка, которую нужно скопировать, но не сохраняет структуру папок.Обратите внимание, что файлы с
одно и то же имя перезаписывается в папке назначения.
Параметры
-Подтвердить
Запрашивает подтверждение перед запуском командлета.
Тип: | SwitchParameter | |||||||
Псевдонимы: | cf | |||||||
Позиция: | Названный | |||||||
Значение по умолчанию: | Ложь | 9034 | Ложный ввод | Принимать подстановочные знаки: | Ложь |
-Контейнер
Указывает, что этот командлет сохраняет объекты контейнера во время операции копирования.По умолчанию Для параметра контейнера задано значение True .
Тип: | SwitchParameter | |||
Позиция: | Именованный | |||
Значение по умолчанию: | Истина | |||
Принять ввод конвейера: | Ложь | Ложные символы подстановки | : Ложь |
-Кредит
Примечание
Этот параметр не поддерживается поставщиками, установленными вместе с PowerShell.Чтобы выдать себя за другого пользователя или повысить свои учетные данные при запуске этого командлета, используйте Invoke-Command.
Тип: | PSCredential | |
Позиция: | Именованный | |
Значение по умолчанию: | Текущий пользователь | |
Принять конвейерный ввод: | True |
-Пункт назначения
Задает путь к новому местоположению.По умолчанию это текущий каталог.
Чтобы переименовать копируемый элемент, укажите новое имя в значении параметра Destination .
Тип: | Строка |
Позиция: | 1 |
Значение по умолчанию: | Текущий каталог |
Принять конвейерный ввод: | True |
-Исключить
Задает в виде массива строк элемент или элементы, которые этот командлет исключает из операции.Значение
этого параметра квалифицирует параметр Path . Введите элемент контура или узор, например * .txt
. Подстановочные знаки разрешены. Параметр Exclude действует только тогда, когда
команда включает содержимое элемента, например C: \ Windows \ *
, где подстановочный знак
указывает содержимое каталога C: \ Windows
.
Тип: | Строка [] | ||||
Позиция: | Именованный | ||||
Значение по умолчанию: | Нет | ||||
Принять конвейерный ввод: | Ложные | символы подстановки | : Ложные | True |
-Фильтр
Задает фильтр для определения параметра Path .Файловая система Provider — единственный установленный поставщик PowerShell, который поддерживает использование фильтров. Ты можешь найти синтаксис для языка фильтров FileSystem в about_Wildcards. Фильтры более эффективны, чем другие параметры, поскольку поставщик применяет их, когда командлет получает объекты вместо того, чтобы PowerShell отфильтровывал объекты после их получения.
Тип: | Строка | ||
Позиция: | Именованный | ||
Значение по умолчанию: | Нет | ||
Принять ввод данных конвейера: | Ложный | ||
-Force
Указывает, что этот командлет копирует элементы, которые иначе нельзя изменить, например, копирование через файл или псевдоним только для чтения.
Тип: | SwitchParameter | |
Позиция: | Именованный | |
Значение по умолчанию: | Ложь | |
Принять ввод конвейера: | Ложный | Ложный подстановочный знак |
-Сессия
Задает объект PSSession , из которого копируется удаленный файл. Когда вы используете это , параметры Path и LiteralPath относятся к локальному пути на удаленном машина.
Тип: | PSSession | |||
Позиция: | Именованный | |||
Значение по умолчанию: | Нет | |||
Принять конвейерный ввод: | Ложные | символы подстановки | : Ложные |
-включить
Задает в виде массива строк элемент или элементы, которые этот командлет включает в операцию. Значение
этого параметра квалифицирует параметр Path .Введите элемент контура или узор, например «* .txt»
. Подстановочные знаки разрешены. Параметр Включить действует только тогда, когда
команда включает содержимое элемента, например C: \ Windows \ *
, где подстановочный знак
указывает содержимое каталога C: \ Windows
.
Тип: | Строка [] | ||||
Позиция: | Именованный | ||||
Значение по умолчанию: | Нет | ||||
Принять ввод конвейера: | Ложные | символы подстановки | : Ложные | True |
-LiteralPath
Указывает путь к одному или нескольким местоположениям.Значение LiteralPath используется именно так, как оно набрал. Никакие символы не интерпретируются как подстановочные знаки. Если путь включает escape-символы, заключите это в одинарных кавычках. Одиночные кавычки говорят PowerShell не интерпретировать никакие символы как escape-последовательности.
Для получения дополнительной информации см. About_Quoting_Rules.
Тип: | String [] |
Псевдонимы: | PSPath, LP |
Позиция: | Именованный |
Значение по умолчанию: | Нет | True |
Принимать подстановочные знаки: | False |
-PassThru
Возвращает объект, представляющий элемент, с которым вы работаете.По умолчанию этот командлет не генерирует никакого вывода.
Тип: | SwitchParameter | |
Позиция: | Именованный | |
Значение по умолчанию: | Ложь | |
Принять ввод конвейера: | Ложный | Подстановочный знак |
— путь
Задает в виде массива строк путь к копируемым элементам. Подстановочные знаки разрешены.
Тип: | Строка [] | ||||
Позиция: | 0 | ||||
Значение по умолчанию: | Нет | ||||
Принять ввод данных конвейера: | Принять подстановочные символы | : Истинный | True |
-Recurse
Указывает, что этот командлет выполняет рекурсивное копирование.
Тип: | SwitchParameter | |
Позиция: | Именованный | |
Значение по умолчанию: | Ложь | |
Принять ввод конвейера: | Ложный | Подстановочный знак |
-ToSession
Задает объект PSSession , в который копируется удаленный файл.Когда вы используете это параметр, параметр Destination относится к локальному пути на удаленном машина.
Тип: | PSSession | |||
Позиция: | Именованный | |||
Значение по умолчанию: | Нет | |||
Принять конвейерный ввод: | Ложные | символы подстановки | : Ложные |
-WhatIf
Показывает, что произойдет, если командлет будет запущен.Командлет не запущен.
Тип: | SwitchParameter | |||||||
Псевдонимы: | wi | |||||||
Позиция: | Именованный | |||||||
Значение по умолчанию: | Ложь | 9034 | Ложный ввод | Принимать подстановочные знаки: | Ложь |
Входы
Строка
Вы можете передать строку, содержащую путь к этому командлету, по конвейеру.
Выходы
Нет или объект, представляющий скопированный элемент
При использовании параметра PassThru этот командлет возвращает объект, представляющий скопированный элемент. В противном случае этот командлет не генерирует никаких выходных данных.
Банкноты
Этот командлет предназначен для работы с данными, предоставляемыми любым поставщиком. Чтобы перечислить поставщиков
доступный в вашем сеансе, введите Get-PSProvider
. Для получения дополнительной информации см. About_Providers.
Move-Item (Microsoft.PowerShell.Management) — PowerShell | Документы Microsoft
Перемещает предмет из одного места в другое.
В этой статье
Синтаксис
Перемещение предмета
[-Path]
[[-Пункт назначения] ]
[-Сила]
[-Фильтр ]
[-Include ]
[-Exclude ]
[-Пройти через]
[-Credential ]
[-Что, если]
[-Подтверждать]
[<Общие параметры>]
Перемещение предмета
-LiteralPath
[[-Пункт назначения] ]
[-Сила]
[-Фильтр ]
[-Include ]
[-Exclude ]
[-Пройти через]
[-Credential ]
[-Что, если]
[-Подтверждать]
[<Общие параметры>]
Описание
Командлет Move-Item
перемещает элемент, включая его свойства, содержимое и дочерние элементы, из одного
место в другое место.Эти местоположения должны поддерживаться одним и тем же провайдером.
Например, он может переместить файл или подкаталог из одного каталога в другой или переместить реестр.
подключ от одного ключа к другому.
Когда вы перемещаете элемент, он добавляется в новое место и удаляется из исходного местоположения.
Примеры
Пример 1. Переместите файл в другой каталог и переименуйте его в
. Эта команда перемещает файл Test.txt
с диска C:
в каталог E: \ Temp
и переименовывает его.
из пробы.txt с
по tst.txt
.
Move-Item -Path C: \ test.txt -Destination E: \ Temp \ tst.txt
Пример 2: Переместить каталог и его содержимое в другой каталог
Эта команда перемещает каталог C: \ Temp
и его содержимое в каталог C: \ Logs
.
Каталог «Temp», а также все его подкаталоги и файлы появятся в каталоге «Журналы».
Move-Item -Path C: \ Temp -Destination C: \ Logs
Пример 3: Переместить все файлы указанного расширения из текущего каталога в другой каталог
Эта команда перемещает все текстовые файлы ( *.txt
) в текущем каталоге (представлен точкой
(.
)) в каталог C: \ Logs
.
Move-Item -Path. \ *. Txt -Destination C: \ Logs
Пример 4: Рекурсивно переместить все файлы с указанным расширением из текущего каталога в другой каталог
Эта команда перемещает все текстовые файлы из текущего каталога и всех подкаталогов, рекурсивно в каталог «C: \ TextFiles».
Get-ChildItem -Path ".\ *. txt "-Recurse | Move-Item -Destination" C: \ TextFiles "
Команда использует командлет Get-ChildItem
для получения всех дочерних элементов в текущем каталоге.
(представлен точкой [.]) и его подкаталогами с расширением имени файла « .txt».
Он использует параметр Recurse , чтобы сделать поиск рекурсивным, и параметр Include, чтобы ограничить
поиск в файлы « .txt».
Оператор конвейера ( |
) отправляет результаты этой команды в Move-Item
, который перемещает текст
файлы в каталог «TextFiles».
Если файлы, которые необходимо переместить в «C: \ Textfiles», имеют то же имя, Move-Item
отображает ошибку
и продолжается, но перемещает только один файл с каждым именем в «C: \ Textfiles».
Остальные файлы остаются в своих исходных каталогах.
Если каталог «Текстовые файлы» (или любой другой элемент пути назначения) не существует,
команда не работает.
Отсутствующий каталог не создается для вас, даже если вы используете параметр Force . Move-Item
перемещает первый элемент в файл под названием «Textfiles», а затем отображает ошибку с объяснением
что файл уже существует.
Кроме того, по умолчанию Get-ChildItem
не перемещает скрытые файлы.
Чтобы переместить скрытые файлы, используйте параметр Force с Get-ChildItem
.
Примечание
В Windows PowerShell 2.0 при использовании параметра Recurse командлета Get-ChildItem
значение параметра Path должно быть контейнером.
Используйте параметр Include , чтобы указать фильтр расширения имени файла .txt.
( Get-ChildItem -Path.\ * -Include * .txt -Recurse | Переместить элемент-назначение C: \ TextFiles
).
Пример 5. Перенести разделы и значения реестра в другой раздел
Эта команда перемещает разделы и значения реестра в разделе реестра MyCompany в HKLM \ Software
на ключ «MyNewCompany».
Подстановочный знак ( *
) указывает, что следует перемещать содержимое ключа «MyCompany», а не
сам ключ.
В этой команде опускаются необязательные имена параметров Path и Destination .
Move-Item "HKLM: \ software \ mycompany \ *" "HKLM: \ software \ mynewcompany"
Пример 6: Переместить каталог и его содержимое в подкаталог указанного каталога
Эта команда перемещает каталог «Журналы [Sept`06]» (и его содержимое) в «Журналы [2006]» каталог.
Журналы Move-Item -LiteralPath '[сентябрь 2006 г.]' -Журналы назначения '[2006]'
Параметр LiteralPath используется вместо Path , поскольку исходное имя каталога включает символы левой и правой скобок («[» и «]»).Путь также заключен в одинарные кавычки (»), поэтому обратный апостроф (`) не неверно истолковано.
Параметр Destination не требует буквального пути, потому что переменная Destination также должны быть заключены в одинарные кавычки, потому что они включают скобки, которые могут быть неправильно истолкованы.
Параметры
-Подтвердить
Запрашивает подтверждение перед запуском командлета.
Тип: | SwitchParameter | |||||||
Псевдонимы: | cf | |||||||
Позиция: | Названный | |||||||
Значение по умолчанию: | Ложь | 9034 | Ложный ввод | Принимать подстановочные знаки: | Ложь |
-Credential
Примечание
Этот параметр не поддерживается поставщиками, установленными вместе с PowerShell.Чтобы выдать себя за другого пользователя или повысить свои учетные данные при запуске этого командлета, используйте Invoke-Command.
Тип: | PSCredential | |
Позиция: | Именованный | |
Значение по умолчанию: | Текущий пользователь | |
Принять конвейерный ввод: | True |
-Пункт назначения
Указывает путь к месту, куда перемещаются элементы.По умолчанию это текущий каталог. Подстановочные знаки разрешены, но результат должен указывать на одно местоположение.
Чтобы переименовать перемещаемый элемент, укажите новое имя в значении параметра Destination .
Тип: | Строка |
Позиция: | 1 |
Значение по умолчанию: | Текущий каталог |
Принять конвейерный ввод Истинный: | True |
-Исключить
Задает в виде массива строк элемент или элементы, которые этот командлет исключает из операции.Значение
этого параметра квалифицирует параметр Path . Введите элемент контура или узор, например * .txt
. Подстановочные знаки разрешены. Параметр Exclude действует только тогда, когда
команда включает содержимое элемента, например C: \ Windows \ *
, где подстановочный знак
указывает содержимое каталога C: \ Windows
.
Тип: | Строка [] | ||||
Позиция: | Именованный | ||||
Значение по умолчанию: | Нет | ||||
Принять конвейерный ввод: | Ложные | символы подстановки | : Ложные | True |
-Фильтр
Задает фильтр для определения параметра Path .Файловая система Provider — единственный установленный поставщик PowerShell, который поддерживает использование фильтров. Ты можешь найти синтаксис для языка фильтров FileSystem в about_Wildcards. Фильтры более эффективны, чем другие параметры, поскольку поставщик применяет их, когда командлет получает объекты вместо того, чтобы PowerShell отфильтровывал объекты после их получения.
Тип: | Строка | ||
Позиция: | Именованный | ||
Значение по умолчанию: | Нет | ||
Принять ввод данных конвейера: | Ложный | ||
-Force
Принудительно запускает команду без запроса подтверждения пользователя.Реализация варьируется от поставщика к поставщику. Для получения дополнительной информации см. About_Providers.
Тип: | SwitchParameter | |
Позиция: | Именованный | |
Значение по умолчанию: | Ложь | |
Принять ввод конвейера: | Ложный | Ложный подстановочный знак |
-включить
Задает в виде массива строк элемент или элементы, которые этот командлет включает в операцию.Значение
этого параметра квалифицирует параметр Path . Введите элемент контура или узор, например «* .txt»
. Подстановочные знаки разрешены. Параметр Включить действует только тогда, когда
команда включает содержимое элемента, например C: \ Windows \ *
, где подстановочный знак
указывает содержимое каталога C: \ Windows
.
Тип: | Строка [] | ||||
Позиция: | Именованный | ||||
Значение по умолчанию: | Нет | ||||
Принять ввод конвейера: | Ложные | символы подстановки | : Ложные | True |
-LiteralPath
Указывает путь к одному или нескольким местоположениям.Значение LiteralPath используется точно так, как оно есть. набрал. Никакие символы не интерпретируются как подстановочные знаки. Если путь включает escape-символы, заключите это в одинарных кавычках. Одиночные кавычки говорят PowerShell не интерпретировать никакие символы как escape-последовательности.
Для получения дополнительной информации см. About_Quoting_Rules.
Тип: | String [] |
Псевдонимы: | PSPath, LP |
Позиция: | Именованный |
Значение по умолчанию: | Нет | True |
Принимать подстановочные знаки: | False |
-PassThru
Возвращает объект, представляющий элемент, с которым вы работаете.По умолчанию этот командлет не генерирует никаких выходных данных.
Тип: | SwitchParameter | |
Позиция: | Именованный | |
Значение по умолчанию: | Ложь | |
Принять ввод конвейера: | Ложный | Подстановочный знак |
— путь
Указывает путь к текущему расположению элементов. По умолчанию это текущий каталог.Подстановочные знаки разрешены.
Тип: | Строка [] | ||||
Позиция: | 0 | ||||
Значение по умолчанию: | Текущий каталог | ||||
Принять ввод данных конвейера: | Истинный | Принять подстановочные символы | True |
-WhatIf
Показывает, что произойдет, если командлет будет запущен. Командлет не запущен.
Тип: | SwitchParameter | |||||||
Псевдонимы: | wi | |||||||
Позиция: | Именованный | |||||||
Значение по умолчанию: | Ложь | 9034 | Ложный ввод | Принимать подстановочные знаки: | Ложь |
Входы
Строка
Вы можете передать строку, содержащую путь к этому командлету, по конвейеру.
Выходы
Нет или объект, представляющий перемещенный элемент
При использовании параметра PassThru этот командлет создает объект, представляющий перемещенный элемент. В противном случае этот командлет не генерирует никаких выходных данных.
Банкноты
- Этот командлет перемещает файлы между дисками, которые поддерживаются одним и тем же поставщиком, но перемещает каталоги только на одном диске.
- Поскольку команда
Move-Item
перемещает свойства, содержимое и дочерние элементы элемента, все перемещаются по умолчанию рекурсивны. - Этот командлет предназначен для работы с данными, предоставляемыми любым поставщиком.
Чтобы перечислить поставщиков, доступных в вашем сеансе, введите
Get-PSProvider
. Для получения дополнительной информации см. About_Providers.
about_Wildcards — PowerShell | Документы Microsoft
- 2 минуты на чтение
В этой статье
КРАТКОЕ ОПИСАНИЕ
Описывает, как использовать подстановочные знаки в PowerShell.
ПОЛНОЕ ОПИСАНИЕ
Подстановочные знаки представляют один или несколько символов. Вы можете использовать их для
создавать шаблоны слов в командах. Выражения с подстановочными знаками используются с -подобный оператор
или с любым параметром, который принимает подстановочные знаки.
Например, чтобы сопоставить все файлы в каталоге C: \ Techdocs
с .ppt
расширение имени файла, тип:
Get-ChildItem C: \ Techdocs \ *. Ppt
В этом случае подстановочный знак звездочка ( *
) представляет любые символы.
которые появляются до .PPT
расширение имени файла.
Подстановочные знаки проще, чем регулярные выражения. Для большего информацию см. about_Regular_Expressions.
PowerShell поддерживает следующие подстановочные знаки:
Подстановочный знак | Описание | Пример | Матч | Нет совпадений |
---|---|---|---|---|
* | Соответствует нулю или более символов | а * | aA, ag, Apple | банан |
? | Соответствует одному символу в этой позиции | ? N | ан, в, на | ран |
[] | Соответствует диапазону символов | [a-l] ook | книга, повар, взгляд | взял |
[] | Соответствие определенным символам | [bc] ook | книга, повар | крючок |
В один и тот же образец слова можно включить несколько подстановочных знаков.За Например, чтобы найти текстовые файлы с именами, начинающимися с букв a через л , тип:
Get-ChildItem C: \ Techdocs \ [a-l] *. Txt
Многие командлеты принимают подстановочные знаки в значениях параметров. Раздел справки для каждый командлет описывает, какие параметры принимают подстановочные знаки. За параметры, которые принимают подстановочные знаки, их использование нечувствительно к регистру.
Вы можете использовать подстановочные знаки в командах и блоках сценариев, например, создать образец слова, представляющий значения свойств.Например, следующая команда получает службы, в которых значение свойства ServiceType включает Interactive .
Get-Service | Where-Object {$ _. ServiceType -Like "* Interactive *"}
В следующем примере оператор If
включает условие, которое использует
символы подстановки для поиска значений свойств. Если точка восстановления Описание включает PowerShell , команда добавляет значение
свойство CreationTime точки восстановления в файл журнала.
$ p = Get-ComputerRestorePoint
foreach ($ point in $ p) {
if ($ point.description -like "* PowerShell *") {
Add-Content -Path C: \ TechDocs \ RestoreLog.txt "$ ($ point.CreationTime)"
}
}
СМОТРИ ТАКЖЕ
about_Language_Keywords
о_Иф
about_Script_Blocks
Элемент копирования— PowerShell — SS64.com
Элемент копирования — PowerShell — SS64.comСкопируйте элемент из одного места в другое в пространстве имен.Скопируйте файлы и каталоги с помощью поставщика файловой системы или разделы реестра и записи реестра с помощью поставщика реестра.
Синтаксис Копировать элемент [[-path] | [-literalPath]] строка [] [[-destination] строка []] [-container] [-recurse] [-force] [-incude string []] [-exclude string []] [-filter строка ] [-passThru] [-credential PSCredential ] [-whatIf] [-confirm] [-UseTransaction] [ CommonParameters ] ключ -path строка Элементы для копирования, подстановочные знаки разрешены.-literalPath строка Как и в случае с Path, указанным выше, только значение используется точно так, как было введено. Никакие символы не интерпретируются как подстановочные знаки. Если путь включает какие-либо Затем escape-символы заключают путь в одинарные кавычки. -направление строка Куда копировать предметы. -контейнер Сохранять объекты-контейнеры во время копирования (установлено по умолчанию). -включить строку Копировать только указанные элементы, исключая все остальные даже если они существуют в пути e.грамм. -включить * .txt - исключить строку Пропускает указанные элементы из пути, например. "* SS64 *" -фильтр строка Фильтр в формате или на языке провайдера. Точный синтаксис фильтра (поддержка подстановочных знаков и т. Д.) Зависит от поставщика. Фильтры более эффективны, чем -include / -exclude, потому что поставщик применяет фильтр при извлечении объектов вместо того, чтобы PowerShell исключает или включает объекты после их получения.-сила Отменить ограничения, препятствующие успешному выполнению команды, кроме из настроек безопасности. например Force создаст каталоги пути к файлам или переопределить атрибут файлов только для чтения, но не изменит права доступа к файлам. -контент PSCredential Использует учетные данные для проверки доступа к файлу. Учетные данные представляют имя пользователя, например "User01" или "Domain01 \ User01", или PSCredential объект, например, полученный с помощью Get-Credential.Этот параметр отображается, но пока не поддерживается ни одним ядром PowerShell. командлеты или поставщики. -пройти через Пропустить объект по конвейеру. По умолчанию copy-item не генерирует никаких выходных данных. -рекурс включить подпапки / подразделы. -что, если Опишите, что произойдет, если вы выполните команду без фактического выполнение команды. -подтверждать Запросить подтверждение перед выполнением команды.-UseTransaction Включите команду в активную транзакцию.
Стандартные псевдонимы для Copy-Item: copy, cp, cpi
Примеры
Скопируйте файл в каталог C: \ SS64 \:
PS C: \> Copy-Item C: \ temp \ demo.txt -destination C: \ SS64
Скопируйте все содержимое рабочей папки в резервная копия \ июнь папка:
C: \ PS> Копировать элемент C: \ work -destination C: \ backup \ June -recurse
Параметр -recurse гарантирует, что все подкаталоги будут скопированы без изменений.Для параметра -container по умолчанию установлено значение true, это сохраняет структуру каталогов. Будет создана июньская папка, если она еще не существует.
«Репликанты похожи на любую другую машину. Они либо польза, либо опасность.
Если они приносят пользу, это не моя проблема »~ Декард (Бегущий по лезвию)
Связанные командлеты PowerShell:
Test-Path — Вернуть истину, если путь / файл существует.
Clear-item — Удалить содержимое переменной или псевдонима.
Get-item — возвращает объект, представляющий элемент в пространстве имен.
invoke-item — вызвать исполняемый файл или открыть файл (СТАРТ).
Move-item — Переместить элемент из одного места в другое.
New-item — Создать новый элемент в пространстве имен.
Set-item — Установить значение пути к поставщику.
Set-Content — Записывает или заменяет содержимое элемента и может изменять кодировку файла.
Remove-item — удалить элемент.
Rename-item — изменить имя существующего элемента.
Get-Help — about_namespace.
Эквивалентные команды bash: cp — Копировать файлы.
Авторские права © 1999-2021 SS64.com
Некоторые права защищены.
Копирование файлов как Boss в PowerShell
Копирование файлов. Это не сексуально, но нужно делать. В графическом интерфейсе мы копируем и вставляем с помощью буфера обмена, но в PowerShell у нас есть командлет Copy-Item.
Команды для копирования файлов существуют всегда во всех языках оболочки. В мире PowerShell самый популярный способ получить копию файла или папки в сценарии PowerShell из точки A в точку B — это использовать командлет PowerShell Copy-Item.Этот командлет позволяет нам копировать файл и папку, давая нам возможность рекурсивно просматривать файлы в папке, использовать подстановочные знаки для выбора файлов, которые нам нужно скопировать, и даже использовать PowerShell Remoting для копирования файлов!
Командлет Copy-Item
является частью командлетов поставщика PowerShell. Это общий командлет, который распознается по своему существительному Item . Большинство этих командлетов поставщика могут использоваться разными поставщиками, но за мои почти 10 лет использования PowerShell я видел только Copy-Item
для использования с поставщиком файловой системы.
Используя Copy-Item
, PowerShell позволяет разработчику копировать файлы и папки различными способами.
Базовое использование
По сути, командлет Copy-Item
копирует один файл из точки A в точку B, используя параметр Path
в качестве пути к исходному файлу и параметр Destination
в качестве пути к папке назначения.
PS> Test-Path -Path C: \ PointB \ 1.txt
Ложь
PS> Копировать-элемент-Путь C: \ PointA \ 1.txt -Пункт назначения C: \ PointB \
PS> Test-Path -Path C: \ PointB \ 1.txt
Правда
Этот командлет также может копировать пустые папки. Я перечислю элементы в папке C: \ EmptyFolder , а затем скопирую их.
PS> Get-ChildItem -Path C: \ EmptyFolder \
PS> Test-Path -Path C: \ PointB \ EmptyFolder -PathType Контейнер
Ложь
PS> Copy-Item -Path C: \ EmptyFolder \ -Destination C: \ PointB \
PS> Test-Path -Path C: \ PointB \ EmptyFolder -PathType Контейнер
Правда
Возможно, в папке есть файл только для чтения.По умолчанию Copy-Item
не перезаписывает его. Чтобы принудительно выполнить переопределение, просто добавьте параметр Force
.
Получение выборки с помощью Copy-Item
Помимо копирования одного файла или папки, мы также можем скопировать все содержимое папки. Параметр Path
Copy-Item принимает подстановочные знаки, такие как звездочка, чтобы соответствовать одному или нескольким символам, или знак вопроса, чтобы соответствовать только одному символу.
PS> @ (Get-ChildItem -Path C: \ PointB).Считать
0
PS> @ (Get-ChildItem -Path C: \ PointA) .Count
10000
PS> @ (Get-ChildItem -Path C: \ PointB) .Count
0
PS> Copy-Item -Path C: \ PointA \ * -Destination C: \ PointB \
PS> @ (Get-ChildItem -Path C: \ PointB) .Count
10000
PS> @ (Get-ChildItem -Path C: \ PointB) .Count
0
PS> Copy-Item -Path 'C: \ PointA \ 26? 0.txt' -Destination C: \ PointB \
PS> Get-ChildItem -Path C: \ PointB \
Каталог: C: \ PointB
Режим LastWriteTime Длина Имя
-a ---- 11.08.2017 8:59 5 2600.текст
-a ---- 11.08.2017 8:59 5 2610.txt
-a ---- 11.08.2017 8:59 5 2620.txt
-a ---- 11.08.2017 8:59 5 2630.txt
-a ---- 11.08.2017 8:59 5 2640.txt
-a ---- 11.08.2017 8:59 5 2650.txt
-a ---- 11.08.2017 8:59 5 2660.txt
-a ---- 11.08.2017 8:59 5 2670.txt
-a ---- 11.08.2017 8:59 5 2680.txt
-a ---- 11.08.2017 8:59 5 2690.txt
Объединение нескольких папок вместе
Еще одна интересная особенность Copy-Item
— это возможность одновременного копирования нескольких папок. Путем передачи нескольких путей в параметр Path
, Copy-Item
будет просматривать каждый из них, копировать папку или файл (ы) в зависимости от пути и «объединять» их все в одно место назначения.
PS> Копировать элемент -Path C: \ PointB \ *, C: \ PointC \ *, C: \ PointD \ * -Destination C: \ PointE
PS> Get-ChildItem-Путь C: \ PointE
Каталог: C: \ PointE
Режим LastWriteTime Длина Имя
-a ---- 11.11.2017 12:15 2 PointBFile.текст
-a ---- 11.11.2017 12:15 2 PointCFile.txt
-a ---- 11.11.2017 12:16 4 PointDFile.txt
Рекурсивное копирование файлов
Скорее всего, вам не повезет, и вы поместите все файлы в одну папку без каких-либо папок. Обычно мы сталкиваемся с ситуациями, когда у нас есть много вложенных папок в родительской папке, файлы в которых мы тоже хотели бы скопировать. Используя параметр Recurse
в Copy-Item
, он с удовольствием заглянет в каждую подпапку и скопирует все файлы и папки в каждой рекурсивно.
Обратите внимание, что я передаю файлы и папки из Get-ChildItem
напрямую в Copy-Item
. Copy-Item
поддерживает конвейер!
PS> (Get-ChildItem -Path C: \ PointB \ -Recurse) .Count
5
PS> Get-ChildItem -Path C: \ PointB \ | Копировать элемент -Пункт назначения C: \ PointC -Recurse
PS> (Get-ChildItem -Path C: \ PointC \ -Recurse) .Count
5
Преимущества использования параметра PassThru
Многие командлеты в PowerShell имеют параметр PassThru.Командлеты, которые обычно ничего не возвращают, могут возвращать объекты, которыми они управляют с помощью параметра PassThru. Этот командлет ничем не отличается. Когда я впервые начал писать скрипты, я никогда не использовал этот параметр, потому что не чувствовал необходимости.
Например, если бы я хотел скопировать файл в удаленное место, а затем ссылаться на этот файл позже в своем скрипте, я бы сделал что-то вроде этого:
$ remoteFilePath = '\ WEBSRV1 \ c $ \ File.txt'
Copy-Item -Path C: \ File.txt -Destination $ remoteFilePath
Write-Host «Я только что скопировал файл в $ remoteFilePath»
Этот метод работает, но он может быть лучше.Вместо определения переменной для удаленного пути, почему бы просто не захватить объект, который возвращается командлетом Copy-Item
при использовании вместо этого параметра PassThru
? Возвращаемые объекты всегда будут иметь путь к файлу назначения.
$ copiedFile = Copy-Item -Path C: \ File.txt -Destination '\ WEBSRV1 \ c
Копирование файлов с помощью сеанса удаленного взаимодействия PowerShell
Одна интересная функция, которая появилась в PowerShell v5, — это возможность этого командлета не использовать протокол SMB по умолчанию для передачи файла, а вместо этого использовать WinRM и удаленный сеанс PowerShell.Используя параметр Session
, Copy-Item
использует существующий сеанс PowerShell и передает файлы таким образом. Это отличный способ обойти брандмауэры, а при шифровании сеанса связи — дополнительный уровень безопасности.
PS> $ session = New-PSSession -ComputerName WEBSRV1
PS> Invoke-Command -Session $ session -ScriptBlock {Test-Path -Path C: \ File.txt}
Ложь
PS> Copy-Item -Path C: \ File.txt -ToSession $ session -Destination 'C: \'
PS> Invoke-Command -Session $ session -ScriptBlock {Test-Path -Path C: \ File.текст }
Правда
Мы могли бы скопировать файл File.txt через SMB и надеяться, что общий ресурс администратора C $ доступен и использует путь назначения \\ WEBSRV1 \ c $
. Поскольку вместо этого мы использовали параметр ToSession
, путь назначения всегда будет локальным путем для компьютера, на котором запущен удаленный сеанс.
Сводка
Командлет Copy-Item
— один из тех основных командлетов PowerShell, которые вы будете использовать снова и снова.В PowerShell можно копировать файлы и папки различными способами, при этом он простой, но мощный, особенно благодаря возможности использовать подстановочные знаки, объединять несколько папок с файлами вместе и использовать существующие сеансы удаленного взаимодействия PowerShell!
Дополнительная литература
СвязанныеУчебное пособие по командам копирования элементов Powershell с примерами — POFTUT
Powershell предоставляет командлет Copy-Item
для копирования элемента из одного места в другое.Этим элементом может быть файл, папка или каталог. Командлет Copy-Item предоставляет различные функции и параметры, такие как перезапись, фильтрация, исключение, подробный, прогресс и т. Д. В этом руководстве мы изучим эти функции на примерах.
Мы начнем с простого примера, в котором мы скопируем данный файл в указанный каталог. Мы будем использовать просто указать имена исходного и конечного файлов с их путями.
PS> Копировать элемент. \ Config.sys test.sys
Мы также можем использовать опцию -Destination
, чтобы указать пункт назначения, как показано ниже.
PS> Копировать элемент. \ Config.sys -Destination test.sysКопировать файл в указанный каталог
Мы также можем скопировать каталог и его содержимое в указанный или целевой каталог, используя опцию -Recurse
. Опция Recurse скопирует все вложенные файлы и папки данного исходного каталога в целевой каталог.
PS> Копировать элемент. \ PerfLogs PerfBack -Recurse
Copy-Item
— очень полезная команда, с помощью которой мы можем копировать локальные файлы и папки на удаленные серверы, которые поддерживают удаленное взаимодействие PS.В этом примере мы укажем удаленный сервер или имя компьютера с помощью параметра -ComputerName
. Мы можем использовать для этого имя компьютера, имя хоста или IP-адрес. В этом примере мы скопируем на удаленный сервер с IP-адресом 192.168.1.10
PS> Копировать элемент. \ PerfLogs PerfBack -ComputerName 192.168.1.10
Мы также можем копировать локальные папки и каталоги на удаленный сервер или систему. Мы также будем использовать параметры -ComputerName
, как в предыдущем примере.Мы также предоставим опцию -Recurse
для копирования подпапок и каталогов.
PS> Копировать элемент. \ PerfLogs PerfBack -Recurse -ComputerName 192.168.1.10
Мы также можем копировать удаленные файлы с удаленного сервера в локальную систему. Мы создадим сеанс с удаленной системой с помощью командлета New-PSSession
и будем использовать этот сеанс с опцией -ToSession
. В этом примере мы будем копировать с сервера DC1
.
$ Sessions = New-PSSession -ComputerName "DC1" -Credential "Poftut \ ismail" PS> Copy-Item "C: \ test.txt" "D: \ test.txt" -ToSession $ Sessions
Мы также можем рекурсивно копировать каталоги удаленного сервера в локальную систему. Мы будем использовать очень похожую команду из предыдущего примера. Мы просто предоставим вариант -Recurse
.
$ Sessions = New-PSSession -ComputerName "DC1" -Credential "Poftut \ ismail" PS> Копировать элемент "C: \ PerfLogs" "D: \ PerfLogs" -Recurse -ToSession $ Sessions
Если в месте назначения есть такой же файл или папка, они не будут скопированы.Если мы хотим скопировать даже целевой файл или существующую папку, нам нужно принудительно использовать опцию перезаписи. Мы будем использовать опцию -Force
для перезаписи.
PS> Копировать элемент. \ Config.sys test.sys -Force
При копировании файлов и папок мы можем их фильтровать. Если мы не хотим копировать указанное имя файла.
Мы можем фильтровать скопированные файлы по их расширениям. Мы также будем использовать параметры -Exclude
или -Include
и предоставим расширение, например .txt
, .sql
и т. д. В этом примере мы будем фильтровать и копировать только текстовые файлы.
PS> Copy-Item. \ Config.sys test.sys -Include "* .txt"
Мы также можем исключить указанные файлы с помощью опции -Exclude
. Мы предоставим некоторую часть имени файла. В этом примере мы исключим имена файлов, начинающиеся с Sql
.
PS> Copy-Item. \ Config.sys test.sys -Exclude «Sql *»
Во время операции копирования нам может потребоваться дополнительная информация об операции.Мы можем распечатать в подробном режиме операцию копирования с опцией -Verbose
.
PS> Копировать элемент. \ PerfLogs PerfBack -Recurse -VerboseОперация подробного копирования Элемент копирования
PowerShell — Javatpoint
Командлет Copy-Item копирует элемент из одного места в другое в пространстве имен. Например, этот командлет может копировать файл в папку, но не может копировать файл на диск с сертификатом. Он не удаляет и не обрезает копируемые элементы.Конкретные элементы, которые копирует командлет, зависят от поставщика PowerShell, который предоставляет этот элемент.
Например, этот командлет может копировать файлы и каталоги на диске файловой системы, а также разделы и записи реестра на диске реестра. Он может копировать и переименовывать элементы в одном командлете. Введите новое имя в значение параметра -Destination , чтобы переименовать элемент.
Синтаксис
Копировать элемент
[-Подтверждать]
[-Path
Копировать элемент
[-Подтверждать]
[-LiteralPath
Параметры
-Подтвердить
Параметр -Confirm запрашивает подтверждение перед запуском командлета.
— путь
Строковый массив в параметре -Path используется для указания пути к копируемым элементам. Допускаются подстановочные знаки.
-LiteralPath
Параметр -LiteralPath используется для указания пути к местоположению. Его значение используется точно так, как оно набрано. Если путь включает escape-символы, заключите его в одинарные кавычки. Одиночные кавычки говорят Windows PowerShell, что она не должна интерпретировать какой-либо символ как escape-последовательность.В командлете нет символа, который интерпретируется как подстановочный знак.
-Пункт назначения
Параметр -Destination используется для указания пути к новому местоположению. По умолчанию используется текущее местоположение. Подстановочные знаки не принимаются. Чтобы переименовать копируемый элемент, задав новое имя в значении параметра -Destination.
-Фильтр
Параметр -Filter указывает фильтр для уточнения параметра -Path.Провайдер FileSystem — единственный провайдер PowerShell, который поддерживает использование фильтров. Этот параметр более эффективен, поскольку поставщик применяет фильтры, когда командлет получает объект, вместо того, чтобы Powershell фильтрует объект после доступа к нему.
-Force
Этот параметр указывает, что этот командлет копирует те элементы, которые нельзя изменить, например копирование файлов или псевдонимов, доступных только для чтения.
-Контейнер
Параметр -Container указывает, что этот командлет сохраняет объекты контейнера во время операции копирования.По умолчанию для этого параметра установлено значение True.
-включить
Элементы, которые этот командлет включает в операцию, указываются в виде массива строк. Значение параметра -Include квалифицирует параметр -Path . Введите шаблон или элемент пути, например * .txt . Допускаются подстановочные знаки. Параметр -Exclude действует только тогда, когда командлет включает содержимое элемента, например C: \ * , подстановочный знак ‘*’ используется для указания содержимого каталога C :.
— исключить
Элементы, которые этот командлет исключает из работы, указываются в виде массива строк. Значение параметра -Exclude определяет параметр -Path. Введите шаблон или элемент пути, например * .txt . Допускаются подстановочные знаки. Параметр -Exclude действует только тогда, когда командлет включает содержимое элемента, например C: \ * , подстановочный знак ‘*’ используется для указания содержимого каталога C :.
-Recurse
Параметр -Recurse указывает, что этот командлет выполняет рекурсивное копирование.
-PassThru
Параметр -PassThru возвращает объект, представляющий элемент, с которым мы работаем. Будьте по умолчанию; он не производит никакого вывода.
— Удостоверение
Параметр -Credential не поддерживается ни одним поставщиком , установленным с PowerShell.По умолчанию в этом параметре используется текущий пользователь.
-WhatIf
Параметр -WhatIf показывает, что произойдет, если будет выполнен командлет . Командлет не выполняется.
-Сессия
Параметр -FromSession используется для указания объекта PSSession , из которого копируется удаленный файл. Когда мы его используем, параметры -path и -LiteralPath относятся к локальному пути на удаленном компьютере.
-ToSession
Параметр -ToSession используется для указания объекта PSSession , в который копируется удаленный файл. Когда мы его используем, параметр -Destination относится к локальному пути на удаленном компьютере.
Примеры
Пример 1. Копирование файла в указанное место
Командлет в этом примере копирует файл powershell.txt в каталог D: \ windows .Исходный файл не удаляется.
Пример 2: Скопируйте содержимое каталога в новый каталог
Командлет в этом примере копирует содержимое исходного каталога C: \ Javatpoint и создает новый целевой каталог. Новый целевой каталог \ files создается на диске D: \ .
Пример 3: Скопируйте содержимое каталога в существующий каталог
Командлет в этом примере копирует содержимое каталога C: \ Javatpoint в существующий каталог Directory C: \ PowerShell .Каталог Javatpoint не копируется.
Если каталог Javatpoint содержит файлы в подкаталогах, они также копируются с неповрежденными деревьями файлов.