Как вводить команды в windows powershell

#Руководства


  • 0

Рассказываем о языке программирования, с помощью которого можно творить чудеса в Windows (и не только).

Иллюстрация: Francesca Tosolini / Unsplash / Annie для Skillbox Media

Иван Стуков

Журналист, изучает Python. Любит разбираться в мелочах, общаться с людьми и понимать их.

Рядовые пользователи общаются со своими ПК через графический интерфейс: нажимают иконки и кнопки, переключаются между окнами и вкладками.

А системные администраторы используют для этого командную строку. Чтобы компьютер понимал их указания, интерпретатор, он же командная оболочка, переводит всё на машинный язык.

Есть десятки оболочек под разные нужды, предпочтения и операционные системы. В Linux обычно используют Bash, в macOS по умолчанию установлен Zsh, а для Windows (но не только) есть PowerShell.

Из статьи вы узнаете:

  • Что такое Windows PowerShell
  • Как открыть PowerShell в Windows
  • Какие у неё есть команды (они же командлеты)
  • Что такое объекты и конвейеры (пайплайны)
  • Как запустить выполнение задач в фоновом режиме
  • Как работать в PowerShell ISE
  • О переменных
  • О логических операторах
  • Об условиях в Power Shell
  • Как работать с циклами
  • О массивах, хеш-таблицах, функциях и классах

Windows PowerShell — это одновременно командная оболочка и язык сценариев, основанный на .NET. PowerShell используют для управления компьютером и автоматизации задач. Это полноценный объектно-ориентированный язык, в котором есть переменные, функции, классы и объекты.

В отличие от других командных оболочек, PowerShell работает не со строками, а с объектами. Благодаря этому можно создавать сложную логику. При этом интерпретатор полностью совместим со стандартными командами cmd.exe и может выполнять их.

Команды пишут в интерактивном режиме внутри терминала. Но если вы хотите сохранить какой-то часто используемый скрипт, удобнее использовать ISE.

Windows PowerShell ISE — это интегрированная среда сценариев для PowerShell. В ней можно писать, сохранять и запускать скрипты, есть подсветка синтаксиса, автодополнение, справочник команд и инструменты отладки. PowerShell ISE — легаси-инструмент, он работает для версии языка 5.1 и ниже. Для более поздних обновлений используют IDE общего назначения с плагинами.

С 2016 года язык стал кросс-платформенным. Его можно использовать не только в Windows, но и в macOS (начиная с версии 10.13) и популярных дистрибутивах Linux (каких именно, можно узнать в документации).

Обычно PowerShell предустановлен по умолчанию. Но если у вас его нет, можете воспользоваться инструкцией от Microsoft. Также в документации есть руководства по установке для macOS и Linux.

PowerShell не зависит от версии операционной системы и одинаково работает как на Windows 10, так и на Windows Server.

Есть два основных способа открыть PowerShell или PowerShell ISE в Windows: меню «Пуск» и приложение «Выполнить».

В меню «Пуск» долистайте до папки Windows PowerShell, откройте её и выберите нужное приложение. Здесь есть 32-разрядные (у них х86 в скобках) и 64-разрядные версии терминала и ISE.

Открытие через «Пуск»
Скриншот: Skillbox Media

Приложение «Выполнить» открывается сочетанием клавиш Win + R. В появившемся окне введите powershell или powershell ise (в зависимости от того, что вам нужно) и нажмите ОК.

Открытие через утилиту «Выполнить»
Скриншот: Skillbox Media

Команды в PowerShell называются командлетами (от английского cmdlet). Все они состоят из связки «Глагол-Существительное», или по-другому «Действие-Объект». Например, Get-Services и Start-Process. Благодаря такой структуре можно понять назначение команды, даже если вы с ней ещё не сталкивались.

После самого командлета ему передаются параметры и их значения. Между всеми словами в команде ставится пробел. Вот пример синтаксиса команды, чтобы перейти в каталог C:\:

Set-Location -LiteralPath C:\ -PassThru

Скриншот: Skillbox Media

Препарируем её:

  • Set-Location — буквально «установить местоположение». Переходит в нужный каталог.
  • -LiteralPath C:\ — в этом параметре мы прописываем путь до каталога, в который хотим перейти. У командлета Set-Location это аргумент по умолчанию, поэтому -LiteralPath можно не прописывать отдельно: Set-Location C:\ -Passthru сработает точно так же.
  • -PassThru — обычно командлет Set-Location просто меняет местоположение и ничего не возвращает. Этот параметр говорит, что нужно вывести на экран расположение каталога, в который мы перешли.

При этом в PowerShell не важен регистр. Эту же команду можно записать только заглавными буквами, только строчными и даже «лесенкой» — она всё равно сработает.

sEt-loCATion -PATH c:\ -passthru

Скриншот: Skillbox Media

Если в одной строке написаны сразу несколько команд, они разделяются точкой с запятой ;.

