Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Элементы, которые отображаются на дисках PowerShell, таких как файлы и папки или разделы реестра, называются "Элементы " в PowerShell. Командлеты для работы с ними содержат существительное Item в именах.
В выходных данных команды Get-Command -Noun Item показано, что в PowerShell существует девять командлетов типа Item.
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 командлет. Включите параметр Path с путем к элементу и параметр ItemType со значением file или directory.
Например, чтобы создать каталог с именем New.Directory в каталоге C:\Temp, введите:
New-Item -Path c:\temp\New.Directory -ItemType Directory
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2006-05-18 11:29 AM New.Directory
Чтобы создать файл, измените значение параметра ItemType на file. Например, чтобы создать каталог с именем file1.txt в каталоге New.Directory, введите:
New-Item -Path C:\temp\New.Directory\file1.txt -ItemType file
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp\New.Directory
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2006-05-18 11:44 AM 0 file1
Тот же метод можно использовать для создания нового раздела реестра. На самом деле, раздел реестра создать проще, так как единственный тип элементов в реестре Windows — это раздел. (Записи реестра являются свойствами элементов.) Например, чтобы создать ключ с именем _Test в подразделеCurrentVersion, введите:
New-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\_Test
Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
SKC VC Name Property
--- -- ---- --------
0 0 _Test {}
При вводе пути реестра не забудьте добавить двоеточие (:) в имена дисков Windows PowerShell — HKLM: и HKCU:. Без двоеточия PowerShell не распознает имя диска в пути.
Почему значения реестра не являются элементами
При использовании командлета Get-ChildItem для поиска элементов в разделе реестра вы не увидите фактических записей реестра или их значений.
Например, раздел реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run обычно содержит записи реестра, представляющие приложения, которые выполняются при запуске системы.
Однако при Get-ChildItem поиске дочерних элементов в ключе все, что вы увидите, является OptionalComponents подразделом ключа:
Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Run
Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
SKC VC Name Property
--- -- ---- --------
3 0 OptionalComponents {}
Хотя было бы удобно рассматривать записи реестра как элементы, невозможно указать путь к записи реестра таким образом, чтобы обеспечить уникальность. Нотация пути не отличается от подраздела реестра с именем Run и записью реестра по умолчанию в подразделе Run.
Кроме того, поскольку имена записей реестра могут содержать символ обратной косой черты (\), если записи реестра были элементами, то не удалось использовать нотацию пути, чтобы отличить запись реестра с именем Windows\CurrentVersion\Run от подраздела, расположенного в этом пути.
Переименование существующих элементов
Чтобы изменить имя файла или папки, используйте командлет Rename-Item. Следующая команда изменяет имя файла file1.txt на fileOne.txt.
Rename-Item -Path C:\temp\New.Directory\file1.txt fileOne.txt
Командлет Rename-Item может изменить имя файла или папки, но он не может переместить элемент. Произойдет сбой следующей команды, так как она попытается переместить файл из каталога New.Directory во временный каталог.
Rename-Item -Path C:\temp\New.Directory\fileOne.txt c:\temp\fileOne.txt
Rename-Item : can't rename because the target specified isn't a path.
At line:1 char:12
+ Rename-Item <<<< -Path C:\temp\New.Directory\fileOne c:\temp\fileOne.txt
Перемещение элементов
Чтобы переместить файл или папку, используйте командлет Move-Item.
Например, следующая команда перемещает каталог New.Directory из C:\temp каталога в корневой C: каталог диска. Чтобы убедиться, что элемент перемещен, включите параметр PassThru командлета Move-Item. Без PassThruMove-Item командлет не отображает результаты.
Move-Item -Path C:\temp\New.Directory -Destination C:\ -PassThru
Directory: Microsoft.PowerShell.Core\FileSystem::C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2006-05-18 12:14 PM New.Directory
Копирование элементов
Если вы знакомы с операциями копирования в других оболочках, вы можете найти поведение командлета Copy-Item в PowerShell, чтобы быть необычным. При копировании элемента из одного расположения в другое Copy-Item не копируется его содержимое по умолчанию.
Например, если скопировать New.Directory каталог из диска C: в C:\temp каталог, команда завершается успешно, но файлы в каталоге New.Directory не копируются.
Copy-Item -Path C:\New.Directory -Destination C:\temp
Если отобразить содержимое C:\temp\New.Directory, там не будет файлов:
PS> Get-ChildItem -Path C:\temp\New.Directory
PS>
Почему командлет Copy-Item не копирует содержимое в новое расположение?
Командлет предназначен для универсального использования. Это Copy-Item не только для копирования файлов и папок.
Кроме того, даже при копировании файлов и папок может потребоваться копировать только контейнер без элементов внутри него.
Чтобы скопировать все содержимое папки, включите параметр Recurse командлета Copy-Item в команду. Если вы уже скопировали каталог без содержимого, добавьте параметр Force, который позволит перезаписать пустую папку.
Copy-Item -Path C:\New.Directory -Destination C:\temp -Recurse -Force -PassThru
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2006-05-18 1:53 PM New.Directory
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp\New.Directory
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2006-05-18 11:44 AM 0 file1
Удаление элементов
Чтобы удалить файлы и папки, используйте командлет Remove-Item. Например, Remove-Itemкомандлеты PowerShell, которые могут вносить значительные необратимые изменения, часто запрашивают подтверждение при вводе команд. Например, при попытке удалить папку New.Directory вам предлагается подтвердить команду, так как папка содержит файлы:
Remove-Item C:\temp\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"):
Так как ответ Yes является ответом по умолчанию, чтобы удалить папку вместе файлами, нажмите клавишу ВВОД. Чтобы удалить папку без подтверждения, используйте параметр -Recurse.
Remove-Item C:\temp\New.Directory -Recurse
Выполнение элементов
В PowerShell используется командлет Invoke-Item, чтобы выполнить действие по умолчанию для файла или папки. Это действие по умолчанию определяется обработчиком приложений по умолчанию в реестре; эффект будет таким же, что и при двойном щелчке элемента в проводнике.
Предположим, вы запускаете следующую команду:
Invoke-Item C:\WINDOWS
Откроется окно Обозреватель, которое находится C:\Windows в ней, как если бы вы дважды щелкнули папкуC:\Windows.
При вызове файла Boot.ini в системе, предшествующей Windows Vista:
Invoke-Item C:\boot.ini
Если тип файла .ini связан с Блокнотом, файл boot.ini будет открыт в Блокноте.