Введение в оболочку командной строки Windows PowerShell. Как писать и как запускать скрипты PowerShell

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

1. Get-Help

Первый командлет, который должен знать каждый администратор, - это Get-Help. С его помощью можно получить справочную информацию по любой другой команде. Например, чтобы узнать полный синтаксис для команды Get-Process, можно воспользоваться следующей командой:

Get-Help -Name Get-Process

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

Get-Help -Name Get-*

2. Set-ExecutionPolicy

Хотя PowerShell предусматривает возможность создавать и выполнять сценарии, по умолчанию эта опция отключена, чтобы предотвратить исполнение вредоносного программного кода. Управлять разрешениями на выполнение сценариев можно с помощью команды Set-ExecutionPolicy. Доступны четыре уровня безопасности:

Restricted - выполнение сценариев запрещено. Эта опция установлена по умолчанию. Команды в таком случае можно выполнять только в интерактивном режиме.

All Signed - разрешено выполнение только сценариев, подписанных доверенным издателем.

Remote Signed - разрешено выполнение любых сценариев, созданных локально, а сценарии, созданные на удаленных системах, выполняются только в том случае, если подписаны доверенным издателем.

Unrestricted - разрешено выполнение абсолютно любых сценариев.

Чтобы применить определенную политику выполнения сценариев, можно воспользоваться командой Set-ExecutionPolicy с указанием имени политики. Например, разрешить неограниченное выполнение сценариев можно следующей командой:

Set-ExecutionPolicy Unrestricted

3. Get-ExecutionPolicy

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

4. Get-Service

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

5. ConvertTo-HTML

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

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

Get-Service | ConvertTo-HTML -Property Name, Status > C:\services.htm

6. Export-CSV

Отчеты можно сохранять не только в HTML, но и экспортировать в формат CSV для просмотра в Microsoft Excel. Синтаксис команды, которая применяется для этой цели, аналогичен ConvertTo-HTML. Обязательно следует указать имя файла для сохранения отчета. Например, экспортировать список служб в CSV-файл можно следующей командой:

Get-Service | Export-CSV c:\service.csv

7. Select-Object

При выполнении описанной выше команды CSV-отчет будет включать огромную массу информации, но иногда бывает полезно ограничить набор сведений. Сделать это можно с помощью команды Select-Object, которая позволяет указать, какие свойства должны быть включены в отчет. Например, чтобы создать CSV-отчет с перечислением имен и состояний всех системных служб, можно воспользоваться следующей командой:

Get-Service | Select-Object Name, Status | Export-CSV c:\service.csv

8. Get-EventLog

Команду Get-EventLog можно использовать для синтаксического анализа журналов событий. К ней предлагается целый ряд дополнительных параметров, но чтобы получить представление о том, как она работает, достаточно указать переключатель -Log и имя файла журнала. Например, посмотреть журнал какого-нибудь приложения, можно воспользоваться следующей командой:

Get-EventLog -Log "Имя приложения"

На практике эта команда применяется довольно редко. Чаще всего вместо нее используются другие команды, позволяющие отфильтровать данные и сохранить их в формате CSV или HTML.

9. Get-Process

Если команда Get-Service выводит список всех системных служб, то команда Get-Process позволяет получить список всех запущенных в данный момент процессов.

10. Stop-Process

Когда тот или иной процесс зависает, можно выяснить его имя или идентификатор с помощью команды Get-Process, а затем завершить процесс командой Stop-Process с указанием его имени или идентификатора. Например, процесс «Notepad.exe» для Блокнота можно завершить одной из следующих команд:

Stop-Process -Name notepad Stop-Process -ID 2668

Только не стоит забывать, что

В админиcтрировании всегда есть место творчеству. Хочешь сделать какую-нибудь автоматизацию рутинной задачи? Пожалуйста! Нужно что-то регулярно проверять на активность? Не вопрос! Хочешь обработать какой-нибудь гигантский отчет и вывести только актуальные данные? Тоже можно. Все эти и многие другие задачи лучше всего решать при помощи скриптов, и язык PowerShell в случае с Windows - оптимальный выбор.

Что такое PowerShell и чем он хорош

Пользователи UNIX и Linux, а с какого-то мoмента и macOS привыкли к тому, что под рукой всегда есть Bash - немного старомодное, но универсальное и мощное средство, при помощи которого всего парой строк можно творить удивительные вещи. Прописываешь новый скрипт в cron - и готово, он уже крутится на твоем компьютере или на сервере и незаметно делает что-нибудь полезное.

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

Windows PowerShell - это расширяемое средство автоматизации с открытыми исходниками, которое состоит из оболочки (командной строки) и скриптового языка. Впервые он был показан в 2003 году (тогда он назывался Monad). PowerShell 2.0 вышел в составе Windows 7 и Windows Server 2008 R2 и с тех пор присутствует в Windows в качестве стандартного компонента. Его даже включили в Windows XP SP3. PowerShell построен на основе.NET Framework и интегрирован с ним. PowerShell может обращаться к COM, WMI и ADSI, а также, конечно же, исполняет консольные команды.