Иногда команда может получиться слишком длинной. Чтобы разбить её на несколько строк, в месте переноса ставится гравис `. Создать новую строку можно сочетанием клавиш Shift + Enter (появится ниже текущей) или Ctrl + Enter (появится выше текущей).

Разделим предыдущую команду:

Set-Location `
-LiteralPath C:\ `
-PassThru

Скриншот: Skillbox Media

Совет

Стрелки вверх и вниз позволяют прокручивать историю команд, которые вы вводили. Это удобно, если нужно выполнить одну из предыдущих команд ещё раз или внести в неё небольшие изменения.

При работе с терминалом в интерактивном режиме бывает неудобно каждый раз вводить полные названия командлетов. Поэтому у самых распространённых есть псевдонимы, или алиасы, — их сокращённые версии.

Получить список доступных алиасов можно командой Get-Alias (у неё тоже есть свой псевдоним — gal).

Скриншот: Skillbox Media

Чтобы узнать список алиасов для отдельного командлета, воспользуйтесь параметром -Definition. Например:

Get-Alias -Definition Get-ChildItem

Скриншот: Skillbox Media

Если вы по алиасу хотите узнать полное название командлета, примените параметр -Name. Это аргумент по умолчанию, поэтому писать его необязательно.

# Оба варианта равноправны
Get-Alias -Name clear
Get-Alias clear

Скриншот: Skillbox Media

Многим командлетам для работы нужно передать путь до файла или каталога. Делается это в виде строки, например: C:\Windows\System32.

Но если в этом адресе встретится пробел или другой спецсимвол, PowerShell воспримет его как разделитель. Например:

# Эта команда не будет работать
Set-Location C:\Program Files

Скриншот: Skillbox Media

PowerShell «видит» пробел и думает, что путь до папки закончился на слове Program, а files — это уже значение какого-то другого параметра.

Есть два способа избежать таких ситуаций:

  • Экранировать проблемные символы обратным грависом `: C:\Program` Files. Если путь длинный, то это может быть неудобно.
  • Поместить весь путь в одинарные или двойные кавычки: ‘C:\Program Files’ или «C:\Program Files» (лучше одинарные).

Также в PowerShell есть сокращения для быстрого доступа к ближайшим директориям:

  • Точка . указывает на текущий каталог. Например, Get-ChildItem . позволяет посмотреть все папки и файлы в нынешнем местоположении.
  • Две точки .. указывают на родительский каталог. Например, Set-Location .. позволяет быстро к нему перейти. Это может быть полезно, если вы находитесь где-то в глубоко вложенной директории.

У многих командлетов есть сразу два параметра, в которых можно указать путь до папки или файла: -Path и -LiteralPath. Разница между ними в том, что в -Path можно подставлять переменные, а -LiteralPath воспринимает символы буквально, даже если в них указано имя переменной. О переменных в PowerShell мы рассказываем ниже.

Чтобы узнать подробную информацию о командлете, используйте Get-Help Название-Командлета. Например:

Get-Help Get-Childitem

Скриншот: Skillbox Media

У Get-Help есть несколько полезных параметров:

  • -Detailed даёт более детальную справку.
  • -Full даёт полную справку.
  • -Examples приводит примеры использования командлета.
  • -Online перенаправляет на веб-страницу с документацией.

Командлеты PowerShell возвращают в терминал не строки, а объекты — структуру данных с набором свойств и методов. Подробно об объектах можно прочитать в нашей статье.

Строка, которую вы видите в терминале после выполнения команды — только визуальное представление объекта. PowerShell в виде таблицы показывает некоторые свойства, но не все.

Так же, как командлеты возвращают объекты, они могут принимать и обрабатывать их. Можно написать команду, на выходе получить объект, передать его другому командлету, получить объект уже от него, передать — и так до бесконечности. Это и есть конвейеры, или пайплайны.

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

Get-Process возвращает список процессов, запущенных на компьютере. Если передать ему название процесса (или шаблон, написанный с помощью регулярных выражений), командлет выведет только нужные элементы списка.

Вызовем запущенный процесс powershell.

Get-Process powershell

Скриншот: Skillbox Media

Мы получили объект и таблицу с некоторыми его свойствами. Чтобы узнать все свойства и методы, передадим объект командлету Get-Member. Для этого нам и понадобится конвейер.

Get-Process powershell | Get-Member

Скриншот: Skillbox Media

Get-Member получил объект от Get-Process и вывел таблицу со всем его содержимым. Результат работы Get-Member — тоже объект (вернее, список объектов), который можно передать по конвейеру дальше.

Например, мы хотим отобразить только те строки, в которых MemberType — это Property. Для этого используем командлет Where-Object.

Get-Process powershell | Get-Member | Where-Object {$_.MemberType -eq 'Property'}

Скриншот: Skillbox Media

Where-Object по очереди перебирает каждый объект, полученный от Get-Member. Выражение в фигурных скобках — логическое:

  • $_ ссылается на текущий объект (то есть на отдельную строку в таблице);
  • .MemberType обращается к значению свойства MemberType в этом объекте;
  • -eq сравнивает, равно ли выражение слева от него выражению справа от него;
  • ‘Property’ — это значение, которое мы ожидаем увидеть у свойства MemberType.

О логических выражениях мы рассказываем ниже.

Командлет Format-Table позволяет настроить отображение таблицы, которую PowerShell выводит в терминале: выбрать свойства и методы, которые в ней будут, установить ширину столбцов, сгруппировать данные по нескольким таблицам и так далее.

Отформатируем таблицу, которую получили от командлета Get-Member.

Get-Process powershell | Get-Member | Format-Table -AutoSize -Wrap -GroupBy MemberType -Property Name, Definition

Скриншот: Skillbox Media

Расшифруем параметры Format-Table:

  • -AutoSize выравнивает ширину столбцов по размеру их содержимого;
  • -Wrap переносит содержимое ячейки на следующую строку, если она не помещается в размеры экрана (по умолчанию текст обрезается);
  • -GroupBy разделяет одну таблицу на несколько, сгруппированных по значению какого-либо свойства (в нашем случае для каждого MemberType создана отдельная таблица);
  • -Property указывает, какие свойства объекта будут отображаться в таблице в качестве столбцов (в нашем случае Name и Definition).

Командлет Sort-Object позволяет отсортировать список объектов (то есть таблицу) по значениям её свойств (то есть столбцов). Отсортируем результат работы GetMember по столбцу Name в алфавитном порядке. Для этого используем параметр -Property (работает как у Format-Table).

Get-Process powershell | Get-Member | Sort-Object -Property Name

Скриншот: Skillbox Media

У Sort-Object есть и другие полезные параметры:

  • -Descending сортирует объекты в порядке убывания.
  • -Unique удаляет дубликаты и возвращает только уникальные объекты.
  • -Top получает число N и отображает первые N объектов в таблице.
  • -Bottom получает число N и отображает последние N объектов в таблице.

Некоторые задачи могут занимать много времени. Это, например, установка и обновление ПО, поиск файла в большой директории. Пока PowerShell выполняет одну команду, писать другие нельзя.

К примеру, попытаемся найти на всём диске C файл powershell.exe. Используем для этого командлет Get-ChildItem с параметром -Recurse. Так он будет искать не только в текущем каталоге, но и во всех подкаталогах.

PowerShell может попытаться зайти в папки, к которым у него нет доступа, поэтому добавим -ErrorAction SilentlyContinue. Если случится ошибка, команда не станет сообщать об этом и просто продолжит выполняться.

Получается так:

Get-ChildItem -Path C:\ -Name powershell.exe -Recurse -ErrorAction SilentlyContinue

Скриншот: Skillbox Media

Как видим, пока задача не завершена, командная строка недоступна. Чтобы принудительно прервать её выполнение, нажмите сочетание клавиш Ctrl + C (при этом ничего не должно быть выделено, иначе компьютер воспримет это как команду «Копировать»).

Чтобы не ждать выполнения долгих задач и сразу приступать к следующим, их можно запускать в фоновом режиме. Делается это командлетом Start-Job, а сама команда помещается в фигурные скобки.

Start-Job {Get-ChildItem -Path C:\ -Name powershell.exe -Recurse -ErrorAction SilentlyContinue}

Скриншот: Skillbox Media

Одновременно можно выполнять любое количество фоновых задач. Помимо Start-Job для работы с фоновыми задачами есть другие командлеты:

  • Get-Job выдаёт отчёт со статусом фоновых задач.
  • Wait-Job делает консоль недоступной, пока выполняется фоновая задача.
  • Stop-Job прерывает выполнение фоновой задачи.
  • Receive-Job выводит результат фоновой задачи и удаляет его из памяти. Чтобы сохранить результат в памяти, используйте параметр -Keep.

Wait-Job, Stop-Job и Receive-Job ожидают, что вы примените их к конкретной задаче (или нескольким). Для этого укажите название Name или идентификатор Id. Делать это можно и в связке с Get-Job.

Get-Job Job1

Скриншот: Skillbox Media

Терминал PowerShell удобен для выполнения небольших коротких однострочных задач. Чтобы создавать и сохранять сложные скрипты, есть интегрированная среда сценариев.

Скриншот: Skillbox Media

Важно!

PowerShell ISE предназначен для версий языка 5.1 и младше. Для более старших версий Microsoft рекомендует использовать Visual Studio Code с расширением PowerShell.

PowerShell ISE состоит из трёх основных окон:

  • область сценариев в верхней части экрана — в ней пишут скрипты;
  • область консоли в нижней части экрана — работает так же, как обычный терминал, здесь можно писать команды в интерактивном режиме;
  • панель команд в правой части экрана — полный справочник команд PowerShell с конструктором, в котором можно указать значения нужных параметров.

PowerShell позволяет вставлять в код комментарии. Они никак не влияют на выполнение скрипта и нужны людям, которые будут читать вашу программу. Однострочный комментарий начинается с символа #, а многострочный обрамляется с двух сторон символами <# и #>.

Скриншот: Skillbox Media

Любой код чаще читают, чем пишут, и важно делать его понятным для человека. Разработчики PowerShell договорились между собой о едином своде правил и выпустили стайлгайд. Вот несколько правил оттуда.

Используйте нотацию PascalCase в названиях командлетов, функций, параметров, свойств, методов, переменных и классов. Неправильно писать: get-service, Get-service, GET-SERVICE. Правильно: Get-Service.

Пишите полные названия командлетов. Алиасы удобны для работы в интерактивном режиме, но в скриптах могут затруднять чтение команд. Неправильно: dir, gci, ls. Правильно: Get-ChildItem.

One True Brace Style при оформлении вложенности. Если вы где-то используете фигурные скобки, то код внутри них отбивается табуляцией (четыре пробела), а сами скобки ставятся так:

if ($var1 -eq $var2) {
    # Код внутри условия
} else {
    # Код внутри условия
    # Ещё код внутри условия
}

Исключение из прошлого правила — когда код в фигурных скобках совсем небольшой, его можно записать в одну строку. Например:

Get-ChildItem | Where-Object { $_.Length -gt 10mb }

Комментируйте код. Так будет гораздо проще разобраться, что он делает и как работает. Причём как другому человеку, так и вам самим через полгода.

В PowerShell ISE можно выполнить код целиком или частично, есть инструменты отладки. Скрипты сохраняются в файлах с расширением .ps1. Но запустить их двойным кликом не получится — нужно нажать правую кнопку мыши и в появившемся окне выбрать Выполнить с помощью PowerShell.

Также запустить скрипт можно из оболочки. Например, в каталоге C:\Scripts есть файл test_script.ps1. Выполнить его можно:

  • командой PowerShell -File C:\Scripts\test_script.ps1, запущенной из любого места;
  • командой .\test_script.ps1, запущенной, когда вы находитесь в каталоге C:\Scripts.

По умолчанию запускать любые файлы с PowerShell-скриптами запрещено. Сделано это в целях безопасности. Узнать нынешнюю политику выполнения можно с помощью командлета Get-ExecutionPolicy. Вот какая она может быть:

  • Restricted (установлена по умолчанию) — запрещено запускать любые скрипты.
  • AllSigned — разрешено запускать только скрипты, которые были подписаны доверенным разработчиком.
  • RemoteSigned — разрешено запускать подписанные доверенным разработчиком и собственные скрипты.
  • Unrestricted — разрешено запускать любые скрипты.

Чтобы ваши ps1-файлы запускались, нужно заменить политику выполнения на RemoteSigned. Для этого откройте PowerShell от имени администратора и выполните команду:

Set-ExecutionPolicy RemoteSigned

Чтобы подтвердить действие, введите y.

Скриншот: Skillbox Media

Чтобы сохранять данные и обращаться к ним в будущем, в PowerShell есть переменные. Перед их названием ставится знак доллара $, а сами они могут содержать латинские буквы (заглавные и строчные), цифры и нижние подчёркивания.

Скриншот: Skillbox Media

Переменная может хранить данные любого типа, и их можно перезаписывать.

Скриншот: Skillbox Media

Переменную можно привести к определённому типу данных. Создадим переменную со строкой 2023 и преобразуем её в число. Чтобы узнать тип данных, воспользуемся методом .GetType().

Скриншот: Skillbox Media

Чтобы удалить переменную, используется метод .Clear().

Переменные можно подставлять в строки, если они оформлены двойными кавычками. Если же кавычки одинарные, то PowerShell воспринимает символы в строке буквально. Сравните:

Скриншот: Skillbox Media

Помимо пользовательских также есть системные переменные. Например, $PSVersionTable хранит информацию о версии PowerShell.

Скриншот: Skillbox Media

PowerShell позволяет проводить с объектами арифметические операции и сравнивать их друг с другом. Для этого он использует логические операторы.

Арифметические операторы:

  • + — сложение;
  •  — вычитание;
  • * — умножение;
  • / — деление;
  • % — деление по модулю;
  • ( и ) — скобки для группировки операций.

Операторы сравнения оформляются так же, как параметры командлетов. Их названия произошли от английских выражений, указанных в скобках.

  • -eq — равно (от equal);
  • -ne — не равно (от not equal);
  • -gt — больше (от greater than);
  • -ge — больше либо равно (от greater than or equal);
  • -lt — меньше (от less than);
  • -le — меньше либо равно (от less than or equal).

Условия в PowerShell создаются с помощью ключевых слов if, elseif и else. В обычных скобках указывается само условие, в фигурных — код, который запускается при его выполнении. Например:

$Number = 123

if ($Number -gt 0) {
Write-Host 'Число больше нуля'
} elseif ($Number -lt 0) {
Write-Host 'Число меньше нуля'
} else {
Write-Host 'Число равно нулю'
}

>>> Число больше нуля

Также условия можно задавать с помощью ключевого слова switch. Например:

$Day = 2

switch ($Day) {
    1 {Write-Host 'Понедельник'}
    2 {Write-Host 'Вторник'}
    3 {Write-Host 'Среда'}
    4 {Write-Host 'Четверг'}
    5 {Write-Host 'Пятница'}
    6 {Write-Host 'Суббота'}
    7 {Write-Host 'Воскресенье'}
}

>>> Вторник

Windows PowerShell — язык программирования, на котором администрируют операционные системы и автоматизируют процессы. Он поддерживает объектно-ориентированное программирование и позволяет работать в интерактивном режиме, а также писать, сохранять и выполнять полноценные скрипты.

  • PowerShell предустановлен в Windows, но его можно скачать на macOS и Linux.
  • У языка есть собственная интегрированная среда сценариев PowerShell ISE, предназначенная для старых версий языка (5.1 и ниже).
  • PowerShell работает не со строками, а с объектами. Он обрабатывает их с помощью командлетов, построенных по принципу «Глагол-Существительное».
  • Результат выполнения одного командлета можно передавать другому в конвейере.
  • Задачи можно выполнять в фоновом режиме.
  • PowerShell — высокоуровневый язык, на котором можно работать с переменными, логическими операторами, условиями, циклами, массивами, хеш-таблицами, функциями и классами.

Жизнь можно сделать лучше!
Освойте востребованную профессию, зарабатывайте больше и получайте от работы удовольствие. А мы поможем с трудоустройством и важными для работодателей навыками.

Посмотреть курсы

Краткий курс по PowerShell для начинающих в администрировании Windows. Что это за скриптовый язык, что такое командлет и как им пользоваться.

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

PowerShell — это объектно-ориентированный программный движок и скриптовый язык с интерфейсом командной строки, предоставляющий широкие возможности для конфигурирования операционных систем семейства MS Windows. Он предлагает как чисто консольный интерфейс, так и полноценную среду разработки PowerShell ISE (Integrated Scripting Environment, встроенное скриптовое окружение) для скриптов.

Для запуска интерфейса командной строки введите powershell в меню «Выполнить» (WinKey + R). PowerShell ISE запускается с помощью команды «PowerShell ISE» в том же меню. ISE более предпочтительно, так как предоставляет более широкие возможности разработчику благодаря подсветке синтаксиса, функции автозаполнения кода и другим особенностям, присущим многим «большим» IDE.

На данный момент этот блок не поддерживается, но мы не забыли о нём!Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Написание и запуск скриптов

Скрипты сохраняются в виде файлов с расширением .ps1. Несмотря на то, что PowerShell уже давно является нативной частью ОС Windows, вы не сможете запустить его скрипты простым двойным щелчком. Для этого надо кликнуть правой кнопкой по скрипту и выбрать «Запустить в PowerShell».

Также существуют системные политики, ограничивающие выполнение скриптов. Можно проверить текущие параметры политики, введя команду Get-ExecutionPolicy. Результатом будет одно из следующих значений:

  • Restricted — выполнение скриптов запрещено. Стандартная конфигурация;
  • AllSigned — можно запускать скрипты, подписанные доверенным разработчиком; перед запуском скрипта PowerShell запросит у вас подтверждение;
  • RemoteSigned — можно запускать собственные скрипты или те, что подписаны доверенным разработчиком;
  • Unrestricted — можно запускать любые скрипты.

Для начала работы необходимо изменить настройку политики запуска на RemoteSigned, используя команду Set-ExecutionPolicy:

На данный момент этот блок не поддерживается, но мы не забыли о нём!Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Командлеты

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

  • существуют системные, пользовательские и опциональные командлеты;
  • результатом выполнения командлета будет объект или массив объектов;
  • командлеты могут обрабатывать данные и передавать их другим командлетам с помощью конвейеров;
  • командлеты нечувствительны к регистру, так что нет никакой разницы между Get-ADUser, get-aduser и gEt-AdUsEr;
  • в качестве разделителя используется символ ; .

Каждый командлет содержит в себе глагол и существительное, разделяемые дефисом. Например:

  • Get-Process — отобразить текущие процессы, запущенные на компьютере;
  • Get-Service — отобразить список служб и их статус;
  • Get-Content — отобразить содержимое указанного файла, например Get-Content C:\Windows\System32\drivers\etc\hosts.

При необходимости список всех доступных командлетов можно вывести с помощью Get-Help-Category. Запомните эту команду — она крайне важна для тех, кто изучает PowerShell с нуля, так как помогает быстрее начать ориентироваться в его возможностях.

На данный момент этот блок не поддерживается, но мы не забыли о нём!Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Также можно создавать свои командлеты, но эта тема выходит за рамки нашего руководства по PowerShell для начинающих.

Параметры

У каждого командлета есть несколько параметров, определяющих его работу. PowerShell ISE автоматически предлагает все доступные параметры с отображением их типа. Например, Get-Service-NameW* выводит список служб, у которых имя начинается с W. Если вы забыли, какие параметры у введённого командлета, воспользуйтесь Get-Member.

Например, Get-Process | Get-Member:

На данный момент этот блок не поддерживается, но мы не забыли о нём!Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Если вы не нашли того, что нужно, или не уверены в том, как правильно задаются параметры, можно даже запросить примеры с помощью параметра -Examples. Встроенное руководство по PowerShell покажет, для чего используются разные параметры:

На данный момент этот блок не поддерживается, но мы не забыли о нём!Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Некоторые командлеты также могут вызываться с помощью алиасов. Например, вместо Get-Help можно просто написать Help — эта команда также вызовет встроенное руководство по PowerShell.

При написании больших скриптов или коллективной разработке можно пользоваться комментариями. Каждый комментарий начинается с символа #, а блок комментариев ограничивается комбинациями символов <# и #> в начале и в конце соответственно.

Конвейер

PowerShell позволяет осуществлять обмен данными между командлетами с помощью конвейера. Например:

  • GetService | SortObject -property Status — сортировка запущенных служб по статусу;
  • “Hello World!” | Out-File C:\ps\test.txt — запись текста в файл.

Можно использовать несколько конвейеров. Например, следующий скрипт выводит список имён всех служб за исключением остановленных:

Get-Service | WHERE {$_.status -eq “Running”} | SELECT displayname

Заключение

Это руководство для тех, кто изучает PowerShell с нуля, поэтому здесь раскрыты только базовые понятия и приёмы. После его прочтения у вас должно появиться представление о том, что собой представляет этот инструмент. Также мы рассмотрели варианты изменения политики выполнения скриптов, что такое командлет, как они обмениваются данными с помощью конвейера и как получить свойства нужного объекта. Помните, что в случае затруднений можно воспользоваться командлетом Get-Help – это одна из самых важных команд для начинающих изучать PowerShell.

Если пользуетесь не только Windows, но и Linux, посмотрите статью про команды терминала Linux для начинающих. В ней рассказывается про работу с процессами и файлами, навигацию, каналы, xargs, awk и grep.

Рассказываем про Windows PowerShell — технологию для автоматизации рутинных задач, пришедшую на смену bat-файлам.

Работа с консолью Microsoft Windows

Ранее мы рассматривали командные интерпретаторы COMMAND.CMD и CMD.EXE, обеспечивающие автоматизацию задач в семействе операционных систем Microsoft Windows. Фактически данные интерпретаторы не получали обновлений с начала 2000-х годов и существуют в современных операционных системах для обеспечения совместимости.

Подробнее о bat-файлах →

Хотя современные операционные системы предлагают богатый на функции графический интерфейс, ряд однотипных задач быстрее решается через консоль. Более того, серверные редакции ОС не предоставляют графический интерфейс по умолчанию, поэтому интерпретатор командной строки является неотъемлемой частью практически любой операционной системы.

Помимо отсутствия обновлений, CMD.EXE имеет ограниченный функционал. Он не позволяет писать сложную логику и полностью отказаться от использования графического интерфейса. Корпорация Microsoft пыталась решить эти проблемы с помощью инструмента под названием Microsoft Script Host, который имел интеграцию со скриптовыми языками JScript и VBScript.

Однако Microsoft Script Host имел ряд собственных проблем:

  • плохо интегрировался с командной оболочкой операционной системы,
  • сопровождался скудной документацией,
  • разные версии Windows имели командные интерпретаторы с разным набором команд,
  • инструмент становился отличным вектором для атак.

Все это побуждало Microsoft сделать командный интерпретатор с нуля.

Новый командный интерпретатор Windows PowerShell

В 2003 году корпорация Microsoft начала разработку нового инструмента — Microsoft Shell (MSH), или Monad. Спустя три года и три бета-версии Monad была официально выпущена под новым названием Windows PowerShell 1.0 на Windows XP и Windows Vista. По ходу развития командная оболочка меняла свои названия на PowerShell Core и PowerShell.

При создании PowerShell разработчики задались целью создать инструмент, который позволил бы с легкостью использовать множество разнородных интерфейсов, предоставляемых операционной системой. Новый инструмент должен быть консистентным и легким для администратора, несмотря на количество технологий «под капотом». Например, PowerShell предоставляет доступ к API .NET-фреймворка, но не требует от администратора знания .NET.

Как и любой командный интерпретатор, PowerShell умеет запускать исполняемые файлы и имеет встроенные команды. Однако у PowerShell встроенные команды имеют название «командлет», появившееся от английского cmdlet.

Что такое командлет?

В основе взаимодействия с PowerShell лежат объекты, а не текст, как у CMD.EXE и командных интерпретаторов в *nix-системах. Такой подход меняет взгляд на организацию встроенных команд.

Командлет — это встроенная команда в PowerShell, выполняющая одну задачу и реализованная на .NET. Имя командлета соответствует правилу Глагол-Существительное, которое можно читать как Действие-Объект.

Самый важный командлет, о котором необходимо узнать в первую очередь, — Get-Help. Он отображает справочную информацию о PowerShell и командлетах.

# Получить общую справку по PowerShell
Get-Help

# Получить справку по командлету Get-Content
Get-Help Get-Content

# Получить справку по командлету Get-Help
Get-Help Get-Help

Если вам кажется, что использовать большие буквы в названии командлетов — это перебор, для вас есть хорошие новости. Все команды в PowerShell являются регистронезависимыми. Иными словами, перечисленные ниже написания эквивалентны:

Get-Help Get-Help
get-help get-help
GET-HELP GET-HELP
GeT-hElP gEt-HeLp

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

В первой версии PowerShell все командлеты были реализованы на .NET, но начиная с версии 2.0 появилась возможность писать командлеты с использованием синтаксиса PowerShell.

Основы программы PowerShell

Перейдем к практике. PowerShell является кроссплатформенным инструментом и может быть запущена на Linux и macOS, но в данной статье будет рассматриваться только «родное» окружение — Windows.

Как запустить?

Программа в меню

Запуск PowerShell можно произвести из меню поиска около кнопки Пуск, набрав powershell.

PowerShell в меню

Аналогично можно запустить PowerShell через диалоговое окно Выполнить…, которое открывается через сочетание клавиш Windows + R.

Если по каким-то причинам у вас не установлен PowerShell, то необходимо сделать это, следуя инструкции в базе знаний Microsoft.

Установка PowerShell

В случае успеха откроется синее окно. Windows PowerShell готов к вашим командам.

Синтаксис

Синтаксис PowerShell похож на синтаксис других командных интерпретаторов. Сначала команда, а затем аргументы команды. Несколько команд в одной строке разделяются точкой с запятой. Рассмотрим на примере.

Get-Help Get-Command -Online

Данная команда откроет в браузере вкладку с описанием командлета Get-Command в базе знаний Microsoft. Разберем подробнее:

  • Get-Help – команда, в данном случае командлет,
  • Get-Command – первый позиционный аргумент, который передается командлету,
  • -Online – ключ, то есть именованный аргумент.

Обратите внимание, что в CMD.EXE именованные аргументы, то есть ключи, для встроенных команд начинались с символа слэш (/). У командлетов аргументы начинаются со знака минус. Использование знака / в PowerShell недопустимо и будет интерпретировано как ошибка.

Хотя PowerShell во многом похож на CMD.EXE, он имеет несколько существенных отличий. Во-первых, обращение к переменным производится через символ доллар, а не через знак процента. Во-вторых, PowerShell позволяет определять функции. Например:

function Get-Version {
    $PSVersionTable.PSVersion
}

Данный код объявит функцию Get-Version, которая обращается к системной переменной (объекту) PSVersionTable и возвращает значение поля PSVersion. Проще говоря, выводит версию PowerShell.

Именование командлетов может быть неочевидным для администраторов с опытом работы с другими командными интерпретаторами. Поэтому рассмотрим основные команды Windows PowerShell.

Основные команды языка Windows PowerShell

В следующей таблице перечислены основные команды PowerShell и их аналоги в *nix-подобных системах и CMD.EXE. В версии PowerShell 7 количество командлетов превышает полторы тысячи!

Командлет (псевдоним) Команда в *nix Команда в CMD.exe Описание
Get-Location (pwd) pwd Выводит путь до текущего каталога
Set-Location (cd) cd cd Меняет текущий каталог
Get-ChildItem (ls) ls dir Выводит содержимое текущего каталога
Get-ChildItem find find Производит поиск файлов по заданным критериям
Copy-Item (cp) cp cp Копирует файл
Remove-Item (rm) rm rm Удаляет файл
New-Item (mkdir) mkdir mkdir Создает каталог
New-Item touch Создает пустой файл
Get-Content (cat) cat Выводит файлы
Get-Content tail Выводит последние 10 строк
Where-Object grep Производит фильтрацию
Create-Volume
Format-Volume
mkfs Форматирует раздел
Test-Connection ping ping.exe Отправляет ICMP-запросы, «пингует»
Get-Help (man) man help Показывает справку

После работы в консоли *nix командлет для популярного действия, смены каталога, выглядит громоздко и непривычно. К счастью, командлеты имеют псевдонимы (алиасы), которые могут не следовать правилу именования командлетов. Список известных псевдонимов можно получить с помощью командлета Get-Alias.

Хотя таблица, представленная выше, значительно облегчит назначение командлетов, не стоит ожидать от командлетов поведения как в *nix-системах. Так, например, в PowerShell командлет Get-Content создан для вывода содержимого одного файла на экран, в то время как на *nix-системах утилита cat изначально использовалась для конкатенации (процесса соединения) нескольких файлов с последующим выводом на экран.

Очевидно, что возможности PowerShell значительно больше, чем CMD.exe. Опытный администратор знает, что некоторые задачи из таблицы можно решить в CMD.exe, несмотря на отсутствие специальных команд. Однако эти команды требуют опыта или смекалки.

Утилита ping

Отдельно хочется отметить командлет Test-Connection, который делает то же самое, что утилита ping, но не имеет такого алиса. Разница между утилитой и командлетом в формате вывода: утилита выводит текст, а командлет возвращает объект, который можно использовать в конвейерах.

Конвейер PowerShell: особенности и параметры

По своей задумке конвейеры в PowerShell не отличаются от конвейеров в *nix-системах: они перенаправляют вывод одной команды на ввод другой. Как отмечалось ранее, в PowerShell происходит взаимодействие не с текстом, а с объектами. При выводе на экран объект трансформируется в таблицу, чтобы человеку было удобнее читать, но не всегда таблица выводит все поля объекта.

Особенность конвейеров PowerShell заключается в том, что конвейер передает результат не целиком, а по одному объекту. Командлет Test-Connection выводит четыре объекта: по одному на каждый ICMP-запрос. Если подключить командлет к конвейеру, то можно увидеть подтверждение этому тезису. Воспользуемся командлетом Select-Object, чтобы выбрать колонку со временем запроса.

Test-Connection selectel.ru | Select-Object ‘Time(ms)’

После запуска данной команды можно наблюдать, как с некоторой задержкой печатаются пустые строки по одной.

Test-connection

Но как же так? Дело в том, что отображение объекта при выводе на экран не всегда соответствует имени поля в объекте. Чтобы получить полный список полей в объекте, необходимо вызвать командлет Get-Member.

PS C:\Users\sun> Test-connection selectel.ru | Get-Member


   TypeName: System.Management.ManagementObject#root\cimv2\Win32_PingStatus

Name                           MemberType     Definition
----                           ----------     ----------
PSComputerName                 AliasProperty  PSComputerName = __SERVER
Address                        Property       string Address {get;set;}
BufferSize                     Property       uint32 BufferSize {get;set;}
NoFragmentation                Property       bool NoFragmentation {get;set;}
PrimaryAddressResolutionStatus Property       uint32 PrimaryAddressResolutionStatus {get;set;}
ProtocolAddress                Property       string ProtocolAddress {get;set;}
ProtocolAddressResolved        Property       string ProtocolAddressResolved {get;set;}
RecordRoute                    Property       uint32 RecordRoute {get;set;}
ReplyInconsistency             Property       bool ReplyInconsistency {get;set;}
ReplySize                      Property       uint32 ReplySize {get;set;}
ResolveAddressNames            Property       bool ResolveAddressNames {get;set;}
ResponseTime                   Property       uint32 ResponseTime {get;set;}
ResponseTimeToLive             Property       uint32 ResponseTimeToLive {get;set;}
RouteRecord                    Property       string[] RouteRecord {get;set;}
RouteRecordResolved            Property       string[] RouteRecordResolved {get;set;}
SourceRoute                    Property       string SourceRoute {get;set;}
SourceRouteType                Property       uint32 SourceRouteType {get;set;}
StatusCode                     Property       uint32 StatusCode {get;set;}
Timeout                        Property       uint32 Timeout {get;set;}
TimeStampRecord                Property       uint32[] TimeStampRecord {get;set;}
TimeStampRecordAddress         Property       string[] TimeStampRecordAddress {get;set;}
TimeStampRecordAddressResolved Property       string[] TimeStampRecordAddressResolved {get;set;}
TimestampRoute                 Property       uint32 TimestampRoute {get;set;}
TimeToLive                     Property       uint32 TimeToLive {get;set;}
TypeofService                  Property       uint32 TypeofService {get;set;}
__CLASS                        Property       string __CLASS {get;set;}
__DERIVATION                   Property       string[] __DERIVATION {get;set;}
__DYNASTY                      Property       string __DYNASTY {get;set;}
__GENUS                        Property       int __GENUS {get;set;}
__NAMESPACE                    Property       string __NAMESPACE {get;set;}
__PATH                         Property       string __PATH {get;set;}
__PROPERTY_COUNT               Property       int __PROPERTY_COUNT {get;set;}
__RELPATH                      Property       string __RELPATH {get;set;}
__SERVER                       Property       string __SERVER {get;set;}
__SUPERCLASS                   Property       string __SUPERCLASS {get;set;}
ConvertFromDateTime            ScriptMethod   System.Object ConvertFromDateTime();
ConvertToDateTime              ScriptMethod   System.Object ConvertToDateTime();
IPV4Address                    ScriptProperty System.Object IPV4Address {get=$iphost = [System.Net.Dns]:...
IPV6Address                    ScriptProperty System.Object IPV6Address {get=$iphost = [System.Net.Dns]:...

Можно визуально оценить список и найти поле ResponseTime. Также в начале указан тип данного объекта, Win32_PingStatus, информацию о котором можно поискать в базе знаний Microsoft. В документации не только перечислены поля, но и их назначение. Таким образом, конечный вид конвейера будет таким:

Test-connection selectel.ru | Select-Object ResponseTime

Хотя PowerShell побуждает к интерактивной работе, его основное предназначение — автоматизировать рутинные задачи. Значит, необходимо писать скрипты.

Соберите сервер в конфигураторе под свои задачи. Или выберите из более 100 готовых.

Интегрированная среда разработки

Среда разработки

Если вы запускали PowerShell через поиск, вероятно, вы могли заметить приложение Windows PowerShell ISE.

PowerShell-скрипты — это текстовые файлы с расширением .ps1.

Windows PowerShell ISE — это интегрированная среда сценариев PowerShell, включающая в себя:

  • редактор PowerShell-скриптов с автодополнением,
  • окно для интерактивного выполнения командлетов в скрипте,
  • список доступных командлетов с поиском.
Перечень команд
Справка Test-Connection

Обратите внимание, что модуль ISE предоставляет графический интерфейс для генерации аргументов командлета. Помимо генерации команд, в функции модуля также входит вызов «справочника» по командлетам, аналогичного Get-Help, только в графическом интерфейсе.

После написания своего первого PowerShell-скрипта вы столкнетесь с некоторыми ограничениями. Во-первых, файл с расширением ps1 нельзя запустить «двойным кликом» по файлу. Необходимо открыть контекстное меню с помощью правой клавиши мыши и выбрать Запустить с помощью PowerShell.

Во-вторых, скрипт не запустится со следующей ошибкой:

Невозможно загрузить файл C:\Users\sun\Documents\HelloWorld.ps1, так как выполнение сценариев отключено в этой системе. Для получения дополнительных сведений см. about_Execution_Policies по адресу https:/go.microsoft.com/fwlink/
?LinkID=135170.
    + CategoryInfo          : Ошибка безопасности: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnauthorizedAccess

По умолчанию запуск PowerShell-скриптов ограничен соответствующей политикой безопасности. Посмотреть текущее значение политики безопасности можно с помощью командлет Get-ExecutionPolicy:

PS C:\Users\sun> Get-ExecutionPolicy
Restricted

Список возможных значений:

  • Restricted — запуск запрещен,
  • AllSigned — разрешен только запуск подписанных доверенным разработчиком скриптов,
  • RemoteSigned — разрешен запуск подписанных и собственных скриптов,
  • Unrestricted — разрешен запуск любых скриптов.

По умолчанию стоит значение Restricted. В идеале необходимо подписывать скрипты, но для собственных нужд можно ограничиться значением RemoteSigned:

Set-ExecutionPolicy RemoteSigned

Для выполнения данной команды необходимо запустить PowerShell от имени администратора.

Выполнение задач в фоне

Консоль PowerShell

PowerShell позволяет выполнять задачи в фоновом режиме, эту функциональность обеспечивают командлеты с существительным Job:

  • Start-Job —  запустить команду или командлет в фоновом режиме,
  • Get-Job — показать состояние фоновых команд,
  • Wait-Job — дождаться завершения выполнения фоновой команды,
  • Receive-Job — получить результат выполнения команды.

Командлет Start-Job возвращает информацию о запущенном фоновом задании. Идентификатор, обозначенный в поле Id, является уникальным для сессии PowerShell.

Настройка удаленного выполнения

PowerShell позволяет реализовать удаленное выполнение командлетов, скриптов, но только на платформе Windows. Для включения возможности удаленного управления необходимо выполнить командлет Enable-PSRemoting с правами администратора.

Командлет Enter-PSSession запустит удаленную интерактивную сессию, а Invoke-Command выполнит команду на одном или нескольких удаленных компьютерах.

PowerShell – актуальные версии программы

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

На момент написания статьи актуальная версия PowerShell — 7.2. Используйте этот текст в качестве краткого справочника по Windows PowerShell, администрирование систем со скриптами в этой программе будет довольно простым. 

Первые шаги для пауэршельшиков

Уровень сложности
Простой

Время на прочтение
12 мин

Количество просмотров 429K

Привет всем из 2023 года!
Я написал эту статью 12 лет назад. И внезапно — это — моя самая популярная статья. Я так же удивился что люди до сих пор заходят сюда и читают эту статью. Поэтому я решил её обновить. И после прочтения понял, что обновлять ничего не буду.

Да, powershell обновился за последние годы. Теперь он стал Powershell Core, и его можно запускать как на Windows, так и на Linux и MacOS. В скриптах появилось много плюшек, но основная идея осталась той же.

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

Приди ко мне брате в Консоль!
— Админ Долгорукий.

Много ярлыков улетело в корзину со времён выхода в свет 2008 Windows. Люди попроще дивились новому синему окошку, которое ребята из Майкрософт зачем-то вставили в свои новые продукты. Люди, которые сидят на блогах и знают программирование начали изучать это окошко.

В итоге к народу начало приходить осознание того, что Майкрософт действительно разработали что-то новое и интересное.
И так, зачем вам это нужно? В основном, программа под названием PowerShell (в дальнейшем PS) предназначена для администраторов и программистов. Она позволяет автоматизировать примерно 99% всех действий в системе. С помощью неё вы можете настраивать удалённые компьютеры, запускать и перезапускать сервисы и производить обслуживание большиства серверных приложений. Как выяснилось, возможности у программы потрясающие.

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

Задача этой статьи проста — показать вам малую долю возможностей PS и дать вам концептуальное понимание предмета. В действительности документации по предмету написано несметное количество, так что я не стремлюсь охватить всё. Я так же ознакомлю вас с набором утилит, которые позволят не вылезать из PS в принципе.

Что представляет собой PS? Это интерпретатор командной строки. Вы вводите необходимые команды, на экране отображается результат их выполнения. Всё просто. Всё было так со времён доса и старого доброго Юникса.

Есть два основных отличия от предшественников, которые качественно выделяют PS среди других интерпретаторов.

  • Очень хорошая интеграция с Microsoft .NET Framework. Это даёт вам возможность вплетать мощные программистские решения в свои команды и скрипты.
  • Все значения, возвращаемые вам в терминал являются объектами, с которыми можно работать как с объектами, а не просто набором строк. Это позволяет вам создавать неимоверно мощные программные скрипты.

Приступая к работе

Если вы используете Windows 7 или 2008 то PS вам уже доступен. Для пользователей других версий Windows — добро пожаловать на сайт Майкрософт.

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

dir

и вы получите список папок в текущем каталоге. Приятным моментом для любителей Юникса
будет тот факт, что команда

ls

работает так же хорошо, как и dir. В PS существует система назначения алиасов на различные команды. В действительности, то что вы сейчас сделали — это выполнили командлет (так в PS называются команды, встроенные в сам PS) Get-ChildItem. Вы можете попробовать просто набрать Get-ChildItem и получить тот же результат, что и в двух предыдущих командах. Для того, чтобы вы быстро ознакомились со списком всех алиасов наберите

ls Alias:\

И так, что-то произошло. Вы начали кое-что понимать. Сейчас я буду раскладывать всю магию по кусочкам.

Первое. Командлеты в оригинальной нотации PS имеют следующую систему именования — Глагол-Объект. Это позволяет вам лучше понимать, что можно ожидать в результате выполнения того или иного командлета. Например,

Get-Process # Получить список процессов
Remove-Item # Удалить что-то
Get-Help # получить справку по чему-то
Set-Alias # Создать новый алиас
New-Item # Создать новый объект (Объектом может быть всё что угодно, например, файл)

Далее, в PS достаточно много очевидных вещей находится в непривычных для виндузятника местах. В частности, вы можете посмотреть, что за диски есть в вашей системе, набрав команду

Get-PSDrive

И в ответ вы получаете намного более интересный список дисков в вашей системе, нежели тот, что вы видите в «Моём Компьютере»

Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
Alias                                  Alias
C                  16.56         63.44 FileSystem    C:\
cert                                   Certificate   \
D                    .11         53.92 FileSystem    D:\
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
WSMan                                  WSMan

На диске Alias вы можете увидеть список всех алиясов в системе. Виртуальный диск Variable: хранит в себе все переменные, которые вы можете использовать в данной сессии. На диске Env — лежат переменные операционной системы. Диски HKCU и HKLM являются обёрткой для работы с соответствующими ветками реестра.
Давайте углубимся. Набирайте

Set-Location HKLM: # Или, если вы из людей подосёвее, набирайте cd HKLM:

Ну и как вам новый и невероятный способ хождения по реестру всея машины? Вы можете сделать ls по ветке реестра или перейти в нужный «каталог», набрав cd SYSTEM.

SKC  VC Name                           Property
---  -- ----                           --------
  2   0 BCD00000000                    {}
  4   0 HARDWARE                       {}
  1   0 SAM                            {}
Get-ChildItem : Requested registry access is not allowed.
At line:1 char:3
+ ls <<<<  -force
    + CategoryInfo          : PermissionDenied: (HKEY_LOCAL_MACHINE\SECURITY:St
   ring) [Get-ChildItem], SecurityException
    + FullyQualifiedErrorId : System.Security.SecurityException,Microsoft.Power
   Shell.Commands.GetChildItemCommand

 35   0 SOFTWARE                       {}
  8   0 SYSTEM                         {}

(Кстати, даже из под администраторского аккаунта есть доступ не ко всем объектам, о чём мой шелл меня уведомляет красными буквами).

Не бойтесь использовать команды New-Item и Remove-Item чтобы создавать и удалять нужные вам ключи в реестре. (И по традиции, я напомню вам, что играться с ключами реестра в администраторском режиме опасно)

Ну, вот вам и небольшой экскурс вглубь. Конечно же, у вас не получится создать ключ реестра так просто. Что-то пойдёт не так, как надо. Ну что же, могу сказать, что PS — это система, которая поощряет обучение в этой системе. Поэтому

Обучение тому, как правильно чему-то научиться в PowerShell

Способность наблюдать и анализировать наблюдения отличает нормального человека от психа. Ребят в Майкрософт психами не назовёшь. Они действительно понаблюдали за пользователями других командных интерпретаторов и выяснили, какая команда чаще всего используется в интерпретаторах. И той командой был великий и могучий man. (Для незнающих — попробуйте сделать — гугл man или наберите в своём баше man man)
В PS есть аналогичная команда, которая звучит как

Get-Help # хотя вы можеше использовать алиас на неё, под названием help

Насколько поразительно отвратительно ребята из Майкрософт делают документацию для пользовательских приложений, настолько хорошо они заботятся о программистах. (Неверующие могут сравнить справку системы Windows XP и 2003)
И так, выбирайте приглянувшийся вам командлет и отправляйте его в help. Если после прочтения общей справки вы ничего не поняли, то попробуйте набрать

get-help New-Item -Examples

Ключ -Examples обычно выдаёт от двух до пяти потрясающих примеров использования выбранной вами команды, с детальным их описанием.
На самом деле, одним только Гет-Хелпом, я в своё время изучил основы PS, перебирая все команды и читая к ним справку.
Если же вы захотели получить справку по какой-то функции, но не знаете, как она называется, а просто предполагаете о её существовании, то просто наберите

get-help files

В ответ на эту команду вы получите список топиков, которые содержат ключевое слово:

PS C:\> get-help Files

Name                              Category  Synopsis
----                              --------  --------
FileSystem                        Provider  Provides access to files and dire...
about_profiles                    HelpFile  Describes how to create and use a...

В нашем случая, для того, чтобы научиться работать с реестром, вы можете просто набрать

get-help Registry

В ответ вы получите длиннющее полотно, которое со всеми подробностями расскажет вам о том, как вы можете работать с реестром в PS.
К сожалению, читабельность полотна обратно пропорциональна его длине. Так что, научившись учиться, давайте обучимся тому, как сделать работу в шелле немного проще.

Маленькие, но очень полезные фишки, которые должны быть в жизни

Товарищ, смирись, ты — в командной строке. Тут безгуёво принципе. Но, если ты познаешь некоторые уловки, тебе здесь станет удобно.

И так, для тех, кто никогда не был в командной строке

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

Для тех, кто уже бывал в командных строках

  1. Ctrl+Home — удаляет всё, начиная с текущей позиции курсора до начала строки
  2. Ctrl+End — удаляет с курсора и до конца строки
  3. F7 — показывает окно со списком набранных команд, и позволяет выбрать одну из них.
  4. Для того, чтобы скопировать что-то в буфер, выделите это мышью и нажмите Enter.
  5. Для того, чтобы вставить строку из буфера — просто нажмите правую кнопку мыши.

Это — самые базовые, и необходимые действия, которые вам придётся выучить наизусть. Другое дело, что они помогут вам шустрее работать с шеллом.

Углубляемся в изучение окружения

Для того чтобы понять нижеследующие строки, нам надо будет разобраться с понятием конвейера.
Когда вы запускаете какой-либо командлет, то возвращаемые им значения преобразуются в текст и выводятся на экран. Но, это не всегда полезно. Например, если вы хотите передать возвращаемое значение одного командлета на вход другого. Для этого вам полезно будет использовать |, в народе именуемый конвейером.
Например, вы хотите отобразить на экране текст, который содержится во всех файлах формата bat в папке. Для того, чтобы выбрать файлы, выполняйте

PS C:\> ls -filter "*.bat" | Get-Content
REM Dummy file for NTVDM

Команда ls -filter «*.bat» выбирает все файлы с нужным расширением, а команда Get-Content выводит их на экран (на самом деле, исходя из названия, команда просто получает содержимое объекта, а на экран он выводится по факту того, что дальше некуда)
Конвейер может сделать очень много полезного для вас. Например, решить «портянку помощи».

Get-Help Registry | Set-Content reg.txt

И весь файл помощи по реестру сохранён в текстовом файле, который вы теперь можете открыть.

Если вы действительно хотите порадоваться жизни, и понять, что PS способен на многое, то вам придётся применить свой IQ на все 100% и вообразить что-то нереальное.

ps | ls

Выглядит невероятно, а результат даёт потрясающий! Если вы хотите узнать, из какого файла появился процесс, просто пустите его конвейером на get-childitem!
В частности, я сейчас набираю текст в вордпаде:

PS C:\> ps wordpad | ls

    Directory: C:\Program Files\Windows NT\Accessories

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         6/28/2010   9:57 PM    4247040 wordpad.exe

Вот это меня поразило до глубины души.

Теперь можно переходить к изучению окружения

Как я уже говорил, всё что вы видите на экране не является строками, а является объектами. Например, результат выполнения команды ps возвращает нам список процессов, запущенных в системе.
Но как узнать, что же у нас в руках?
Для этого мы воспользуемся командлетом Get-Member, который откроет нам методы любого класса. Давайте узнаем, что содержится в том же самом процессе, который выдаёт нам команда ps.

ps wordpad | Get-Member

Набирайте, и смотрите на список членов класса, которые вы можете увидеть в классе System.Diagnostics.Process. Тоесть, фактически, командлет ps вернул нам массив объектов типа Process и мы можем попрограммировать их!
Давайте поглумимся над блокнотом.

PS C:\> notepad                                                        
PS C:\> ps notepad                                                                                                                            Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName  -------  ------    -----      ----- -----   ------     -- -----------       70       4     1148       5376    56     0.30   3900 notepad                                                                                                                                                    PS C:\> ps notepad | get-member -type method


   TypeName: System.Diagnostics.Process

Name                      MemberType Definition
----                      ---------- ----------
BeginErrorReadLine        Method     System.Void BeginErrorReadLine()
BeginOutputReadLine       Method     System.Void BeginOutputReadLine()
CancelErrorRead           Method     System.Void CancelErrorRead()
CancelOutputRead          Method     System.Void CancelOutputRead()
Close                     Method     System.Void Close()
CloseMainWindow           Method     bool CloseMainWindow()
CreateObjRef              Method     System.Runtime.Remoting.ObjRef CreateObj...
Dispose                   Method     System.Void Dispose()
Equals                    Method     bool Equals(System.Object obj)
GetHashCode               Method     int GetHashCode()
GetLifetimeService        Method     System.Object GetLifetimeService()
GetType                   Method     type GetType()
InitializeLifetimeService Method     System.Object InitializeLifetimeService()
Kill                      Method     System.Void Kill()
Refresh                   Method     System.Void Refresh()
Start                     Method     bool Start()
ToString                  Method     string ToString()
WaitForExit               Method     bool WaitForExit(int milliseconds), Syst...
WaitForInputIdle          Method     bool WaitForInputIdle(int milliseconds),...

Вот это неплохое количество методов, которые мы можем запустить, используя шелл. И так, как же это сделать? Просто.

(ps notepad).WaitForExit()

Если вы возьмёте результат выполнения командлета в скобки, то вы сможете обратиться к нему, как к объекту в вашей программе, прямо из командной строки.
После запуска этого метода шелл завис и ждёт у моря погоды. Нажмите пару раз Enter. Ничего не происходит. Что же, закройте открытый блокнот. Вуаля, вы снова в шелле.
Я думаю, теперь вы должны погулять свою фантазию. Попробуйте, пустите через конвейер в get-member результаты выполнения ls или других командлетов, каких только можете найти.
Если вы увидели, что в свойстве какого-то объекта лежит ещё один объект, не стесняйтесь пускать его на Get-Member

(ps notepad).StartTime | Get-Member

И так далее до бесконечности.

Задача для пытливых умов. Пролетела новость, что рефлектор станет платным. Как сделать рефлектор на чистом PS? Кстати, это не такая уж и трудная задача.

Ну, вот, мы немного разобрались с тем, как узнать, что нас окружает. Теперь, мы готовы к тому, чтобы понять ещё парочку принципов, существующих в шелле.

Переменные и объекты

И так, пару слов по поводу переменных. В PS они бывают нетипизированными:

$processList = ps

И типизированными

PS C:\> [DateTime]$x = "febbrrr"
Cannot convert value "febbrrr" to type "System.DateTime". Error: "The string was
 not recognized as a valid DateTime. There is a unknown word starting at index 0."
At line:1 char:13
+ [DateTime]$x <<<<  = "febbrrr"
    + CategoryInfo          : MetadataError: (:) [], ArgumentTransformationMetadataException
    + FullyQualifiedErrorId : RuntimeException
PS C:\> [DateTime]$x = "02/14/11"
PS C:\> $x
Monday, February 14, 2011 12:00:00 AM

И так, у нас появились переменные, и теперь мы можем присваивать им значения. В общем, всё, что вы пускали на конвейер, можно пустить и в переменную. Но, тут PS предоставляет нам одну очень интересную фитчу, которая делает его незаменимым инструментом в руках .NET разработчика.
Помните, я сказал, что в PS всё, что возвращается — это объект? Ну так вот, объект это не простой, а дотнетовый. Любой программист уже обратил внимание на тот факт, что в списке процессов мы работали с объектом из окружения CLR. Что же, мы можем запросто создать такой объект.
Давайте, попробуйте

$x = new-object System.Object

Что-же, переменную мы создали, а толку от неё — как с икспи сервака. Никакого. Давайте пофантазируем и подумаем, что мы действительно можем сделать?

C:\> $client = New-Object System.Net.WebClient
C:\> $client.DownloadString("http://google.com")

А вот это уже другое дело. Только что мы из подручных средств собрали себе wget на коленке. Как вам такой поворот событий?
Что же, в этот момент можно идти в MSDN и подряд перебирать все классы, смотреть, что в них есть интересного. Всё это позволяет создавать очень гибкие скрипты.

Кстати, о скриптах

PS позволяет выполнять скрипты. Ура! Делает он это с волшебного пендаля. Неура. По умолчанию в PS запрещён запуск скриптов, которые не были подписаны цифровой подписью. Для запуска скрипта вы должны его либо подписать (для этого используйте help about_signing) либо, просто понизить уровень безопасности, и выполнить

set-executionpolicy remotesigned

обычно я делаю второе. Ибо первый вариант требует скачивания многотонных SDK и долгого колдовства. Хотя, напомню о безопасности, и скажу, что второй вариант не канает для супер-сервера-всея-руси.
После выполнения этих действий, вы будете готовы писать свой первый скрипт. Для начала, рекомендую создать для него файл:

New-Item -type file $PROFILE

Переменная $PROFILE содержит в себе адрес файла с вашим профилем в PS. Этот файл будет запускаться в тот момент, когда вы стартуете PS. Плюс заключается в том, что вы можете нашпиговать свой профиль разными мелкими и полезными скриптами, которые помогут вам автоматизировать производство.
Теперь вы можете начать редактирование своего профиля:

vim $PROFILE

(О, кстати, я вам не сказал, но в PS, на мой взгляд, лучше всего смотрится текстовый редактор vim. Возможно кто-то назовёт меня настоящим извращенцем, но на самом деле, я уже не раз пытался использовать что-то другое, но всегда возвращался к виму. Попробуйте и вы. Его не просто изучить с нуля, но если вы поймёте основы, то сможете очень быстро и удобно редактировать тексты.)
Ладно, теперь повторим эту команду без того, чтобы умничать:

notepad $PROFILE

Ну, вот, например, то, что лежит у меня в профиле

$webClient =  New-Object System.Net.WebClient
$cred = New-Object System.Net.NetworkCredential("login", "Pass")
$webClient.Proxy = New-Object System.Net.WebProxy("www.proxy.adrress", $true, $null, $cred)

Так как мы используем прокси сервер, а вэб клиент является моим любимым инструментом для работы, то я уже заготовил для себя переменную с этим клиентом, чтобы иметь возможность безболезненно подключаться к интернету и не отягощать себя вводом пароля.
Что ещё можно запихнуть в профиль?
Всё что угодно. Настройки цвета окна, ваши любимые функции и алиасы. Алиасы на ваши излюбленные программы и скрипты автоматизации…

На самом деле, я уже написал достаточно много. Вы увидели для себя кое-что новое. Я прекрасно знаю, что уровень этой статьи — для начинающих, но и продвинутые админы найдут для себя несколько интересных моментов. Моей задачей было предоставить вам возможность получить общее представление о том, что вы можете сделать.
Что же, вот, напоследок, вам задачи, над которыми можно поломать голову и решить интересные проблемы:
Написать скрипт, который сортирует изображения по папкам, исходя из их размера (для получения размера файла можно использовать дотнет объекты или ком объекты, предоставляемые эксплорером)
Для выполнения этого, вам уж точно понадобиться хорошо изучить Where-Object или Foreach-Object.

Написать простой NMAP
Что будет, если запустить команду Пинг в цикле? А теперь, возьмите выход от этой команды и пропарсите его как строку. Вам однозначно придётся прочитать мануал по -le -ge и том, как работать со строками.

Написать парсер для башорга.
Чтобы, после логина в систему, вам на выбор выдавалась цитата из лучших за последние пять лет. Тут можно использовать регэкспы, с которыми PS очень хорошо дружит.

Поиграться с переменной $host и сделать из синего экрана Матрицу!

Что ещё можно делать? Матёрые COM программисты найдут для себя отличный способ повеселиться, когда обнаружат, что new-object имеет ключ -comObject. Фактически, это открывает вам ворота к полному управлению практически любой функцией локального и удалённого компьютера.

Ещё хочу заметить, что последние версии программного обеспечения от Microsoft поддерживают работу в PowerShell. Например, есть SQL PowerShell, который поставляется с 2008 сиквелом и позволяет сделать ls по записям в любой таблице. Это даёт ещё больший простор для фантазий.

Так же, хочу заметить, что комьюнити по разработке на PS очень сильно растёт и ширится. В частности, вы можете найти скрипты, готовые для чего угодно — например, вы можете нагуглить себе способ управления ITunes через PowerShell или способ использования Google Desktop Search в PS.

Что же, мой неинтересующийся друг, надеюсь, я дал тебе что-то интересное, и ты теперь возьмёшься за покорение интерпретатора, который действительно поможет тебе упростить твою нелёгкую программерскую жизнь и даст тебе возможность автоматизировать больше и быстрее. Очень приятно, что ты прочитал мою статью. Спасибо большое, я могу продолжать конкретно описывать определённые области, если вдруг тебе станет очень интересно.

Данная статья была создана в дополнение к видео уроку PowerShell за 20 минут. В ней еще раз перечислены те принципы и подходы к PowerShell, которые позволят начать использовать PowerShell в своей работе. Введение в PowerShell — это описание основных команд PowerShell, описание процесса поиска команд и использование справки. Кратко изложены принципы конвейера команд, фильтрации результата и форматирования вывода. Показано использования PowerShell ISE для освоения PowerShell.

Команды, алиасы, структура команды

Запустить PowerShell можно достаточно легко в поиске Стартового Окна Windows набрать PowerShell. Обратите внимание, что PowerShell зачастую используется для решения административных задач, поэтому возможно вам понадобиться запустить его от имени администратора. Для этого в результатах поиска щелкаем правой кнопкой мыши и выбираем «запуск от имени администратора».

Запуск PowerShell

Запуск консоли PowerShell от имени администратора

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

Консоль PowerShell

Окно консоли PowerShell

Каждая команда PowerShell ее еще иногда называют командлет или CmdLet состоит из двух частей глагол (Get, Set, Add, Invoke, Remove и т.д.) и существительного (Service, VM, AzureAccount, DHCPServerSetting). Каждая часть отделяется от другой одним дефисом. Других дефисов в командлете быть не может. При наборе команд можно использовать клавишу Tab, которая позволяет автоматически закончить ввод команды. Tab можно нажимать несколько раз при этом будет осуществляться перебор подходящих команд. Кстати комбинация Shift+Tab так же работает и перебирает команды в обратном порядке. Для исполнения необходимо нажать клавишу Enter.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

PS C:\Users\pnck> Get-ChildItem

    Каталог: C:\Users\pnck

Mode                LastWriteTime     Length Name

                    

d        20.11.2014     22:58            .gimp-2.8

d        14.01.2014     16:35            .thumbnails

d        17.02.2014      9:53            Cisco Packet Tracer 6.0.1

d-r        26.10.2014      8:25            Contacts

d-r        21.01.2015     12:23            Desktop

d-r        30.12.2014     10:51            Documents

d-r        20.01.2015     19:22            Downloads

d-r        26.10.2014      8:25            Favorites

d        30.12.2013     13:09            GNS3

d-r        26.10.2014      8:26            Links

d-r        26.10.2014      8:25            Music

d        09.07.2014     17:26            NNU

d-r        20.01.2015     20:10            OneDrive

d-r        26.10.2014      8:25            Pictures

d-r        26.10.2014      8:26            Saved Games

d-r        30.12.2014      8:10            Searches

d        02.01.2015     12:05            Tracing

d-r        26.10.2014      8:25            Videos

d        20.01.2015     19:24            Новая папка

-a        04.03.2014     15:02         28 .gitignore

-a        21.12.2014     11:53        186 .packettracer

-a        29.03.2014     23:19    3211264 DevelopmentStorageDb22.mdf

-a        29.03.2014     23:19     851968 DevelopmentStorageDb22_log.ldf

-a        12.01.2014     10:53         46 test.ps1

-a        12.01.2014     10:53         46 test.psq

-a        28.01.2014     16:25     445601 WP_002009.jpg

-a        28.01.2014     16:25     149975 WP_002010.jpg

-a        28.01.2014     16:25     267783 WP_002011.jpg

-a        28.01.2014     16:25     134365 WP_002012.jpg

Данная команда Get-ChildItem без параметров выдает содержимое текущего каталога. У некоторых командлетов в PowerShell существуют алиасы, т.е. другой вариант написания того же командлета. Алиасы делают использование PowerShell более простым и легким. Так у командлета Get-ChildItem есть алиасы dir и ls. Кроме того существуют такие алиасы как copy, cp, rm, mkdir и т.д. просмотерть весь список алиасов можно выполнив командлет Get-Alias.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

PS C:\Users\pnck> dir

    Каталог: C:\Users\pnck

Mode                LastWriteTime     Length Name

                    

d        20.11.2014     22:58            .gimp-2.8

d        14.01.2014     16:35            .thumbnails

d        17.02.2014      9:53            Cisco Packet Tracer 6.0.1

d-r        26.10.2014      8:25            Contacts

d-r        21.01.2015     12:23            Desktop

d-r        30.12.2014     10:51            Documents

d-r        20.01.2015     19:22            Downloads

d-r        26.10.2014      8:25            Favorites

d        30.12.2013     13:09            GNS3

d-r        26.10.2014      8:26            Links

d-r        26.10.2014      8:25            Music

d        09.07.2014     17:26            NNU

d-r        20.01.2015     20:10            OneDrive

d-r        26.10.2014      8:25            Pictures

d-r        26.10.2014      8:26            Saved Games

d-r        30.12.2014      8:10            Searches

d        02.01.2015     12:05            Tracing

d-r        26.10.2014      8:25            Videos

d        20.01.2015     19:24            Новая папка

-a        04.03.2014     15:02         28 .gitignore

-a        21.12.2014     11:53        186 .packettracer

-a        29.03.2014     23:19    3211264 DevelopmentStorageDb22.mdf

-a        29.03.2014     23:19     851968 DevelopmentStorageDb22_log.ldf

-a        12.01.2014     10:53         46 test.ps1

-a        12.01.2014     10:53         46 test.psq

-a        28.01.2014     16:25     445601 WP_002009.jpg

-a        28.01.2014     16:25     149975 WP_002010.jpg

-a        28.01.2014     16:25     267783 WP_002011.jpg

-a        28.01.2014     16:25     134365 WP_002012.jpg

PS C:\Users\pnck> ls

    Каталог: C:\Users\pnck

Mode                LastWriteTime     Length Name

                    

d        20.11.2014     22:58            .gimp-2.8

d        14.01.2014     16:35            .thumbnails

d        17.02.2014      9:53            Cisco Packet Tracer 6.0.1

d-r        26.10.2014      8:25            Contacts

d-r        21.01.2015     12:23            Desktop

d-r        30.12.2014     10:51            Documents

d-r        20.01.2015     19:22            Downloads

d-r        26.10.2014      8:25            Favorites

d        30.12.2013     13:09            GNS3

d-r        26.10.2014      8:26            Links

d-r        26.10.2014      8:25            Music

d        09.07.2014     17:26            NNU

d-r        20.01.2015     20:10            OneDrive

d-r        26.10.2014      8:25            Pictures

d-r        26.10.2014      8:26            Saved Games

d-r        30.12.2014      8:10            Searches

d        02.01.2015     12:05            Tracing

d-r        26.10.2014      8:25            Videos

d        20.01.2015     19:24            Новая папка

-a        04.03.2014     15:02         28 .gitignore

-a        21.12.2014     11:53        186 .packettracer

-a        29.03.2014     23:19    3211264 DevelopmentStorageDb22.mdf

-a        29.03.2014     23:19     851968 DevelopmentStorageDb22_log.ldf

-a        12.01.2014     10:53         46 test.ps1

-a        12.01.2014     10:53         46 test.psq

-a        28.01.2014     16:25     445601 WP_002009.jpg

-a        28.01.2014     16:25     149975 WP_002010.jpg

-a        28.01.2014     16:25     267783 WP_002011.jpg

-a        28.01.2014     16:25     134365 WP_002012.jpg

Поиск команд, параметры команд

Для успешного освоения PowerShell необходимо уметь быстро искать нужные команды PowerShell. Для поиска командлетов можно использовать команду Get-Command. У данного командлета есть параметр Name после которого необходимо указать название командлета информацию по которому необходимо получить.

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

Для параметра Name командлета Get-Command можно использовать подстановочные символы такие как * и ?. Это очень облегчает задачу поиска команд. Мы можем просто использовать какое-то ключевое слово. В данном статье мы будем разбирать настройку DNS сервера.

Команда ниже дает список все командлетов связанных с DNS.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

PS C:\Users\pnck> Get-Command -Name *DNS*

CommandType     Name                                               ModuleName

                                                   

Alias           dnsn -> Disconnect-PSSession

Alias           Export-DnsServerTrustAnchor                        DnsServer

Function        Add-DnsClientNrptRule                              DnsClient

Function        Add-DnsServerConditionalForwarderZone              DnsServer

Function        Add-DnsServerDirectoryPartition                    DnsServer

Function        Add-DnsServerForwarder                             DnsServer

Function        Add-DnsServerPrimaryZone                           DnsServer

Function        Add-DnsServerResourceRecord                        DnsServer

Function        Add-DnsServerResourceRecordA                       DnsServer

Function        Add-DnsServerResourceRecordAAAA                    DnsServer

Function        Add-DnsServerResourceRecordCName                   DnsServer

Function        Add-DnsServerResourceRecordDnsKey                  DnsServer

Function        Add-DnsServerResourceRecordDS                      DnsServer

Function        Add-DnsServerResourceRecordMX                      DnsServer

Function        Add-DnsServerResourceRecordPtr                     DnsServer

Function        Add-DnsServerRootHint                              DnsServer

Function        Add-DnsServerSecondaryZone                         DnsServer

Function        Add-DnsServerSigningKey                            DnsServer

Function        Add-DnsServerStubZone                              DnsServer

Function        Add-DnsServerTrustAnchor                           DnsServer

Function        Add-DnsServerZoneDelegation                        DnsServer

Function        Add-VpnConnectionTriggerDnsConfiguration           VpnClient

Function        Clear-DnsClientCache                               DnsClient

Function        Clear-DnsServerCache                               DnsServer

Function        Clear-DnsServerStatistics                          DnsServer

Function        ConvertTo-DnsServerPrimaryZone                     DnsServer

Function        ConvertTo-DnsServerSecondaryZone                   DnsServer

Function        Disable-DnsServerSigningKeyRollover                DnsServer

Function        Disable-NetDnsTransitionConfiguration              NetworkTransition

Function        Enable-DnsServerSigningKeyRollover                 DnsServer

Function        Enable-NetDnsTransitionConfiguration               NetworkTransition

Function        Export-DnsServerDnsSecPublicKey                    DnsServer

Function        Export-DnsServerZone                               DnsServer

Function        Get-DhcpServerDnsCredential                        DhcpServer

Function        Get-DhcpServerv4DnsSetting                         DhcpServer

Function        Get-DhcpServerv6DnsSetting                         DhcpServer

Function        Get-DnsClient                                      DnsClient

Function        Get-DnsClientCache                                 DnsClient

Function        Get-DnsClientGlobalSetting                         DnsClient

Function        Get-DnsClientNrptGlobal                            DnsClient

Function        Get-DnsClientNrptPolicy                            DnsClient

Function        Get-DnsClientNrptRule                              DnsClient

Function        Get-DnsClientServerAddress                         DnsClient

Function        Get-DnsServer                                      DnsServer

Function        Get-DnsServerCache                                 DnsServer

Function        Get-DnsServerDiagnostics                           DnsServer

Function        Get-DnsServerDirectoryPartition                    DnsServer

Function        Get-DnsServerDnsSecZoneSetting                     DnsServer

Function        Get-DnsServerDsSetting                             DnsServer

Function        Get-DnsServerEDns                                  DnsServer

Function        Get-DnsServerForwarder                             DnsServer

Function        Get-DnsServerGlobalNameZone                        DnsServer

Function        Get-DnsServerGlobalQueryBlockList                  DnsServer

Function        Get-DnsServerRecursion                             DnsServer

Function        Get-DnsServerResourceRecord                        DnsServer

Function        Get-DnsServerRootHint                              DnsServer

Function        Get-DnsServerScavenging                            DnsServer

Function        Get-DnsServerSetting                               DnsServer

Function        Get-DnsServerSigningKey                            DnsServer

Function        Get-DnsServerStatistics                            DnsServer

Function        Get-DnsServerTrustAnchor                           DnsServer

Function        Get-DnsServerTrustPoint                            DnsServer

Function        Get-DnsServerZone                                  DnsServer

Function        Get-DnsServerZoneAging                             DnsServer

Function        Get-DnsServerZoneDelegation                        DnsServer

Function        Get-NetDnsTransitionConfiguration                  NetworkTransition

Function        Get-NetDnsTransitionMonitoring                     NetworkTransition

Function        Get-UalDns                                         UserAccessLogging

Function        Import-DnsServerResourceRecordDS                   DnsServer

Function        Import-DnsServerRootHint                           DnsServer

Function        Import-DnsServerTrustAnchor                        DnsServer

Function        Invoke-DnsServerSigningKeyRollover                 DnsServer

Function        Invoke-DnsServerZoneSign                           DnsServer

Function        Invoke-DnsServerZoneUnsign                         DnsServer

Function        Register-DnsClient                                 DnsClient

Function        Register-DnsServerDirectoryPartition               DnsServer

Function        Remove-DhcpServerDnsCredential                     DhcpServer

Function        Remove-DnsClientNrptRule                           DnsClient

Function        Remove-DnsServerDirectoryPartition                 DnsServer

Function        Remove-DnsServerForwarder                          DnsServer

Function        Remove-DnsServerResourceRecord                     DnsServer

Function        Remove-DnsServerRootHint                           DnsServer

Function        Remove-DnsServerSigningKey                         DnsServer

Function        Remove-DnsServerTrustAnchor                        DnsServer

Function        Remove-DnsServerZone                               DnsServer

Function        Remove-DnsServerZoneDelegation                     DnsServer

Function        Remove-VpnConnectionTriggerDnsConfiguration        VpnClient

Function        Reset-DnsServerZoneKeyMasterRole                   DnsServer

Function        Reset-NetDnsTransitionConfiguration                NetworkTransition

Function        Restore-DnsServerPrimaryZone                       DnsServer

Function        Restore-DnsServerSecondaryZone                     DnsServer

Function        Resume-DnsServerZone                               DnsServer

Function        Set-DhcpServerDnsCredential                        DhcpServer

Function        Set-DhcpServerv4DnsSetting                         DhcpServer

Function        Set-DhcpServerv6DnsSetting                         DhcpServer

Function        Set-DnsClient                                      DnsClient

Function        Set-DnsClientGlobalSetting                         DnsClient

Function        Set-DnsClientNrptGlobal                            DnsClient

Function        Set-DnsClientNrptRule                              DnsClient

Function        Set-DnsClientServerAddress                         DnsClient

Function        Set-DnsServer                                      DnsServer

Function        Set-DnsServerCache                                 DnsServer

Function        Set-DnsServerConditionalForwarderZone              DnsServer

Function        Set-DnsServerDiagnostics                           DnsServer

Function        Set-DnsServerDnsSecZoneSetting                     DnsServer

Function        Set-DnsServerDsSetting                             DnsServer

Function        Set-DnsServerEDns                                  DnsServer

Function        Set-DnsServerForwarder                             DnsServer

Function        Set-DnsServerGlobalNameZone                        DnsServer

Function        Set-DnsServerGlobalQueryBlockList                  DnsServer

Function        Set-DnsServerPrimaryZone                           DnsServer

Function        Set-DnsServerRecursion                             DnsServer

Function        Set-DnsServerResourceRecord                        DnsServer

Function        Set-DnsServerResourceRecordAging                   DnsServer

Function        Set-DnsServerRootHint                              DnsServer

Function        Set-DnsServerScavenging                            DnsServer

Function        Set-DnsServerSecondaryZone                         DnsServer

Function        Set-DnsServerSetting                               DnsServer

Function        Set-DnsServerSigningKey                            DnsServer

Function        Set-DnsServerStubZone                              DnsServer

Function        Set-DnsServerZoneAging                             DnsServer

Function        Set-DnsServerZoneDelegation                        DnsServer

Function        Set-NetDnsTransitionConfiguration                  NetworkTransition

Function        Set-VpnConnectionTriggerDnsConfiguration           VpnClient

Function        Show-DnsServerCache                                DnsServer

Function        Show-DnsServerKeyStorageProvider                   DnsServer

Function        Start-DnsServerScavenging                          DnsServer

Function        Start-DnsServerZoneTransfer                        DnsServer

Function        Step-DnsServerSigningKeyRollover                   DnsServer

Function        Suspend-DnsServerZone                              DnsServer

Function        Sync-DnsServerZone                                 DnsServer

Function        Test-DnsServer                                     DnsServer

Function        Test-DnsServerDnsSecZoneSetting                    DnsServer

Function        Unregister-DnsServerDirectoryPartition             DnsServer

Function        Update-DnsServerTrustPoint                         DnsServer

Cmdlet          Get-AzureDns                                       Azure

Cmdlet          New-AzureDns                                       Azure

Cmdlet          Resolve-DnsName                                    DnsClient

Application     dns.exe

Application     dnscacheugc.exe

Application     dnscmd.exe

Application     dnsmgmt.msc

Некоторые параметр некоторых командлетов можно не указывать, а просто указать значение. PowerShell сам по типу значения подберет необходимый параметр. Команда ниже будет иметь такой же результат, как и команда выше.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

PS C:\Users\pnck> Get-Command *DNS*

CommandType     Name                                               ModuleName

                                                   

Alias           dnsn -> Disconnect-PSSession

Alias           Export-DnsServerTrustAnchor                        DnsServer

Function        Add-DnsClientNrptRule                              DnsClient

Function        Add-DnsServerConditionalForwarderZone              DnsServer

Function        Add-DnsServerDirectoryPartition                    DnsServer

Function        Add-DnsServerForwarder                             DnsServer

Function        Add-DnsServerPrimaryZone                           DnsServer

Function        Add-DnsServerResourceRecord                        DnsServer

Function        Add-DnsServerResourceRecordA                       DnsServer

Function        Add-DnsServerResourceRecordAAAA                    DnsServer

Function        Add-DnsServerResourceRecordCName                   DnsServer

Function        Add-DnsServerResourceRecordDnsKey                  DnsServer

Function        Add-DnsServerResourceRecordDS                      DnsServer

Function        Add-DnsServerResourceRecordMX                      DnsServer

Function        Add-DnsServerResourceRecordPtr                     DnsServer

Function        Add-DnsServerRootHint                              DnsServer

Function        Add-DnsServerSecondaryZone                         DnsServer

Function        Add-DnsServerSigningKey                            DnsServer

Function        Add-DnsServerStubZone                              DnsServer

Function        Add-DnsServerTrustAnchor                           DnsServer

Function        Add-DnsServerZoneDelegation                        DnsServer

Function        Add-VpnConnectionTriggerDnsConfiguration           VpnClient

Function        Clear-DnsClientCache                               DnsClient

Function        Clear-DnsServerCache                               DnsServer

Function        Clear-DnsServerStatistics                          DnsServer

Function        ConvertTo-DnsServerPrimaryZone                     DnsServer

Function        ConvertTo-DnsServerSecondaryZone                   DnsServer

Function        Disable-DnsServerSigningKeyRollover                DnsServer

Function        Disable-NetDnsTransitionConfiguration              NetworkTransition

Function        Enable-DnsServerSigningKeyRollover                 DnsServer

Function        Enable-NetDnsTransitionConfiguration               NetworkTransition

Function        Export-DnsServerDnsSecPublicKey                    DnsServer

Function        Export-DnsServerZone                               DnsServer

Function        Get-DhcpServerDnsCredential                        DhcpServer

Function        Get-DhcpServerv4DnsSetting                         DhcpServer

Function        Get-DhcpServerv6DnsSetting                         DhcpServer

Function        Get-DnsClient                                      DnsClient

Function        Get-DnsClientCache                                 DnsClient

Function        Get-DnsClientGlobalSetting                         DnsClient

Function        Get-DnsClientNrptGlobal                            DnsClient

Function        Get-DnsClientNrptPolicy                            DnsClient

Function        Get-DnsClientNrptRule                              DnsClient

Function        Get-DnsClientServerAddress                         DnsClient

Function        Get-DnsServer                                      DnsServer

Function        Get-DnsServerCache                                 DnsServer

Function        Get-DnsServerDiagnostics                           DnsServer

Function        Get-DnsServerDirectoryPartition                    DnsServer

Function        Get-DnsServerDnsSecZoneSetting                     DnsServer

Function        Get-DnsServerDsSetting                             DnsServer

Function        Get-DnsServerEDns                                  DnsServer

Function        Get-DnsServerForwarder                             DnsServer

Function        Get-DnsServerGlobalNameZone                        DnsServer

Function        Get-DnsServerGlobalQueryBlockList                  DnsServer

Function        Get-DnsServerRecursion                             DnsServer

Function        Get-DnsServerResourceRecord                        DnsServer

Function        Get-DnsServerRootHint                              DnsServer

Function        Get-DnsServerScavenging                            DnsServer

Function        Get-DnsServerSetting                               DnsServer

Function        Get-DnsServerSigningKey                            DnsServer

Function        Get-DnsServerStatistics                            DnsServer

Function        Get-DnsServerTrustAnchor                           DnsServer

Function        Get-DnsServerTrustPoint                            DnsServer

Function        Get-DnsServerZone                                  DnsServer

Function        Get-DnsServerZoneAging                             DnsServer

Function        Get-DnsServerZoneDelegation                        DnsServer

Function        Get-NetDnsTransitionConfiguration                  NetworkTransition

Function        Get-NetDnsTransitionMonitoring                     NetworkTransition

Function        Get-UalDns                                         UserAccessLogging

Function        Import-DnsServerResourceRecordDS                   DnsServer

Function        Import-DnsServerRootHint                           DnsServer

Function        Import-DnsServerTrustAnchor                        DnsServer

Function        Invoke-DnsServerSigningKeyRollover                 DnsServer

Function        Invoke-DnsServerZoneSign                           DnsServer

Function        Invoke-DnsServerZoneUnsign                         DnsServer

Function        Register-DnsClient                                 DnsClient

Function        Register-DnsServerDirectoryPartition               DnsServer

Function        Remove-DhcpServerDnsCredential                     DhcpServer

Function        Remove-DnsClientNrptRule                           DnsClient

Function        Remove-DnsServerDirectoryPartition                 DnsServer

Function        Remove-DnsServerForwarder                          DnsServer

Function        Remove-DnsServerResourceRecord                     DnsServer

Function        Remove-DnsServerRootHint                           DnsServer

Function        Remove-DnsServerSigningKey                         DnsServer

Function        Remove-DnsServerTrustAnchor                        DnsServer

Function        Remove-DnsServerZone                               DnsServer

Function        Remove-DnsServerZoneDelegation                     DnsServer

Function        Remove-VpnConnectionTriggerDnsConfiguration        VpnClient

Function        Reset-DnsServerZoneKeyMasterRole                   DnsServer

Function        Reset-NetDnsTransitionConfiguration                NetworkTransition

Function        Restore-DnsServerPrimaryZone                       DnsServer

Function        Restore-DnsServerSecondaryZone                     DnsServer

Function        Resume-DnsServerZone                               DnsServer

Function        Set-DhcpServerDnsCredential                        DhcpServer

Function        Set-DhcpServerv4DnsSetting                         DhcpServer

Function        Set-DhcpServerv6DnsSetting                         DhcpServer

Function        Set-DnsClient                                      DnsClient

Function        Set-DnsClientGlobalSetting                         DnsClient

Function        Set-DnsClientNrptGlobal                            DnsClient

Function        Set-DnsClientNrptRule                              DnsClient

Function        Set-DnsClientServerAddress                         DnsClient

Function        Set-DnsServer                                      DnsServer

Function        Set-DnsServerCache                                 DnsServer

Function        Set-DnsServerConditionalForwarderZone              DnsServer

Function        Set-DnsServerDiagnostics                           DnsServer

Function        Set-DnsServerDnsSecZoneSetting                     DnsServer

Function        Set-DnsServerDsSetting                             DnsServer

Function        Set-DnsServerEDns                                  DnsServer

Function        Set-DnsServerForwarder                             DnsServer

Function        Set-DnsServerGlobalNameZone                        DnsServer

Function        Set-DnsServerGlobalQueryBlockList                  DnsServer

Function        Set-DnsServerPrimaryZone                           DnsServer

Function        Set-DnsServerRecursion                             DnsServer

Function        Set-DnsServerResourceRecord                        DnsServer

Function        Set-DnsServerResourceRecordAging                   DnsServer

Function        Set-DnsServerRootHint                              DnsServer

Function        Set-DnsServerScavenging                            DnsServer

Function        Set-DnsServerSecondaryZone                         DnsServer

Function        Set-DnsServerSetting                               DnsServer

Function        Set-DnsServerSigningKey                            DnsServer

Function        Set-DnsServerStubZone                              DnsServer

Function        Set-DnsServerZoneAging                             DnsServer

Function        Set-DnsServerZoneDelegation                        DnsServer

Function        Set-NetDnsTransitionConfiguration                  NetworkTransition

Function        Set-VpnConnectionTriggerDnsConfiguration           VpnClient

Function        Show-DnsServerCache                                DnsServer

Function        Show-DnsServerKeyStorageProvider                   DnsServer

Function        Start-DnsServerScavenging                          DnsServer

Function        Start-DnsServerZoneTransfer                        DnsServer

Function        Step-DnsServerSigningKeyRollover                   DnsServer

Function        Suspend-DnsServerZone                              DnsServer

Function        Sync-DnsServerZone                                 DnsServer

Function        Test-DnsServer                                     DnsServer

Function        Test-DnsServerDnsSecZoneSetting                    DnsServer

Function        Unregister-DnsServerDirectoryPartition             DnsServer

Function        Update-DnsServerTrustPoint                         DnsServer

Cmdlet          Get-AzureDns                                       Azure

Cmdlet          New-AzureDns                                       Azure

Cmdlet          Resolve-DnsName                                    DnsClient

Application     dns.exe

Application     dnscacheugc.exe

Application     dnscmd.exe

Application     dnsmgmt.msc

PowerShell модульный язык. И каждый командлет относится к определенному модулю. Вы можете устанавливать дополнительные модули, тем самым расширяя функционал. При установке большинства ролей Windows Server автоматически устанавливаются соответсвующие модули PowerShell. Нас интересуют команды относящиеся к модулю DnsServer

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

PS C:\Users\pnck> Get-Command -Module DnsServer

CommandType     Name                                               ModuleName

                                                   

Alias           Export-DnsServerTrustAnchor                        DnsServer

Function        Add-DnsServerConditionalForwarderZone              DnsServer

Function        Add-DnsServerDirectoryPartition                    DnsServer

Function        Add-DnsServerForwarder                             DnsServer

Function        Add-DnsServerPrimaryZone                           DnsServer

Function        Add-DnsServerResourceRecord                        DnsServer

Function        Add-DnsServerResourceRecordA                       DnsServer

Function        Add-DnsServerResourceRecordAAAA                    DnsServer

Function        Add-DnsServerResourceRecordCName                   DnsServer

Function        Add-DnsServerResourceRecordDnsKey                  DnsServer

Function        Add-DnsServerResourceRecordDS                      DnsServer

Function        Add-DnsServerResourceRecordMX                      DnsServer

Function        Add-DnsServerResourceRecordPtr                     DnsServer

Function        Add-DnsServerRootHint                              DnsServer

Function        Add-DnsServerSecondaryZone                         DnsServer

Function        Add-DnsServerSigningKey                            DnsServer

Function        Add-DnsServerStubZone                              DnsServer

Function        Add-DnsServerTrustAnchor                           DnsServer

Function        Add-DnsServerZoneDelegation                        DnsServer

Function        Clear-DnsServerCache                               DnsServer

Function        Clear-DnsServerStatistics                          DnsServer

Function        ConvertTo-DnsServerPrimaryZone                     DnsServer

Function        ConvertTo-DnsServerSecondaryZone                   DnsServer

Function        Disable-DnsServerSigningKeyRollover                DnsServer

Function        Enable-DnsServerSigningKeyRollover                 DnsServer

Function        Export-DnsServerDnsSecPublicKey                    DnsServer

Function        Export-DnsServerZone                               DnsServer

Function        Get-DnsServer                                      DnsServer

Function        Get-DnsServerCache                                 DnsServer

Function        Get-DnsServerDiagnostics                           DnsServer

Function        Get-DnsServerDirectoryPartition                    DnsServer

Function        Get-DnsServerDnsSecZoneSetting                     DnsServer

Function        Get-DnsServerDsSetting                             DnsServer

Function        Get-DnsServerEDns                                  DnsServer

Function        Get-DnsServerForwarder                             DnsServer

Function        Get-DnsServerGlobalNameZone                        DnsServer

Function        Get-DnsServerGlobalQueryBlockList                  DnsServer

Function        Get-DnsServerRecursion                             DnsServer

Function        Get-DnsServerResourceRecord                        DnsServer

Function        Get-DnsServerRootHint                              DnsServer

Function        Get-DnsServerScavenging                            DnsServer

Function        Get-DnsServerSetting                               DnsServer

Function        Get-DnsServerSigningKey                            DnsServer

Function        Get-DnsServerStatistics                            DnsServer

Function        Get-DnsServerTrustAnchor                           DnsServer

Function        Get-DnsServerTrustPoint                            DnsServer

Function        Get-DnsServerZone                                  DnsServer

Function        Get-DnsServerZoneAging                             DnsServer

Function        Get-DnsServerZoneDelegation                        DnsServer

Function        Import-DnsServerResourceRecordDS                   DnsServer

Function        Import-DnsServerRootHint                           DnsServer

Function        Import-DnsServerTrustAnchor                        DnsServer

Function        Invoke-DnsServerSigningKeyRollover                 DnsServer

Function        Invoke-DnsServerZoneSign                           DnsServer

Function        Invoke-DnsServerZoneUnsign                         DnsServer

Function        Register-DnsServerDirectoryPartition               DnsServer

Function        Remove-DnsServerDirectoryPartition                 DnsServer

Function        Remove-DnsServerForwarder                          DnsServer

Function        Remove-DnsServerResourceRecord                     DnsServer

Function        Remove-DnsServerRootHint                           DnsServer

Function        Remove-DnsServerSigningKey                         DnsServer

Function        Remove-DnsServerTrustAnchor                        DnsServer

Function        Remove-DnsServerZone                               DnsServer

Function        Remove-DnsServerZoneDelegation                     DnsServer

Function        Reset-DnsServerZoneKeyMasterRole                   DnsServer

Function        Restore-DnsServerPrimaryZone                       DnsServer

Function        Restore-DnsServerSecondaryZone                     DnsServer

Function        Resume-DnsServerZone                               DnsServer

Function        Set-DnsServer                                      DnsServer

Function        Set-DnsServerCache                                 DnsServer

Function        Set-DnsServerConditionalForwarderZone              DnsServer

Function        Set-DnsServerDiagnostics                           DnsServer

Function        Set-DnsServerDnsSecZoneSetting                     DnsServer

Function        Set-DnsServerDsSetting                             DnsServer

Function        Set-DnsServerEDns                                  DnsServer

Function        Set-DnsServerForwarder                             DnsServer

Function        Set-DnsServerGlobalNameZone                        DnsServer

Function        Set-DnsServerGlobalQueryBlockList                  DnsServer

Function        Set-DnsServerPrimaryZone                           DnsServer

Function        Set-DnsServerRecursion                             DnsServer

Function        Set-DnsServerResourceRecord                        DnsServer

Function        Set-DnsServerResourceRecordAging                   DnsServer

Function        Set-DnsServerRootHint                              DnsServer

Function        Set-DnsServerScavenging                            DnsServer

Function        Set-DnsServerSecondaryZone                         DnsServer

Function        Set-DnsServerSetting                               DnsServer

Function        Set-DnsServerSigningKey                            DnsServer

Function        Set-DnsServerStubZone                              DnsServer

Function        Set-DnsServerZoneAging                             DnsServer

Function        Set-DnsServerZoneDelegation                        DnsServer

Function        Show-DnsServerCache                                DnsServer

Function        Show-DnsServerKeyStorageProvider                   DnsServer

Function        Start-DnsServerScavenging                          DnsServer

Function        Start-DnsServerZoneTransfer                        DnsServer

Function        Step-DnsServerSigningKeyRollover                   DnsServer

Function        Suspend-DnsServerZone                              DnsServer

Function        Sync-DnsServerZone                                 DnsServer

Function        Test-DnsServer                                     DnsServer

Function        Test-DnsServerDnsSecZoneSetting                    DnsServer

Function        Unregister-DnsServerDirectoryPartition             DnsServer

Function        Update-DnsServerTrustPoint                         DnsServer

Команд достаточно много, для уточнения критериев возможно использовать сразу несколько параметров командлета. Давайте создадим новую зону. Для этого просмотрим все команды, которые работают с Зонами в DnsServer

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

PS C:\Users\pnck> Get-Command *Zone* -Module DnsServer

CommandType     Name                                               ModuleName

                                                   

Function        Add-DnsServerConditionalForwarderZone              DnsServer

Function        Add-DnsServerPrimaryZone                           DnsServer

Function        Add-DnsServerSecondaryZone                         DnsServer

Function        Add-DnsServerStubZone                              DnsServer

Function        Add-DnsServerZoneDelegation                        DnsServer

Function        ConvertTo-DnsServerPrimaryZone                     DnsServer

Function        ConvertTo-DnsServerSecondaryZone                   DnsServer

Function        Export-DnsServerZone                               DnsServer

Function        Get-DnsServerDnsSecZoneSetting                     DnsServer

Function        Get-DnsServerGlobalNameZone                        DnsServer

Function        Get-DnsServerZone                                  DnsServer

Function        Get-DnsServerZoneAging                             DnsServer

Function        Get-DnsServerZoneDelegation                        DnsServer

Function        Invoke-DnsServerZoneSign                           DnsServer

Function        Invoke-DnsServerZoneUnsign                         DnsServer

Function        Remove-DnsServerZone                               DnsServer

Function        Remove-DnsServerZoneDelegation                     DnsServer

Function        Reset-DnsServerZoneKeyMasterRole                   DnsServer

Function        Restore-DnsServerPrimaryZone                       DnsServer

Function        Restore-DnsServerSecondaryZone                     DnsServer

Function        Resume-DnsServerZone                               DnsServer

Function        Set-DnsServerConditionalForwarderZone              DnsServer

Function        Set-DnsServerDnsSecZoneSetting                     DnsServer

Function        Set-DnsServerGlobalNameZone                        DnsServer

Function        Set-DnsServerPrimaryZone                           DnsServer

Function        Set-DnsServerSecondaryZone                         DnsServer

Function        Set-DnsServerStubZone                              DnsServer

Function        Set-DnsServerZoneAging                             DnsServer

Function        Set-DnsServerZoneDelegation                        DnsServer

Function        Start-DnsServerZoneTransfer                        DnsServer

Function        Suspend-DnsServerZone                              DnsServer

Function        Sync-DnsServerZone                                 DnsServer

Function        Test-DnsServerDnsSecZoneSetting                    DnsServer

Логично предположить, что команда позволит создать новую основную зону называется Add-DnsServerPrimaryZone.

Справка

Но для того чтобы использовать ту или иную команду, необходимо знать, как ей пользоваться. В общем-то если вы даже не уверены в том, что выбранная команда вам подходит, вы всегда можете воспользоваться справкой. Для получения справки необходимо воспользоваться командой Get-Help, после которой указать имя интересующего вас командлета.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

PS C:\Windows\system32> Get-Help Add-DnsServerPrimaryZone

ИМЯ

    Add-DnsServerPrimaryZone

ОПИСАНИЕ

    Adds a primary zone to a DNS server.

СИНТАКСИС

    Add-DnsServerPrimaryZone [-Name] <String> [-ReplicationScope] <String> [[-DirectoryPartitionNam

    e] <String>] [-AsJob] [-CimSession <CimSession[]>] [-ComputerName <String>] [-DynamicUpdate <St

    ring>] [-LoadExisting] [-PassThru] [-ResponsiblePerson <String>] [-ThrottleLimit <Int32>] [-Con

    firm] [-WhatIf] [<CommonParameters>]

    Add-DnsServerPrimaryZone [-AsJob] [-CimSession <CimSession[]>] [-ComputerName <String>] [-Dynam

    icUpdate <String>] [-LoadExisting] [-PassThru] [-ResponsiblePerson <String>] [-ThrottleLimit <I

    nt32>] -NetworkId <String> -ZoneFile <String> [-Confirm] [-WhatIf] [<CommonParameters>]

    Add-DnsServerPrimaryZone [-ReplicationScope] <String> [[-DirectoryPartitionName] <String>] [-As

    Job] [-CimSession <CimSession[]>] [-ComputerName <String>] [-DynamicUpdate <String>] [-LoadExis

    ting] [-PassThru] [-ResponsiblePerson <String>] [-ThrottleLimit <Int32>] -NetworkId <String> [

    Confirm] [-WhatIf] [<CommonParameters>]

    Add-DnsServerPrimaryZone [-Name] <String> [-AsJob] [-CimSession <CimSession[]>] [-ComputerName

    <String>] [-DynamicUpdate <String>] [-LoadExisting] [-PassThru] [-ResponsiblePerson <String>] [

    -ThrottleLimit <Int32>] -ZoneFile <String> [-Confirm] [-WhatIf] [<CommonParameters>]

ОПИСАНИЕ

    The Add-DnsServerPrimaryZone cmdlet adds a specified primary zone on a Domain Name System (DNS)

     server.

    You can add an Active Directory-integrated forward lookup zone, an Active Directory-integrated

    reverse lookup zone, a file-backed forward lookup zone, or a file-backed reverse lookup zone.

ССЫЛКИ ПО ТЕМЕ

    Online Version: http://go.microsoft.com/fwlink/?LinkId=288144

    ConvertTo-DnsServerPrimaryZone

    Restore-DnsServerPrimaryZone

    Set-DnsServerPrimaryZone

ЗАМЕЧАНИЯ

    Для просмотра примеров введите: «get-help Add-DnsServerPrimaryZone -examples».

    Для получения дополнительных сведений введите: «get-help Add-DnsServerPrimaryZone -detailed».

    Для получения технических сведений введите: «get-help Add-DnsServerPrimaryZone -full».

    Для получения справки в Интернете введите: «get-help Add-DnsServerPrimaryZone -online»

Однако это лишь очень карткая справка. В ней вы найдете опсание команды и синтаксис. Для более подробной справки вы можете указать параметр ShowWindow командлета Get-Help

Get-Help Add-DnsServerPrimaryZone ShowWindow

После этого откроется отдельное окно со справкой по данному коммадлету.

Окно Get-Help

Окно справки Get-Help

Но обычно достаточно просто примеров для того чтобы понять как воспользоваться тем или иным командлетом. Параметр Examples командлета Get-Help отображает только примеры использования выбранного командлета.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

PS C:\Windows\system32> Get-Help Add-DnsServerPrimaryZone -Examples

ИМЯ

    Add-DnsServerPrimaryZone

ОПИСАНИЕ

    Adds a primary zone to a DNS server.

    Example 1: Create a primary zone

    PS C:\> Add-DnsServerPrimaryZone -Name «west01.contoso.com» -ReplicationScope «Forest» -PassThr

    u

    This command creates an Active Directory-integrated forward lookup zone called west01.contoso.c

    om with Forest-wide replication scope.

    Example 2: Create a file-backed primary zone

    PS C:\>Add-DnsServerPrimaryZone -Name «west02.contoso.com» -ZoneFile «west02.contoso.com.dns»

    This command creates a file-backed primary forward lookup zone called west02.contoso.com with t

    he specified DNS file.

    Example 3: Create a reverse lookup zone

    PS C:\>Add-DnsServerPrimaryZone -NetworkID «10.1.0.0/24» -ReplicationScope «Forest»

    ZoneName                            ZoneType        IsAutoCreated   IsDsIntegrated  IsReverseLo

    okupZone  IsSigned

                                             

      

    1.10.in-addr.arpa                   Primary         False           True            True

              False

    This command creates the Active Directory-integrated class C reverse lookup zone 0.1.10.in-addr

    .arpa with Forest-wide replication scope.

    Example 4: Create a file-backed reverse lookup zone

    PS C:\>Add-DnsServerPrimaryZone -NetworkID 10.3.0.0/24 -ZoneFile «0.3.10.in-addr.arpa.dns»

    This command creates the file-backed reverse lookup zone 0.3.10.in-addr.arpa.

Как видно для данного командлета имеется четыре примера.

Использование команд

Безусловно в статье введение в PowerShell необходимо продемонстрировать каким именно образом использовать команды. Я бы очень рекомендовал вам ознакомиться с видео уроком PowerShell где это отображено более наглядно.

Мы определились с синтаксисом команды из справки или просто нашли команду в каком-то руководстве.

В нашем случае отлично подходит второй пример из спрвки. Т.к. на мой компьютер не является контроллером домена мы будем создавать основную зону DNS в файле.

PS C:\Windows\system32> Add-DnsServerPrimaryZone -Name «Get-PowerShell.ru» -ZoneFile «getpowershell.ru.dns»

Не забывайте при этом использовать клавишу Tab при наборе командлета и его параметров. В данном примере я создаю зону Get-PowerShell.ru в файле getpowershell.ru.dns

Результат большинства командлетов по конфигурированию не выводится на экран. Поэтому при успешном выполнении вы получите приглашение командной строки для ввода следующей команды. Ну а если будет ошибка будет подробно описано в каком месте вы совершили ошибку.

Теперь нам нужно убедиться, что данная зона создана.

В большинстве случаев если вы определились с комадлетом для создания (изменения, просмотра) то существительное этого комадлета можно использоваться для просмотра, изменения, создания нужно просто поменять соответствующую глагольную часть на Get, Set, New соответственно.

Т.е. если, например, для просмотра профилей сетевых подключений вы использовали:

То для изменения вам достаточно поменять Get на Set, оставив существительное без изменения.

Но увы зоны DNS сервера этому правилу не сосуществуют. Поэтому для поиска команды которая выводит список зон, я снова мог воспользоваться команделтом Get-Command. Однако, я воспользовался перебором, используя клавишу Tab. Я набрал Get-DnsServer и щелкал клавишей Tab. Через несколько нажатий вывелась подходящая команда.

Далее я набрал дефис и начал нажимать клавишу Tab через некоторое количество нажатий у меня появился подходящий параметр ZoneName, после которого я указал название вновь созданной зоны.

PS C:\Windows\system32> Get-DnsServerZone -ZoneName «Get-PowerShell.ru»

ZoneName                            ZoneType        IsAutoCreated   IsDsIntegrated  IsReverseLookup

                                                                                    Zone

                                         

Get-PowerShell.ru                   Primary         False           False           False

Введение в PowerShell Pipeline или конвейер

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

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

Get-DnsServerZone -ZoneName ‘get-powershell.ru’ | Set-DnsServerPrimaryZone -DynamicUpdate none

В данном примере информация о зоне Get-PowerShell.ru была передана на вход команды Set-DnsServerPrimaryZone и у нее было изменено свойство динамического обновления.

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

Еще один сценарий использования конвейеров, это когда первый командлет возвращает список объектов, а второй или его сортирует, или выводит особым образом, или фильтрует. В этом случае второй командлет может обрабатывать любые объекты PowerShell. Об этом варианте чуть ниже.

PowerShell ISE – это среда разработки скриптов PowerShell. В ней реализован богатый функционал по созданию и отладке скриптов.

Фактически скрипт – это текстовый файл с разрешением ps1, в котором в каждой строчке записана команда PowerShell. Когда я писал статью Введение в PowerShell у меня не было цели научить писать скрипты, однако в моем блоге есть несколько статей про написание скриптов.

PowerShell ISE позволяет лишь ускорить, упростить процесс написания и отладки скрипта. ISE не обязателен к использованию.

Запустить PowerShell ISE можно из меню пуск или щелкнув правой кнопкой мыши по иконке PowerShell в панели задач.

Запуск PowerShell ISE

Запуск PowerShell ISE

В PowerShell ISE справа присутствует панель «Команды», которая позволяет не только быстро находить командлеты, но еще и в оконном режиме задавать их параметры.

Давайте попробуем найти команду, создающую записи для DNS зоны. Для этого в поле имя введем Recor.

Поиск команды в PowerShell ISE

Поиск команды в PowerShell ISE

Отобразиться список подходящих по критерию команд. Давайте добавим запись DNS, выбрав команду Add-DnsServerResourceRecord.

Далее нам нужно выбрать, запись типа A, ввести IP адрес, имя и зону.

Вставка команды в PowerShell ISE

Вставка команды в PowerShell ISE

Если нажать на кнопку «Вставить», то данные из окна преобразуются в команду PowerShell и команда вставляется рядом с курсором. У меня получилась данная команда:

Add-DnsServerResourceRecord -A -IPv4Address 127.0.0.2 -Name www -ZoneName get-powershell.ru

Давайте посмотрим те записи, которые есть в DNS сервере. Для этого в области консоли в PowerShell ISE начинаем набирать Get-DnsServer и ждем.

Должно открыться контекстное меню со списком подходящих командлетов, если этого не произошло жмем Ctrl+Пробел.

IntelliSence в PowerShell ISE

IntelliSence в PowerShell ISE

Далее выбираем Get-DnsServerResourceRecord и нажимаем Enter. PowerShell запросит значение для обязательного, но не указанного параметра

Ввод не указанного параметра PowerShell

Ввод не указанного параметра PowerShell

Отображение результатов

После указания данного параметра выведется список ресурсных записей в указанной зоне.

PS C:\Windows\system32> Get-DnsServerResourceRecord

Командлет Get-DnsServerResourceRecord в конвейере команд в позиции 1

Укажите значения для следующих параметров:

ZoneName: get-powershell.ru

HostName                  RecordType Timestamp            TimeToLive      RecordData                                        

                                                                             

@                         NS         0                    01:00:00        toshiba.                                          

@                         SOA        0                    01:00:00        [2][toshiba.][hostmaster.]                        

www                       A          0                    01:00:00        127.0.0.2                                        

Иногда необходимо отображать не все записи, а только необходимые. Тут возможны два варианта. Использовать возможности фильтрации командлета возвращающего результат. Яркий пример такого способа это Get-ADUser и его параметр Filter. Второй способ предполагает использования конвейера. О нем и пойдет речь.

Out-GridView командлет, который отображает объекты в виде отдельного окна. Позволяя фильтровать и сортировать их в удобном оконном интерфейсе. Правда больше вы ничего с этими объектами сделать не сможете. Давайте применим данный командлет к нашему списку DNS записей.

PS C:\Windows\system32> Get-DnsServerResourceRecord -ZoneName get-powershell.ru | Out-GridView

После чего мы видим отдельное окно.

Окно Out-GridView

Окно Out-GridView

Иногда приходится менять представление отображаемых объектов с табличного на список, со списка на табличный. Для этого можно использовать два командлета и их алиасы Format-List (fl) и Format-Table (ft). Я думаю примеров будет достаточно для понимания.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

PS C:\Windows\system32> Get-DnsServerResourceRecord -ZoneName ‘get-powershell.ru’ | Format-List

DistinguishedName : @

HostName          : @

RecordType        : NS

RecordClass       : IN

TimeToLive        : 01:00:00

Timestamp         : 0

RecordData        : toshiba.

DistinguishedName : @

HostName          : @

RecordType        : SOA

RecordClass       : IN

TimeToLive        : 01:00:00

Timestamp         : 0

RecordData        : [2][toshiba.][hostmaster.][1.00:00:00][01:00:00][00:15:00][00:10:00]

DistinguishedName : www

HostName          : www

RecordType        : A

RecordClass       : IN

TimeToLive        : 01:00:00

Timestamp         : 0

RecordData        : 127.0.0.2

PS C:\Windows\system32> Get-DnsServerResourceRecord -ZoneName ‘get-powershell.ru’ | fl

DistinguishedName : @

HostName          : @

RecordType        : NS

RecordClass       : IN

TimeToLive        : 01:00:00

Timestamp         : 0

RecordData        : toshiba.

DistinguishedName : @

HostName          : @

RecordType        : SOA

RecordClass       : IN

TimeToLive        : 01:00:00

Timestamp         : 0

RecordData        : [2][toshiba.][hostmaster.][1.00:00:00][01:00:00][00:15:00][00:10:00]

DistinguishedName : www

HostName          : www

RecordType        : A

RecordClass       : IN

TimeToLive        : 01:00:00

Timestamp         : 0

RecordData        : 127.0.0.2

PS C:\Windows\system32> Get-DnsServerResourceRecord -ZoneName ‘get-powershell.ru’ | Format-Table

HostName                  RecordType Timestamp            TimeToLive      RecordData                                        

                                                                             

@                         NS         0                    01:00:00        toshiba.                                          

@                         SOA        0                    01:00:00        [2][toshiba.][hostmaster.]                        

www                       A          0                    01:00:00        127.0.0.2                                        

PS C:\Windows\system32> Get-DnsServerResourceRecord -ZoneName ‘get-powershell.ru’ | ft

HostName                  RecordType Timestamp            TimeToLive      RecordData                                        

                                                                             

@                         NS         0                    01:00:00        toshiba.                                          

@                         SOA        0                    01:00:00        [2][toshiba.][hostmaster.]                        

www                       A          0                    01:00:00        127.0.0.2

Для фильтрации можно использовать командлет Where-Object или его алиасы Where и “?”. В самом простом синтаксисе использования Where-Object необходимо указать свойство объекта, операцию сравнения и сравниваемое значение.

PS C:\Windows\system32> Get-DnsServerResourceRecord -ZoneName ‘get-powershell.ru’ | Where-Object RecordType -eq ‘A’

HostName RecordType Timestamp TimeToLive RecordData

www A 0 01:00:00 127.0.0.2

Операции сравнения могут быть –eq (равно), -lt (меньше чем), -gt (больше чем), -like (сравнение со строкой) и другие.

Но иногда данного синтаксиса недостаточно и нужно использовать блок сравнения. Блок сравнения во многом похож на упрощенный вариант Where-Object, однако позволяет использовать несколько сравнений и более сложные регулярные выражения.

PS C:\Windows\system32> Get-DnsServerResourceRecord -ZoneName ‘get-powershell.ru’ | Where-Object {$_.RecordType -eq ‘A’}

HostName                  RecordType Timestamp            TimeToLive      RecordData                                        

                                                                             

www                       A          0                    01:00:00        127.0.0.2

Здесь $_ — это текущий элемент массива поступившего на вход команды Where-Object. А $_.RecordType – свойство RecordType текущего элемента.

Безусловно в рамках статьи введение в PowerShell невозможно в полной мере описать данный синтаксис, хотя вы можете углубиться и изучить мою статью использование в PowerShell Where, Where-Object, ?.

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

PS C:\Windows\system32> Get-DnsServerResourceRecord -ZoneName ‘get-powershell.ru’ | Where-Object {$_.RecordType -eq ‘A’} | Remove-DnsServerResourceRecord -ZoneName get-powershell.ru Force

  • Как ввести код продукта windows 10
  • Как в руфусе создать загрузочную флешку для установки windows 10
  • Как вводить ключ активации windows 7
  • Как в реестре удалить профиль пользователя windows 10
  • Как ввести код активации windows 10