Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Introduction_to_Windows_PowerShell.rtf
Скачиваний:
9
Добавлен:
01.07.2025
Размер:
4 Мб
Скачать
☆

Копирование файлов и папок

Копирование выполняется при помощи командлета Copy-Item. Следующая команда создает резервную копию C:\boot.bak для файла C:\boot.ini:

Copy-Item -Path c:\boot.ini -Destination c:\boot.bak

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

Copy-Item -Path c:\boot.ini -Destination c:\boot.bak -Force

Эта команда работает даже если целевой файл помечен как файл только для чтения.

Так же выполняется и копирование папок. Эта команда рекурсивно копирует папку «C:\temp\test1» в новую папку «c:\temp\DeleteMe»:

Copy-Item C:\temp\test1 -Recurse c:\temp\DeleteMe

Можно также скопировать избранные элементы. Следующая команда копирует все файлы .txt, содержащиеся в папке «c:\data», в папку «c:\temp\text»:

Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination c:\temp\text

Для копирования элементов файловой системы можно использовать и другие средства. В Windows PowerShell по-прежнему работают команды XCOPY и ROBOCOPY, а также такие COM-объекты, как Scripting.FileSystemObject. Например, можно воспользоваться COM-классом Scripting.FileSystem сервера сценариев Windows для создания резервной копии «C:\boot.bak» файла «C:\boot.ini»:

(New-Object -ComObject Scripting.FileSystemObject).CopyFile("c:\boot.ini", "c:\boot.bak")

Создание файлов и папок

Создание новых элементов осуществляется одинаковым образом всеми поставщиками Windows PowerShell. Если поставщик Windows PowerShell поддерживает более одного типа элементов (например, поставщик Windows PowerShell FileSystem различает каталоги и файлы), необходимо указать тип элемента.

Эта команда создает новую папку «C:\temp\New Folder»:

New-Item -Path 'C:\temp\New Folder' -ItemType "directory"

Эта команда создает новый пустой файл «C:\temp\New Folder\file.txt»:

New-Item -Path 'C:\temp\New Folder\file.txt' –ItemType "file"

Удаление всех файлов и папок, содержащихся в папке

Удалить вложенные элементы можно при помощи командлета Remove-Item, однако он потребует подтверждения удаления, если элемент сам что-нибудь содержит. Например, при попытке удаления папки «C:\temp\DeleteMe», которая содержит другие элементы, Windows PowerShell предварительно предложит подтвердить удаление этой папки:

Remove-Item C:\temp\DeleteMe

Подтверждение

Элемент в C:\temp\DeleteMe имеет дочерние объекты, и параметр -recurse не указан.

При продолжении все дочерние объекты будут удалены вместе с элементом. Вы действительно хотите продолжить?

[А] Да [Х] Да для всех [Н] Нет [В] Нет для всех [Т] Приостановить [?] Справка

(значением по умолчанию является "А"):

Если подтверждение для каждого вложенного элемента нежелательно, укажите параметр Recurse:

Remove-Item C:\temp\DeleteMe -Recurse

Отображение локальной папки в виде диска, доступного в Windows

Отобразить локальную папку можно при помощи команды subst. Следующая команда создает локальный диск P:, отображающий локальный каталог Program Files:

subst p: $env:programfiles

Как и в случае сетевых дисков, диски, отображенные в оболочке Windows PowerShell при помощи команды subst, немедленно доступны в данном сеансе Windows PowerShell.

Чтение текстового файла в массив

Одним из наиболее общих форматов хранения текстовых данных является файл, отдельные строки которого рассматриваются как отдельные элементы. Командлет Get-Content используется для чтения всего файла за один шаг, как показано далее:

PS> Get-Content -Path C:\boot.ini

[boot loader]

timeout=5

default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS

[operating systems]

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional"

/noexecute=AlwaysOff /fastdetect

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=" Microsoft Windows XP Professional

with Data Execution Prevention" /noexecute=optin /fastdetect

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

PS> (Get-Content -Path C:\boot.ini).Length

6

Эта команда наиболее полезна для непосредственного ввода в Windows PowerShell информационных списков. Например, можно хранить в файле «C:\temp\domainMembers.txt» список имен компьютеров или IP-адресов по одному имени на каждую строку файла. Можно использовать командлет Get-Content для извлечения содержимого файла и поместить его в переменную $Computers:

$Computers = Get-Content -Path C:\temp\DomainMembers.txt

Теперь переменная $Computers представляет собой массив, содержащий в каждом элементе имя компьютера.

Работа с разделами реестра

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

Получение всех подразделов раздела реестра

Показать все элементы, непосредственно содержащиеся в разделе реестра, можно при помощи командлета Get-ChildItem. Добавьте необязательный параметр Force для отображения скрытых и системных элементов. Например, эта команда отображает элементы, непосредственно расположенные на диске HKCU: Windows PowerShell, который соответствует кусту HKEY_CURRENT_USER:

PS> Get-ChildItem -Path hkcu:\

Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER

SKC VC Name Property

--- -- ---- --------

2 0 AppEvents {}

7 33 Console {ColorTable00, ColorTable01, ColorTab...

25 1 Control Panel {Opened}

0 5 Environment {APR_ICONV_PATH, INCLUDE, LIB, TEMP...}

1 7 Identities {Last Username, Last User ...

4 0 Keyboard Layout {}

...

Это разделы верхнего уровня, которые можно видеть под разделом HKEY_CURRENT_USER в редакторе реестра (Regedit.exe).

Указать этот путь в реестре можно также, задав имя поставщика реестра с последующей строкой «::». Полное имя поставщика реестра выглядит как Microsoft.PowerShell.Core\Registry, но может быть сокращено до Registry. Любая из следующих команд выведет содержимое элементов, непосредственно расположенных под разделом HKCU:

Get-ChildItem -Path Registry::HKEY_CURRENT_USER

Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER

Get-ChildItem -Path Registry::HKCU

Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKCU

Get-ChildItem HKCU:

Эти команды выводят только элементы, содержащиеся под разделом непосредственно, так же как и команда DIR приложения Cmd.exe, а также команда ls оболочки UNIX. Для показа вложенных элементов необходимо указать параметр Recurse. Для вывода всех подразделов раздела HKCU используется следующая команда (эта операция может занять очень продолжительное время):

Get-ChildItem -Path hkcu:\ -Recurse

Командлет Get-ChildItem позволяет выполнять сложную фильтрацию при помощи параметров Path, Filter, Include и Exclude, но обычно осуществляется лишь фильтрация по имени. Сложную фильтрацию на основе других свойств элементов можно выполнить при помощи командлета Where-Object. Следующая команда находит все подразделы раздела HKCU:\Software, у которых не более одного подраздела и ровно четыре значения:

Get-ChildItem -Path HKCU:\Software -Recurse | Where-Object -FilterScript {($_.SubKeyCount -le 1) –and ($_.ValueCount -eq 4) }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]