В общем, «пошик» имеет крепкие связи с продуктами Microsoft, будь то Active Directory или почтовый сервер Exchange. Это позволяет без подключения к оснастке сервера обращаться к ним через консоль и отдaвать команды.

Если раньше ты не интересовался PowerShell, то, скорее всего, у тебя стоит вторая версия. Я рекомендую обновиться как минимум до третьей - она содержит куда больше возможностей и полезных фишек. Если не вдаваться в подробности, то в PowerShell 2.0 входит около десятка модулей и примерно 350 команд, а в PowerShell 3.0 уже около 2300 командлетов из более чем 70 модулей. «Хакер» также писал о том, чем отличается самый новый PowerShell пятой версии из Windows 10.

Выбираем среду разработки и инструменты

Теперь давай разберемся, где удобнее всего писать код. Можно, конечно, и в «Блокноте», Notepad++ или Sublime. Но это в данном случае не самый грамотный выбор редактора. Лучше всего начинать знакомство с PowerShell, вооружившись идущим в комплекте .


Это даже не редактор, а практически полноценная среда разработки. Здесь есть функция IntelliSense, которая позволяет просматривать перечень командлетов и их параметров, переменных, утилит и прочего. Поддерживаются сниппеты, есть возможность расширения нaбора функций за счет различных аддонов. Очень полезно и окно Commands. В нем можно составлять команды в визуальном режиме: выбираешь модуль, находишь нужный командлет и задаешь ему необходимые параметры. Получившуюся команду можно скопировать в консоль или сразу запустить на выполнение. В общем, этакий конструктор для админа. Ну и конечно, есть подсветка синтаксиса, дебаггер и многое другое.

Тем не менее у PowerShell ISE есть и достойные конкуренты. Один из них - .

PowerGUI - это визуальное дополнение к PowerShell. Оно упрощает сборку собственных сценариев до выбора необходимых командлетов. Берешь то, что нужно для решения задачи, и перетаскиваешь части кода, пока не получишь скрипт. Одна из главных фишек PowerGUI - это Power Packs, готовые скрипты, опубликованные сообществом пользователей и выложенные в свобoдный доступ. Тут есть и простенькие команды вроде добавления пoльзователей, и сложные - к примеру, управление свитчами и виртуальными машинaми. Все их легко дополнять и модифицировать в соответствии с нуждами.


Фирмы Sapien - бoлее продвинутая среда, которая рассчитана на совместную разработку одного проекта большим количеством участников. Если ты когда-нибудь имел дело с Visual Studio, то, думаю, заметишь сходство. Среди полезных фишек PowerShell Studio - панель Ribbon, поддержка удаленной отладки, а также функции компилятора, которые позволяют включить скрипты в исполняемые файлы. Есть поддержка разных версий PowerShell.


Стоит упомянуть и Script Browser для Windows PowerShell ISE. Это не среда разработки, но вeсьма интересный инструмент, разработанный в Microsoft. Script Browser открывает доступ к базе готовых скриптов, которые можно использовать в качестве образцов для написания своего кода. А еще эта штука умеет анализировать код, который ты пишешь, и подсказывает, как его улучшить.


Несколько полезных трюков

Разобравшись с редактором, можно приступать к написанию кода. PowerShell - несложный язык, и, я думаю, ты быстро разберешься, что к чему. Команды здесь называются командлетами, и каждый из них состоит из двух частей. Сначала идeт действие, например Get, Set, Add, Invoke, Remove. Затем указывается то, на что действие направлено: Service, VM, AzureAccount, DHCPServerSetting. Каждая часть отделяется от другой дефисом. Получается, к примеру, get-process. Это, кстати, полезная команда, которая выводит список процессов. Скажем, если написать

get - process BadTh *

увидим что-то такое:

Handles NPM (K ) PM (K ) WS (K ) VM (M ) CPU (s ) Id ProcessName

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

28 4 - 210844 - 201128 - 163 25.67 2792 BadThread

Теперь можно завершить зависший процесс:

Можно проcмотреть рекурсивно, правда уже чуть с более сложной логикой:

Можно также выполнить

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

Get - AdUser - Filter * - Properties OfficePhone | FT OfficePhone , UserPrincipalName

PowerShell в сравнении с bat

Иногда задачу можно решить как старым дедовским методом, так и при помощи PowerShell. Я рекомендую не лениться и использовать PS, хотя бы просто потому, что так ты его быстрее изучишь и сможешь применять в более сложных ситуациях. К тому же ты постепeнно оценишь его синтаксис - более элегантный и консистентный. Вот несколько примеров, как вещи делались раньше и как их можно сделать при помощи PowerShell.

Следующая командная строка перезагрузит компьютер с задержкой в десять секунд:

Вот так через bat можно перезагрузить службу dnscache (или любую другую):

sc stop dnscache

sc start dnscache

Изучение PowerShell — книги и ресурсы

Данная статья открывает цикл записей, посвященных PowerShell . Да, пришло время командной строки!

Кратко — что такое PowerShell?

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

