- •Согласованность
- •Интерактивная среда и среда исполнения сценариев
- •Запуск Windows PowerShell
- •Основы Windows PowerShell
- •Семейство команд может расширяться
- •Сокращение количества обязательных для запоминания команд при помощи шаблона глагол-существительное
- •Командлеты используют стандартные параметры
- •Получение подробных справочных сведений
- •Отображение имеющихся типов команд
- •Примечание
- •Использование имен знакомых команд
- •Интерпретация стандартных псевдонимов
- •Создание новых псевдонимов
- •Основные сведения о конвейере Windows PowerShell
- •Просмотр структуры объекта (командлет Get-Member)
- •Получение подробных сведений при помощи подстановочных знаков в командлете Format-List
- •Использование командлета Format-Table для получения вывода в виде таблицы
- •Улучшение вывода командлета Format-Table (параметр AutoSize)
- •Перенос на следующую строку вывода командлета Format-Table в столбцах (параметр Wrap)
- •Организация табличного вывода (параметр -GroupBy)
- •Перенаправление данных с помощью командлетов Out-*
- •Отбрасывание ненужного вывода (командлет Out-Null)
- •Навигация в Windows PowerShell
- •Управление текущим местоположением в Windows Powershell
- •Сохранение и возврат на последние местоположения (командлеты Push-Location и Pop-Location)
- •Примечание
- •Управление дисками Windows PowerShell
- •Добавление новых дисков Windows PowerShell (командлет New-psDrive)
- •Примечание
- •Удаление дисков Windows PowerShell (командлет Remove-psDrive)
- •Вывод всех вложенных элементов (параметр -Recurse)
- •Поиск имен элементов с использование подстановочных знаков
- •Исключение элементов (параметр -Exclude)
- •Объединение параметров командлета Get-ChildItem
- •Непосредственная работа с элементами
- •Создание новых элементов (командлет New-Item)
- •Почему параметры реестра не являются значениями
- •Переименование существующих элементов (командлет Rename-Item)
- •Перемещение элементов (командлет Move-Item)
- •Копирование элементов (командлет Copy-Item)
- •Удаление элементов (командлет Remove-Item)
- •Выполнение действий над элементами (командлет Invoke-Item)
- •Работа с объектами
- •Примечание
- •Вывод сведений о классе wmi
- •Вывод свойств, не имеющих значений по умолчанию, с помощью командлетов Format
- •Примечание
- •Использование конструкторов с командлетом New-Object
- •Доступ к удаленному журналу событий с помощью командлета New-Object
- •Очистка журнала событий методами объектов
- •Создание сом-объектов с помощью командлета New-Object
- •Создание ярлыков на рабочий стол с помощью метода wScript.Shell
- •Примечание
- •Примечание
- •Запуск приложения Internet Explorer из Windows PowerShell
- •Примечание
- •Использование статических классов и методов
- •Отображение статических свойств класса System.Environment
- •Удаление объектов из конвейера (командлет Where-Object)
- •Выполнение простых проверок с командлетом Where-Object
- •Примечание
- •Фильтрация данных, основанная на свойствах объектов
- •Повторение действия для нескольких объектов (командлет ForEach-Object)
- •Выделение частей объектов (командлет Select-Object)
- •Сортировка объектов
- •Управление переменными
- •Использование переменных Cmd.Exe
- •Использование оболочки Windows PowerShell для администрирования
- •Примечание
- •Остановка процессов (командлет Stop-Process)
- •Остановка всех других сеансов Windows PowerShell
- •Остановка, запуск, приостановка и перезагрузка служб
- •Получение сведений о компьютерах
- •Вывод установленных исправлений
- •Вывод сведений о версии операционной среды
- •Вывод локальных пользователей и владельца
- •Получение сведений о доступном месте на диске
- •Отображение состояния службы
- •Установка программного обеспечения
- •Примечание
- •Получение списка приложений, поддерживающих удаление
- •Примечание
- •Примечание
- •Установка приложений
- •Удаление приложений
- •Завершение текущего сеанса
- •Завершение работы и перезагрузка компьютера
- •Проверка связи с компьютерами
- •Копирование файлов и папок
- •Копирование разделов
- •Извлечение отдельной записи реестра
- •Примечание
- •Создание новых записей в реестре
- •Приложение 2. Создание пользовательского ярлыка для PowerShell
Копирование файлов и папок
Копирование выполняется при помощи командлета 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) } |