Почему PowerShell?

Стоит отметить два момента. В первую очередь — PowerShell действительно содержит язык сценариев; это очень компактный язык, в состав которого входит всего лишь порядка двух десятков ключевых слов. Но на самом деле PowerShell, как было сказано выше, - это оболочка командной строки, во многом сходная с cmd.exe или с оболочкой UNIX Bash.

Второй момент: Microsoft не поощряет практику использования оснащенных графическим интерфейсом консолей на серверах. Дело в том, что серверы могут обеспечивать эффективное функционирование графических интерфейсов лишь за счет ухудшения производительности сервера. Но использование графического интерфейса на клиентах, даже если эти клиенты подключены к серверу, вполне допускается и сегодня. Так в новых версиях Windows Server все функции доступны в первую очередь с помощью PowerShell и только потом (а некоторые и вовсе недоступны) с помощью графического интерфейса сервера.

Загрузить PowerShell можно с сайта TechNet — но в современных ОС MS Winodws он доступен «из коробки».

Для более легкого старта в изучении Windows PowerShell представляю вашему вниманию подборку различных материалов. Начнем список с видео курса из далекого 2009 года:

  • Пишем первый сценарий и знакомимся с Windows PowerShell

Интернет ресурсы:

  • Mastering PowerShell — powershell.com

Программы:

  • Script Browser для Windows PowerShell ISE . Данное дополнение позволяет с легкостью отыскивать необходимые скрипты в TechNet Script Center по заданным критериям и параметрам. По мимо этого содержит специальный модуль Script Analyzer, который после анализа предлагает улучшения/изменения, повышающие эффективность написанного скрипта. Этот модуль можно получить в комплекте Windows PowerShell ISE которая является частью OC Windows. Загвоздка в том, что Windows Server и PowerShell ISE требуют активации. Лицензия сама по себе платная, но не стоит отчаиваться. У Вас будет порядка 180 дней что бы испытать данный продукт.
  • Dell PowerGUI — Позволяет упростить сборку собственных сценариев PowerShell до простого выбора необходимых командлетов, которые подходят для Вашей задачи, и перетаскивания их в нужные места. Идеально подходит для тех, кто являются новичком в работе с PowerShell, но имеете базовое понимание концепций. PowerGUI - простой в использовании редактор, который, вероятно, усовершенствует Ваше понимание сборки более сложных и усовершенствованных сценариев, особенно если Вы лучше всего усваиваете информацию визуально.

Один из самых основных источников знаний — прекрасная справка программы:

Надеюсь данный список ресурсов поможет Вам в изучении PowerShell . Какие книги и наработки использовали вы? Оставьте ответ в комментариях и удачи в освоении новых знаний! 😉

Опытные пользователи операционной системы Windows 10 могли слышать об утилите командной строки PowerShell. Также с ней могут быть знакомы имеющие опыт работы с Windows 7 и 8.1. После многих лет использования приложения командной строки Windows и файлов формата.bat пришло время познакомиться с более функциональным инструментом.

PowerShell является ценным пополнением списка инструментов Windows и его масштаб может отпугнуть некоторых пользователей. Что это — скриптовый язык или командная оболочка? Не стоит беспокоиться: несмотря на обширные возможности, освоить PowerShell по силам каждому.

Шаг 1: установка

Для начала нам необходима сама утилита PowerShell. Если вы работаете с Windows 10, у вас уже установлена версия PowerShell 5. Обновление Windows 10 Anniversary Update использует версию 5.1, но разница незаметна. В Windows 8 и 8.1 применяется PowerShell 4, чего тоже вполне достаточно. Установка PowerShell на Windows 7 не доставит проблем, но всё же пару лишних шагов придется сделать. В частности, нужно дополнительно установить.Net Framework. Можно установить Windows Management Framework, в состав которого входит PowerShell.

У PowerShell есть два интерфейса. Опытные пользователи могут выбрать полноценный графический интерфейс, известный как Integrated Scripting Environment (ISE). Новичкам лучше использовать консоль PowerShell, простой текстовый интерфейс в стиле командной строки Windows или даже DOS 3.2.

Для запуска PowerShell от имени администратора в Windows 10 нажмите на кнопку «Пуск» и прокрутите список приложений до Windows PowerShell. В Windows 8.1 ищите Windows PowerShell в папке System в Windows. В Windows 7 оболочка располагается в папке Accessories. В качестве обычного пользователя PowerShell можно запустить точно так же, используя левую кнопку мыши вместо правой.

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

Шаг 2: старые команды Windows

Синтаксис команд Windows в PowerShell работает привычным образом. Например, cd меняет папки, dir показывает список всех файлов и папок внутри текущей папки.

В зависимости от метода запуска консоли PowerShell можно начать в c:\Windows\system32 или в c:\Users\ . В примере на скриншоте используется команда cd .. (с пробелом) для перехода на один уровень вверх за раз, затем запускается команда dir для отображения списка файлов и папок в директории C:\ .

Шаг 3: установка файлов помощи

Команды вроде cd и dir не являются активными командами оболочки PowerShell. Это так называемые псевдонимы (aliases) — замены настоящих команд PowerShell. Псевдонимы удобны для тех, кто имеет большой опыт работы с командной строкой. Однако они не затрагивают глубин PowerShell.

Чтобы начать знакомиться с возможностями PowerShell, наберите help и нужную вам команду. На скриншоте показана команда .

Команда help говорит, что dir является псевдонимом команды PowerShell Get-ChildItem . Если набрать get-childitem в PS C:\> , увидите то же самое, что и при использовании команды dir .

Как указано внизу скриншота, файлы помощи для PowerShell не устанавливаются автоматически. Для их получения запустите PowerShell от имени администратора и наберите update-help . Установка файлов помощи займёт несколько минут, ряд модулей могут отсутствовать — например, в данном случае не установились Help for NetWNV и SecureBoot. Когда всё готово, полная система помощи всегда будет давать нужные подсказки.

Теперь наберите команду get-help и любую интересующую вас команду («cmdlet» на языке PowerShell, по-русски командлеты), будет показано её описание. Например, get-help get-childitem выдаёт список опций get-childitem . Также можно вывести разные возможные варианты. Например

get-help get-childitem -examples

выдает семь подробных примеров использования get-childitem . Команда

get-help get-childitem -detailed

включает в себя эти семь примеров и подробные разъяснения каждого параметра в командлете get-childitem .

Шаг 4: получение помощи по параметрам

На скриншоте вы могли заметить два списка под SYNTAX для get-childitem . Наличие двух разных синтаксисов означает возможность применения двух способов запуска командлет. Как держать синтаксис отдельно друг от друга и что означают параметры? Ответ простой, если знать трюк.

Для получения подробностей относительно параметров командлеты get-childitem или любой другой используйте параметр -full :

get-help get-childitem -full

Это выдает список того, что вы можете сделать с командлетой и что случится. Смотрите на скриншот.

Просмотр описания параметров позволяет заметить, что get-childitem даёт возможность получить объект child (вроде названия подпапки или имени файла) в указанном месте, с совпадением определённых символов или без. Например:

get-childItem “*.txt” -recurse

возвращает список файлов «*.txt» в текущей папке и всех подпапках (из-за параметра -recurse ). Тогда как

get-childitem “HKLM:\Software”

возвращает список всех ключей реестра верхнего уровня в HKEY_LOCAL_MACHINE\Software .

Если вы когда-нибудь пытались попасть в реестр при помощи командной строки Windows или файлов.bat, вы сможете оценить функциональность этого варианта доступа.

Шаг 5: изучение имён

Есть причина того, почему показанные до сих пор командлеты выглядят сходным образом: get-childitem, update-help, get-help используют единую схему глагол-существительное. Это соглашение применяют все командлеты PowerShell, в них глагол стоит перед единственным существительным. Это понравится тем, кто в своё время пострадал от непостоянства названий команд в языках VB и VBA.

Взгляните на самые распространенные командлеты:

set-location : устанавливает текущую рабочий локацию на определённую локацию

get-content : получает содержимое файла

get-item : получает файлы и папки

copy-item : копирует объект из одной локации в другую

remove-item : удаляет файлы и папки

: получает процессы, запущенные на локальном или удаленном компьютере

get-service : получает сервисы, запущенные на локальном или удаленном компьютере

invoke-webrequest : получает содержимое с веб-страницы в интернете

Для просмотра работы определённой командлеты используйте get-help как в случае

get-help copy-item -full

На основе описания в помощи можно понять, что необходимо командлете. Например, если вы хотите копировать все файлы и папки из Documents в c:\temp , используйте

copy-item c:\users\ \documents\* c:\temp

Введя эту команду, вы увидите несколько интересных возможностей окружения PowerShell. Например, если набрать copy-i и нажать кнопку Tab, PowerShell заполнит Copy-Item . Если неправильно набрать командлету и PowerShell не может распознать её, даётся полное описание того, что было сделано не так.

Попробуйте данную командлету:

invoke-webrequest askwoody.com

Вы получите краткий список заголовков, изображений, ссылок и прочего содержимого веб-страницы. Обратите внимание в get-help на список invoke-webrequest , который «возвращает коллекцию форм, ссылок, изображений и прочие важные элементы HTML» — именно то, что должно показываться на экране.

Некоторые командлеты помогают управлять самим PowerShell:

get-command : список всех доступных командлет

get-verb : список всех доступных глаголов

clear-host : очистка экрана программы-хоста

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

get-command *-service

Будут показаны все глаголы, доступные с существительным service . Вот их список:

Get-Service

New-Service

Restart-Service

Resume-Service

Set-Service

Start-Service

Stop-Service

Suspend-Service

Можно объединять эти командлеты с другими.

Шаг 6: использование труб

Если вы знакомы с командной строкой Windows или пакетными файлами, то знаете о перенаправлении и трубах. Перенаправление (символ >) и трубы (символ |) берут результат действия и прикрепляют его в другое место. Например, можно перенаправить результат команды dir в текстовый файл или передать результат команды ping в команду find для фильтрования интересных результатов, вроде

dir > temp.txt

ping askwoody.com | find “packets” > temp2.txt

Здесь во второй команде find ищет строку packets , взятую из адреса askwoody.com командой ping и объединяет все совпадающие строки в файл под названием temp2.txt .

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

ping askwoody.com | select-string packets | out-file temp2.txt

Использования перенаправления и труб значительно расширяет возможности командной строки Windows: вместо бесконечного прокручивания вниз по экрану в поиске текстовой строки можно отфильтровывать нужные команды Windows.

Powershell обладает поддержкой pipe , причём она не ограничена текстом. PowerShell позволяет передавать целый объект из одной командлеты в другую, где объект представляет собой комбинацию данных (называемых свойствами) и действий (методов), которые могут использовать эти данные.

Сложная часть начинается при выстраивании объектов. Поставляемые одним командлетом объекты должны совпадать с типом объектов, принимаемых получающим командлетом. Текст является весьма простым типом объектов, так что если вы работаете с текстом, выравнивание объектов является простой задачей. Остальные объекты не такие элементарные.

Как это понять? Используйте командлету get-member . Если вы хотите знать, какой тип объекта обрабатывает командлета, проведите её через get-member . Например, если вы пытаетесь понять запущенные на компьютере процессы и сузили опции до командлеты , вот как узнать результат командлеты:

get-process | get-member

Запуск этой командлеты выдаёт длинный список свойств и методов для , но в самом начале списка можно увидеть тип объекта, который создает :

TypeName: System.Diagnostics.Process

Нижеприведенный скриншот также показывает свойства под названием get-process Handles, Name, NPM, PM, SI, VM и WS .

Если вы хотите манипулировать результатом для работы с этим командлетом (вместо отображения длинного списка активных процессов на мониторе), нужно найти другую команду, которая в качестве вводных данных принимает System.Diagnostics.Process . Для поиска нужной командлеты снова используйте возможности PowerShell:

get-command -Parametertype System.Diagnostics.Process

Эта командлета выдает список командлет, которые могут обрабатывать System.Diagnostics.Process .

Некоторые командлеты известны тем, что принимают почти любой вид данных. Главной среди них является . Эта командлета пропускает через себя каждый посылаемый по трубе объект, один за одним, и применяет к нему заданной критерии выбора. Существует специальный маркер под названием $_ , который позволяет использовать каждый предмет в трубе, один за раз.

Допустим, вы хотите получить список всех запущенных на компьютере процессов с названием «svchost», то есть хотите сопоставить свойство Name процессу svchost . Используйте команду:

get-process | where-object {$_.Name -eq “svchost”}

Командлета смотрит на каждый объект System.Diagnostics.Process , сравнивает .Name этого объекта с «svchost»; если есть совпадения, они выдаются на монитор. Смотрите на скриншот.

Шаг 7: анализ полезных команд PowerShell

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

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

Get-AppXPackage | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “$($_.InstallLocation)\AppXManifest.xml”}

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

Вот как работает данная команда. Get-AppXPackage проверяет все пакеты приложений в профиле пользователя. Даже если вы удалили приложение, оно остается в списке профиля пользователя.

Командлета Get-AppXPackage возвращает объект TypeName Microsoft.Windows.Appx.PackageManager.Commands.AppxPackage , который включает в себя полное имя пакета приложения и местонахождения соответствующего файла манифеста XML. Если запустить командлету get-appxpackage , вы увидите длинный список пакетов приложений. Скриншот показывает описание приложения Xbox.

Командлета Foreach посредством цикла проходит через каждый объект в AppXPackage , отправляя их командлету Add-AppxPackage . Согласно get-help для Add-AppxPackage , тут есть два ключевых переключателя:

  • Переключатель -Register используется для регистрации существующих установок пакетов приложений, можно задать параметры DisableDevelopmentMode и Register
  • Переключатель -DisableDevelopmentMode говорит Windows заново зарегистрировать существующий пакет приложения, который был отключён, не зарегистрирован или повреждён.

Строка «$($_.InstallLocation)\AppXManifest.x ml» описывает, где расположен файл manifest.xml . Если посмотреть на файлы AppXManifest.xml , вы увидите сложный список идентификаторов приложений, исполняемых файлов и большое количество визуальных элементов, связанных с приложением.

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

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

Что способствовало появлению Windows PowerShell?

До появления PowerShell существовали (и существуют ) следующие инструменты для автоматизации и администрирования сервисов: командная строка Windows и Windows Script Host. Но у этих технологий есть недостатки.

У командной строки Windows есть и возможность выполнять какие-то административные задачи и возможность записать алгоритм действий, сохранив его в виде скрипта (bat-файла), при этом можно использовать некие элементы программирования, например, использовать переменные, условные конструкции и даже что-то вроде циклов.

Большинство программных продуктов имеет консольный интерфейс, т.е. мы можем управлять программой, используя командную строку, при этом экономя ресурсы за счет отсутствия затрат на работу графического интерфейса. Компания Microsoft для серверной операционной системы Windows Server даже выпускает редакции без графического интерфейса (Server Core, в Windows Server 2016 даже есть Nano Server ), но всего этого недостаточно, так как возможности командной строки ограничены, т.е. написать какую-то сложную логику для автоматизации чего-либо мы не сможем, а если и сможем, то на это нам потребуется время и знания.

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

Технология Windows Script Host позволяет выполнять все административные задачи, что и командная строка, включая их автоматизацию путем написания WSH скриптов , но здесь мы уже можем использовать полноценные языки программирования (VBScript и JScript ), т.е. можно реализовывать сложную логику и алгоритмы. К тому же с помощью WSH мы управляем программными продуктами через объектный интерфейс, другими словами Windows Script Host намного «круче » чем командная строка. Но данная технология также не стала тем идеальным инструментом администрирования и автоматизации этого администрирования для системных администраторов, так как Windows Script Host требовал знаний вышеперечисленных языков программирования, что для системных администраторов на самом деле лишнее. Администраторам нужно всего лишь простой инструмент администрирования с возможностью запрограммировать какие-то действия, а углубляться в объектные модели программных продуктов на языках программирования VBScript и JScript им не хочется.

В итоге компании Microsoft необходимо было разработать такой инструмент администрирования для системных администраторов, который бы на 100 процентов удовлетворял все потребности сисадминов как в плане возможностей администрирования и автоматизации, так и в плане удобства и простоты использования, таким образом, появился Windows PowerShell.

Что такое Windows PowerShell?

Windows PowerShell – это язык сценариев и командная оболочка Windows, которые разработаны для администрирования и конфигурирования операционных систем Windows. PowerShell разработан на основе среды CRL и платформы.NET Framework и в отличие от командной строки, которая принимает и возвращает текст, Windows PowerShell работает с объектами. У каждого объекта в PowerShell есть свойства и методы, которые можно использовать для управления этими объектами.

В Windows PowerShell Microsoft разработала концепцию командлетов (cmdlets ), которая представляет собой систему именования команд «Глагол-Существительное ». Данная система позволяет системным администраторам быстрей освоить и упростить работу с PowerShell.

С помощью Windows PowerShell можно:

  • Получать доступ к файловой системе;
  • Управлять реестром;
  • Управлять службами;
  • Управлять процессами;
  • Настраивать операционную систему;
  • Устанавливать программное обеспечение;
  • Устанавливать роли и компоненты сервера;
  • Осуществлять администрирование и конфигурирование ролей и компонентов сервера;
  • Писать и использовать сценарии для автоматизации управления и администрирования;
  • Выполнять другие задачи системных администраторов.

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

Также для удобства многие часто используемые команды и утилиты в PowerShell имеют синонимы (Alias ), например cls - это синоним командлета Clear-Host, dir синоним Get-ChildItem (полный список синонимов можно посмотреть путем запуска командлета Get-Alias ).

Для упрощения поиска нужной команды в PowerShell есть специальный командлет Get-Command, с помощью которого можно осуществлять поиск, как по глаголу, так и по существительному. Все команды в Windows PowerShell сгруппированы в модули (например, Hyper-V, NetTCPIP ), что также упрощает поиск нужной команды.

После того как нужная команда найдена, можно посмотреть инструкцию по работе с этой командой, т.е. справку, для этих целей есть специальный командлет Get-Help, например следующая команда покажет справку по командлету Get-Command:

Get-Help Get-Command

Справка в Windows PowerShell может быть краткой, детальной (параметр -Detailed ), полной (параметр -Full ), а также можно выводить только примеры (параметр - Examples ). Следующая команда покажет только примеры использования командлета Get-Command:

Get-Help Get-Command -Examples

Справка PowerShell обновляемая, т.е. ее можно обновить командой Update-Help.

Версии Windows PowerShell

Первая версия PowerShell 1.0 появилась 14 ноября 2006 года и выпускалась в виде отдельного дистрибутива, который можно было установить на следующие версии операционных систем Windows: Windows XP Service Pack 2, Windows Server 2003 Service Pack 1 и Windows Vista.

В Windows Server 2008 PowerShell 1.0 поставлялся в виде компонента, который также нужно было устанавливать.

Начиная с Windows 7 и Windows Server 2008 R2, PowerShell поставляется как неотъемлемый компонент системы (т.е. предустановленный, устанавливать его не надо ). Ниже представлена таблица соответствия версии PowerShell и версии операционной системы Windows (т.е. какая версия PowerShell по умолчанию установлена в той или иной версии Windows ):

Версия PowerShell Версии Windows
PowerShell 2.0 Windows 7, Windows Server 2008 R2
PowerShell 3.0 Windows 8, Windows Server 2012
PowerShell 4.0 Windows 8.1, Windows Server 2012 R2
PowerShell 5.0 Windows 10, Windows Server 2016

С каждой новой версией PowerShell становится все более мощным инструментом администрирования, для сравнения в первой PowerShell было около 130 командлетов, а в PowerShell 5.0 их уже более 600!

Узнать текущую версию PowerShell можно с помощью свойства PSVersion встроенной переменной $PSVersionTable, например, выполните следующую команду:

$PSVersionTable.PSVersion

Или запустите командлет

Get-Variable -Name PSVersionTable –ValueOnly

где, значение PSVersion и будет версией PowerShell.

Язык PowerShell

PowerShell – это объектно-ориентированный скриптовой язык программирования. Он используется для написания команд управления всеми компонентами операционной системы Windows в оболочке Windows PowerShell, а также для написания сценариев автоматизации задач администрирования в интегрированной среде сценариев Windows PowerShell (ISE). Язык PowerShell хоть и создан для задач администрирования, он является полноценным скриптовым языком программирования, так как имеет программные конструкции, которые присутствуют в каждом языке программирования, такие как: условия, циклы, обработка ошибок, работа с переменными, объектами, массивами.

Язык PowerShell имеет единый синтаксис написания команд и структуру именования этих команд по принципу «Глагол-Существительное », что делает данный язык интуитивно понятным как для программистов, так и для системных администраторов.

Оболочка Windows PowerShell

Оболочка Windows PowerShell – это среда выполнения команд и сценариев на языке PowerShell. Данная оболочка имеет те же возможности что и командная строка такие как: хранение истории выполнения команд, настройка внешнего вида оболочки, завершение выполнения команд сочетанием клавиш Ctrl+C, а также много других возможностей, которых нет в оболочке командной строки, например такая замечательная возможность как «подсветка синтаксиса » (появилась в PowerShell 5.0 ).

Запустить оболочку PowerShell можно несколькими способами, например:

  • Из командной строки, набрав PowerShell;
  • Через диалоговое окно «Выполнить » (сочетание клавиш Win+R ), также набрав PowerShell;
  • В Windows 7 - Пуск->Все программы ->Стандартные ->Windows PowerShell -> Windows PowerShell;
  • В Windows 8.1 или Windows Server 2012 R2 - Пуск->Все программы ->Служебные ->Windows PowerShell;
  • В Windows 10 или Windows Server 2016 - Пуск->Все программы -> Каталог Windows PowerShell (в группе W ) -> Windows PowerShell.

Пример запуска PowerShell в Windows Server 2016

Скриншот оболочки PowerShell в Windows Server 2016

Командлеты в PowerShell

Командлет (cmdlet ) – это команда Windows PowerShell, с помощью которой можно осуществлять взаимодействие с объектами операционной системы с целью их управления. Данные команды являются частью языка PowerShell. Командлеты построены по принципу «Глагол-Существительное », разделенные дефисом (-); другими словами, мы сначала указываем, что делать, а через дефис - над чем. Например, командлет Get-Help, где Get - это глагол, означающий «Получить », а Help - существительное «Помощь » в контексте PowerShell «Показать – Справку ». Командлеты PowerShell возвращают результаты в виде объектов, что является одним из главных отличий от командной строки Windows, в которой команды возвращают только текст на экран.

Кроме командлетов на получение данных (Get), существуют и такие типы командлетов как:

  • Add – добавление данных;
  • Clear – очистить;
  • Enable – включить;
  • Disable – выключить;
  • New – создать;
  • Remove – удалить;
  • Set – задать;
  • Start - запустить;
  • Stop – остановить;
  • Export – экспортировать;
  • Import – импортировать;
  • И еще много других.

Полный список командлетов в Windows PowerShell можно посмотреть с помощью специального командлета Get-Command. Например, запустите его с параметром -CommandType cmdlet, в итоге на экране у Вас отобразится список командлетов.

Get-Command -CommandType cmdlet

Как Вы уже поняли, у командлетов есть параметры, с помощью которых мы можем конкретизировать действия командлета. Параметры бывают обязательные и необязательные, например, у командлета Get-Command обязательных параметров нет.

Ниже на картинке представлен способ поиска командлета по глаголу (параметр Verb ). В данном случае у нас отобразился список командлетов, которые умеют что-то перезапускать.

Команда

Get-Command -Verb Restart

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

Команда

Get-Command -Noun Service

Если Вы не нашли нужный командлет по полному названию можете использовать маску в формате *Текст*.

Конвейер в PowerShell

Одной из главных возможностей Windows PowerShell является возможность использования конвейера при выполнении команд.

Конвейер – это передача результата работы командлета через вертикальную черту (|) другому командлету. При этом, как Вы помните, в PowerShell командлеты работают с объектами и возвращают объекты, соответственно по конвейеру передаются также объекты.

С помощью конвейера можно выполнять сложные задачи простым и удобным способом без необходимости написания сложных алгоритмов и сценариев.

Например, давайте узнаем название самого большого файла в каталоге «C:\Windows\System32» (простой пример конвейера ).

Команда

Get-ChildItem -Path "C:\Windows\System32" -File | Sort-Object length -Descending | Select-Object -First 1

  • Get-ChildItem – командлет получения объектов в указанном каталоге;
  • Sort-Object – командлет для сортировки объектов, в нашем случае мы сортируем по размеру файла (length -Descending );
  • Select-Object – командлет выбора нужных свойств объекта, в нашем случае мы выводим стандартные поля и только самый первый объект, т.е. большой файл (параметр -First 1 ).

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

Фоновое исполнение заданий

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

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

В Windows PowerShell для работы с фоновыми заданиями есть следующие командлеты:

  • Start-Job – запустить фоновую задачу;
  • Stop-Job – остановить фоновую задачу
  • Get-Job – посмотреть список фоновых задач;
  • Receive-Job – посмотреть результат выполнения фоновой задачи;
  • Remove-Job – удалить фоновую задачу;
  • Wait-Job – перевести фоновую задачу на передний план, для того чтобы дожидаться ее окончания.

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

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

Запуск задачи в фоновом режиме

Start-Job {Get-Service}

Смотрим на список задач запущенных в фоновом режиме

Отображаем результат работы задания Job1

Receive-Job Job1

Как видим, у нас появилась задача со статусом «Completed », т.е. она уже выполнилась (просто Get-Service отрабатывает быстро ).

Для того чтобы посмотреть результат работы фоновой задачи, т.е. командлета Get-Service, мы выполнили команду Receive-Job и передали ей имя задания (можно и значение идентификатора ). В результате у нас отобразился список служб.

Удаленное управление на PowerShell

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

Существует несколько способов удаленного управления:

  • С помощью параметра –ComputerName (есть у многих команд ). Другими словами Вы передаете имя компьютера, на котором необходимо выполнить команду, в качестве параметра. Способ обладает недостатком, так как ограничивается выполнением одной команды;
  • С помощью сессий. Командлет Enter-PSSession (интерактивный сеанс ). Таким способом Вы подключаетесь к удаленному компьютеру и все команды, которые Вы будете набирать в оболочке PowerShell, будут выполняться на удаленном компьютере так же, как если бы Вы набирали команды непосредственно на удаленном компьютере. Способ также обладает недостатком, так как сеанс ограничивается одним компьютером;
  • С помощью командлета Invoke-Command . С помощью данного способа можно выполнять команды или сценарии как на одном компьютере, так и на нескольких.

Например, чтобы подключиться к удаленному компьютеру (в примере ниже ServerName ) интерактивным сеансом выполните следующую команду:

Enter-PSSession ServerName

Сценарии, функции и модули в Windows PowerShell

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

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

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

Важно!

По умолчанию выполнение сценариев в Windows запрещено! Для того чтобы посмотреть политику выполнения сценариев выполните командлет Get-ExecutionPolicy . В результате он вернет действующую политику, например:

  • Restricted – блокируется выполнение любых сценариев (значение по умолчанию );
  • AllSigned – разрешено выполнение сценариев, которые имеют цифровую подпись;
  • RemoteSigned – разрешено выполнение локальных сценариев, все скачанные сценарии должны иметь цифровую подпись;
  • Unrestricted - разрешено выполнение любых сценариев (не рекомендуется, так как небезопасно! ).

Для разрешения выполнения сценариев необходимо использовать командлет Set-ExecutionPolicy с одним из вышеперечисленных параметров.

Например, для разрешения выполнения локальных сценариев выполним следующую команду, и согласимся с внесением изменений, нажав Y.

Set-ExecutionPolicy RemoteSigned

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

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

Для этого необходимо указать ключевое слово Function и затем в фигурных скобках {} написать алгоритм работы этой функции, т.е. набор команд (например, какая-нибудь часто используемая процедура: создать пользователя с определенными правами, очистить определенные каталоги и так далее ). Потом необходимо сохранить все это в сценарий, но только уже с расширением.psm1, так как этот файл будет являться уже модулем.

Это еще не все, этот файл необходимо поместить в каталог, в котором PowerShell ищет модули. Таких каталогов несколько (специальный каталог в профиле пользователя, каталог, где установлен PowerShell ), их можно посмотреть в переменных окружения PowerShell. Для этого выполните следующую команду

Get-ChildItem Env:\PSModulePath | Format-Table -AutoSize

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

Интегрированная среда сценариев Windows PowerShell (ISE)

Для того чтобы было удобно писать сценарии, функции и соответственно модули, компания Microsoft разработала специальную графическую программу Integrated Scripting Environment (ISE) - интегрированная среда сценариев. Работать в этой программе очень удобно, к тому же она имеет мощный функционал (создание множества вкладок со сценариями, область вывода, встроенный отладчик и другое ).

Запустить ее можно следующим образом:

  • В Windows 7 - Пуск->Все программы ->Стандартные ->Windows PowerShell -> Windows PowerShell ISE;
  • В Windows 10 или Windows Server 2016 - Пуск->Все программы -> Каталог Windows PowerShell (в группе W ) -> Windows PowerShell ISE.

Примечание! ISE не будет работать на системе Windows Server, установленной в варианте Server Core.

Скриншот интегрированной среды сценариев PowerShell (ISE) в Windows Server 2016

На этом у меня все, надеюсь, материал был Вам полезен! Удачи!



Рекомендуем почитать

Наверх