Домой / Faq / Powershell: как работать с программой, создавать, запускать и изменять скрипты. Как писать и как запускать скрипты PowerShell

Powershell: как работать с программой, создавать, запускать и изменять скрипты. Как писать и как запускать скрипты PowerShell

В наши дни с оболочкой Windows PowerShell знакомы уже едва ли не все администраторы. Многие загружали ее, экспериментировали с ней и решали нестандартные задачи, которые иногда выполняют в командной оболочке Windows через cmd.exe. Однако PowerShell - нечто гораздо большее, чем просто DOS-подобная командная оболочка. Это среда для работы с командной строкой и выполнения сценариев, построенная на основе Microsoft .NET Common Language Runtime (CLR) и.NET Framework. В среде PowerShell вы работаете с объектами.NET. Структуры папок, которые вы видите, или службы, к которым обращаетесь, в сущности, являются экземплярами объектов, которые представляют эти папки и службы; в этом и состоит отличие рассматриваемого продукта от других командных оболочек, которые способны только обрабатывать тексты. Таким образом, PowerShell по своей мощности и эффективности намного превосходит традиционные командные оболочки.

Чтобы помочь читателям воспользоваться всеми достоинствами данного инструмента, я подготовил серию статей, разъясняющих, как решать различные задачи с помощью PowerShell. На первом «уроке» я расскажу о том, как приступить к использованию PowerShell и как выполнять базовые команды. Кроме того, я разъясню, как получать справочную информацию в среде PowerShell при создании этих команд и как использовать в командах псевдонимы.

Первые шаги

Сейчас PowerShell не поставляется с Windows, но начиная с версии Windows Server 2008 положение изменится. Ссылки на ресурсы, где можно загрузить PowerShell, а также сведения об этой оболочке доступны на Web-странице Windows PowerShell (www.microsoft.com/powershell). Перед загрузкой PowerShell необходимо установить на своей системе среду.NET Framework 2.0. Процесс установки PowerShell не занимает много времени и не представляет трудностей. Нужно только позаботиться о том, чтобы устанавливаемая версия PowerShell была совместима с используемой операционной системой. Microsoft выпускает версии для Windows Server 2008 beta 3, Windows Vista, Windows XP SP2 и Windows Server 2003. При подготовке данной статьи я пользовался версией PowerShell для Windows XP.

По завершении установки оболочки PowerShell можно сразу приступать к работе. Для запуска PowerShell в меню Start требуется выбрать пункт All Programs, затем выделить пункты Windows PowerShell 1.0 и Windows PowerShell. При появлении окна PowerShell в командной строке отображается текущая рабочая папка (на моей системе это каталог C). Теперь можно приступать к написанию и выполнению команд PowerShell.

Работа с командами

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

В оболочку PowerShell встроено свыше 100 команд. Можно создавать дополнительные команды, но при этом следует пользоваться языком стандарта.NET, таким как Visual Basic .NET или C#. В статьях о PowerShell речь будет идти только о встроенных командах. Каждый вариант команды представляет собой комбинацию «глагол-существительное»; объясняется это тем, что специалисты Microsoft хотели использовать единообразную схему именования и тем самым облегчить изучение, а также расширение оболочки PowerShell. Глагол указывает на действие, которое предстоит совершить, а существительное - на тип объекта, на который будет направлено действие. К примеру, команда Get-ChildItem считывает список элементов текущего рабочего каталога или контейнера, например реестра. Для выполнения команды нужно ввести ее в командной строке PowerShell и нажать клавишу ввода. Результаты отображаются под командной строкой. Вот и все, что требуется знать о выполнении элементарных команд.

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

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

В комплект поставки PowerShell входит набор справочных файлов, к которым пользователь может обращаться напрямую из командного окна PowerShell с помощью команды Get-Help. Для получения справочной информации о той или иной команде нужно задействовать команду Get-Help с параметром -name. Вслед за этим параметром необходимо указать имя команды, информацию о которой требуется получить. Подобно параметрам команд процессора cmd.exe, параметры команд PowerShell предоставляют сведения, необходимые командам для выполнения их работы. Но в отличие от параметров команд в среде cmd.exe (которые могут начинаться с дефиса, косой черты или вообще не иметь предваряющего символа), параметры команд PowerShell всегда начинаются с дефиса, что служит еще одним подтверждением последовательности схемы именования, применяемой в PowerShell.

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

Get-Help -name Get-Content

Как показано на экране 2, эта команда возвращает описание команды и сведения о синтаксисе. Команда возвращает содержимое элемента, которое в данном случае указывает на любой тип файла в системе. В прошлом администратору, возможно, пришлось бы воспользоваться командой For для работы с пакетными файлами или объектом File-SystemObject в сценарии Windows Script Host (WSH), но в среде PowerShell необходимо просто выполнять команду Get-Content. Чтобы получить более подробную информацию о синтаксисе, нужно добавить к команде параметр -full.

Get-Help -name Get-Content -full

Отметим, что параметр -full не принимает соответствующего значения. Параметры этого типа называются параметрами-переключателями, поскольку они как бы переключают линию поведения команд.

На экране 3 показана часть сведений, возвращенных этой командой. Администратору нужно будет прокрутить на своем компьютере окно или изменить его размеры так, чтобы можно было просмотреть все содержимое. В разделе PARAMETERS содержится информация, необходимая для того, чтобы включать в команду параметры. Обратите внимание на две важные категории информации для каждого параметра: Required и Position.

Сведения категории Required указывают на то, является данный параметр обязательным или факультативным. Когда переменная Required имеет значение true, параметр нужно включать в команду. Если же переменной Required задано значение false, данный параметр является факультативным.

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

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

Get-Content c:sample.txt

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

В разделе PARAMETERS за именем каждого параметра следуют сведения, заключенные в угловые скобки (). Эти сведения указывают на тип данных, к которому должно относиться значение параметра. Как показано на экране 3, значение параметра -path должно быть строковым. Если за строкой слов следует набор скобок (), это означает, что в качестве значения параметра можно использовать строковый массив.

В случае использования параметров-переключателей, которые не принимают значений, данные будут иметь тип read. С таким типом данных определяется, к примеру, параметр -force команды Get-Content. Данный параметр отменяет ограничения, которые могли бы воспрепятствовать выполнению команды. Отмена происходит лишь в тех случаях, когда параметр включается в команду.

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

Get-Content c:sample.txt -force

эквивалентна команде

Get-Content c:sample.txt -fo

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

Получение справок по концепциям

В комплект поставки PowerShell входит набор справочных файлов, содержащих обзоры различных концепций. Каждый файл начинается с символов «about_» и заканчивается именем раздела. Для просмотра алфавитного списка разделов about запустите команду

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

Get-Help about_flow_control

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

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

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

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

Если нужно просмотреть псевдонимы, ассоциированные с той или иной командой, точнее определите команду Get-Alias. К примеру, чтобы просмотреть псевдонимы, ассоциированные с Get-ChildItem, выполните команду

Get-Alias |
Where-Object {$_.definition `
–match «Get-ChildItem»}

Эта команда включает в себя несколько элементов, о которых я подробно расскажу на следующих уроках. Пока же необходимо знать только следующее: выходные данные команды Get-Alias направляются в команду Where-Object, где отфильтровываются все результаты, не соответствующие Get-ChildItem. Если вы хотите познакомиться с псевдонимами, выделенными для другой команды, замените имя Get-ChildItem именем этой команды.

Как показано на экране 5, PowerShell включает три псевдонима для обращения к команде Get-ChildItem, это gci, ls и dir. Вместо имени команды можно использовать любой из них. Таким образом, каждая из четырех следующих команд выдает список содержимого каталога C:Windows:

Get-ChildItem c:windows
dir c:windows
ls c:windows
gci c:windows

Для создания псевдонима в рамках текущего сеанса пользуйтесь командой Set-Alias. К примеру, чтобы создать псевдоним cnt для обращения к Get-Content, выполните команду

Set-Alias cnt Get-Content

После этого всякий раз, когда потребуется выполнить команду Get-Content, вы сможете использовать псевдоним cnt. Этим псевдонимом можно будет пользоваться до завершения сеанса (т.е. до закрытия оболочки PowerShell). Учтите, что при определении псевдонима возможность включения параметров не предусмотрена; можно использовать только имя команды. Если же вы хотите определить ссылку на команду и на ее параметры, следует создать специальную функцию.

Перспективы

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

Роберт Шелдон ([email protected]) - технический консультант и автор большого количества книг по технологиям Microsoft Windows и базам данных

В админи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

29.10.2012 Дон Джоунз

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

Дон Джоунз ([email protected]) - технический инструктор по PowerShell (www.windowsitpro.com/go/DonJonesPowerShell), имеет звание Microsoft MVP

PowerShell - оболочка командной строки.

Команды PowerShell выполняются в конвейере.

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

Освоив PowerShell, вы станете более квалифицированным администратором.

Почему PowerShell?

Первым делом стоит развеять два важных мифа, касающиеся PowerShell. Миф первый: PowerShell - это язык сценариев. Неправда. PowerShell действительно содержит язык сценариев; это очень компактный язык, в состав которого входит всего лишь порядка двух десятков ключевых слов. Но на самом деле PowerShell - это оболочка командной строки, во многом сходная с cmd.exe или с оболочкой UNIX Bash. В этой оболочке выполняются команды - такие, как Ipconfig, Ping и другие команды, каковыми вы, несомненно, пользовались. Вполне возможно, на каком-то этапе у вас возникнет желание объединить несколько команд в пакетный файл, и вы имеете полное право назвать такой файл сценарием. Но составление подобных файлов нельзя считать программированием в том смысле, в котором программированием именуется разработка программ с помощью продуктов Microsoft Visual Studio.

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

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

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

Итак, специалисты Microsoft явно заняты определением круга задач, которые можно будет решать с помощью графических консолей; в первую очередь, речь здесь идет о выполнении повседневных задач. Вполне возможно, что необычные или не столь часто встречающиеся задачи в конечном итоге можно будет решать только с помощью командной строки. Можете посокрушаться на сей счет, если вам не нравится такой поворот дела, но поймите следующее: если вы не включите в свой набор навыков умение работать с PowerShell, в перспективе это может отрицательно сказаться на вашей карьере.

Выполнение команд

Не следует полагать, что работа с PowerShell всегда связана с трудностями. Представьте, к примеру, что вам нужно добавить в Active Directory (AD) учетную запись нового пользователя. Задача решается довольно просто:

New-ADUser -Name DonJ -samAccountName DonJ -Title CTO -City «Las Vegas» -Department IT

Как видите, команда New-ADUser принимает несколько параметров командной строки. Эти параметры (-Name, -Title, -City и т.д.) соответствуют полям, с которыми вам пришлось бы иметь дело в случае добавления пользователя с помощью оснастки Active Directory Users and Computers. Так почему же нам предлагается работать не с графическим интерфейсом, а с командной строкой? Потому что командная строка облегчает процесс решения нескольких задач в ходе одной операции.

Допустим, вы получили электронную таблицу Microsoft Excel со списком новых пользователей, которым требуются учетные записи. В первой строке этой электронной таблицы содержатся заголовки столбцов: City, Title, Department, Name и samAccountName - атрибуты этих пользователей. Сохраните данный файл Excel в виде файла значений с разделителями-запятыми (файл CSV). Можете назвать его NewUsers.csv. Теперь вы сможете задействовать PowerShell для создания новых пользователей:

Import-CSV NewUsers.csv | New-ADUser

Нетрудно убедиться, что таким образом задача решается намного быстрее, чем в случае создания пользователей средствами графического интерфейса. PowerShell дает возможность создать 100 пользовательских учетных записей всего лишь за несколько секунд, тогда как на формирование такого количества учетных записей с помощью графического интерфейса пользователя может уйти несколько часов. Кстати, New-ADUser - это команда из модуля Microsoft ActiveDirectory; ее можно найти в комплекте Remote Server Administration Tools for Windows 7, а также в контроллерах доменов Windows Server 2008 R2 (и более поздних). Для загрузки модуля в память (после установки его в системе) нужно будет выполнить команду

Import-Module ActiveDirectory

Изучаем синтаксис

Самая трудная задача в ходе освоения любого интерфейса командной строки, command-line interface (CLI), - это изучение синтаксиса команд. Какие параметры нужно использовать? Как каждый из этих параметров влияет на выполнение команды и какие значения он принимает? Нередко администраторы часами выискивают примеры использования синтаксических конструкций с помощью поисковых программ. Но в среде PowerShell подобные проблемы решаются гораздо проще. Вам нужно выполнить некую операцию с той или иной службой?

Help *service*

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

Help Set-Service -full

Здесь важен параметр -full. Этот параметр позволяет получить массу дополнительной информации, включая подробные инструкции по применению каждого параметра, а также практические примеры. Вам нет нужды искать примеры с помощью поисковой системы Bing; они уже заложены в продукт.

Отметим, что некоторые пользователи вместо короткой команды Help используют более строгий вариант Get-Help. Я предпочитаю первое; в этом случае после отображения каждого экрана текста автоматически вставляется пауза. Использование формата Help избавляет вас от необходимости неоднократно нажимать кнопку More для продолжения знакомства с синтаксисом команды.

Кое-что о «подводных камнях»

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

Get-Process | Sort -Property VM -Descending | Select -First 10

На экране появляется то, что выдала последняя команда конвейера. Если на выходе последней команды ничего нет, экран остается пустым. А теперь выполните команду в таком формате:

Get-Process | Sort -Property VM -Descending | Select -First 10 | Export-CSV procs.csv

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

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

Get-Process | Sort -Property VM -Descending | Select -First 10 | Format-Table -Property ID,VM,PM,Name -autoSize

Однако четыре команды категории Format - Format-List, Format-Table, Format-Wideи Format-Custom - не генерируют традиционные выходные данные. Они формируют инструкции, в соответствии с которыми будет форматироваться содержимое экрана. Следовательно, команда, подобная приведенной ниже, не будет функционировать так, как можно было бы ожидать:

Get-Process | Sort -Property VM -Descending | Select -First 10 | Format-Table -Property ID,VM,PM,Name -autoSize | ConvertTo-HTML | Out-File procs.html

В роли входных данных для команды ConvertTo-HTML выступают инструкции по компоновке экрана, поэтому мы получим файл HTML, состоящий из этих инструкций. Последние же по большей части состоят из шестнадцатеричных кодов и мусора; во всяком случае, такими они представляются пользователю. Но эту западню легко обойти: достаточно воздерживаться от использования каких-либо команд после команды Format. Исключение можно сделать для команд Out-Printer и Out-File; обе они созданы специально для того, чтобы помочь пользователю разобраться в инструкциях по компоновке экрана.

Расширение оболочки

Подобно консоли управления Microsoft Management Console (MMC), оболочка PowerShell предусматривает возможность расширения, что позволяет применять в ней различные технологии. Как следует из таблицы, расширить оболочку можно двумя способами; выбор зависит от того, используете вы PowerShell версии 1 (v1) или версии 2 (v2). Оба метода обеспечивают возможность определять, какие расширения установлены в системе локально.

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

Некоторым пользователям досадно, что созданы некие версии PowerShell, предназначенные для взаимодействия с определенным продуктом, такие, как Exchange Management Shell или SharePoint Management Shell. На самом же деле никаких «особых» версий, ориентированных на взаимодействие с другими пакетами, не существует. Просто разработчики Microsoft дали некоторым функциям PowerShell имена, наталкивающие на ошибочный вывод. Пример - Exchange Management Shell. Это не более чем экранный ярлык меню Start. Просмотрите его свойства, и вы увидите, что данный ярлык всего лишь запускает на выполнение всем известный файл PowerShell.exe. Точнее говоря, он одновременно запускает программу PowerShell и выполняет в автоматическом режиме тот или иной сценарий либо загружает тот или иной модуль. Соответствующий модуль вы можете загрузить вручную. Загляните в свойства рассматриваемого ярлыка меню Start, определите, где расположен интересующий вас модуль, и запустите команду

Get-Module path-to-module

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

Объекты

Специалисты отрасли так много говорят об объектах в среде PowerShell, что некоторых это просто выводит из себя. Им тут же приходят в голову такие, скажем, мысли: «Это уже похоже на разработку, а я программистом не нанимался. Так что давайте как-нибудь без меня!».

Успокойтесь, коллеги. «Объект» - это всего лишь слово, и означает оно «структура данных». Представьте себе электронную таблицу Excel или даже таблицу базы данных Microsoft Access. Каждая строка в таблице или в электронной таблице представляет собой объект, а каждый столбец - свойство. Вот и все, ничего сложного. Команда

Get-Service

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

Например, удалять объекты, на которые вы не хотите смотреть. Или, используя команду Where-Object в качестве фильтра, убирать из конвейера те или иные элементы. Рассмотрим для примера такую команду:

Get-Service | Where { $_.Status -eq "Running" }

Она отображает список служб - но только тех, что выполняются в данный момент. Синтаксис запутанный, однако он поддается анализу. Внутри фигурных скобок (где перечисляются критерии объектов, которые вы хотите увидеть) содержится комбинация символов $_; это выходные данные предыдущей команды. Я не хотел просматривать весь объект service; мне нужно было поработать только с частью этого объекта. А как мы обозначаем часть или дробь в математике? Точкой, отделяющей дробь от целого (как в выражении «3.147», верно? Поэтому я поставил после символов $_ такую точку, а затем указал дробь, с которой мне нужно было поработать: Status. Из предшествующего опыта работы с командой Get-Service мне известно, что если в ячейке столбца Status указывается значение Running, речь идет о выполняемых в данный момент службах. Поэтому я указал, что мне требуются лишь те службы, значение которых, заданное в столбце Status, равно (equals, или с использованием оператора сравнения -eq) Running. Если вы хотите получить об операторах сравнения более подробную информацию, выполните команду

Help about_comparison_operators

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

Get-Service | Select -Property Name,Status

Изменяйте порядок сортировки. По умолчанию сортировка всегда осуществляется в порядке возрастания. При необходимости измените порядок на обратный:

Get-Service | Sort -Property Name -Descending

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

Get-Service | Sort -Property Status | Select -Property Name,Status

Интернет - не последняя инстанция

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

На сайте http://ShellHub.com я представил краткий перечень ресурсов PowerShell, авторы которых отстаивают не «программистский» подход, а более органичный для администраторов подход, предполагающий введение команды с клавиатуры с последующим нажатием клавиши ввода. Со временем вы наверняка начнете модифицировать свой метод работы, и он будет становиться все более сложным. И это замечательно. Но вы можете начать с простых вещей и добиваться превосходных результатов. Приведу такой пример. В книге Windows PowerShell Scripting and Toolmaking я начинаю с разъяснения простой команды, которую вы можете ввести с клавиатуры и немедленно получить результат. Постепенно я раскрываю все возможности этой команды: ввожу дополнительные параметры, привлекаю справочные материалы и т.д. - и наконец, одолев еще 100 страниц печатного текста, читатель воспринимает рассматриваемую команду как собственную команду PowerShell. Нет никакой нужды использовать оболочку PowerShell сразу во всей ее сложности. Начните с самого простого и постепенно беритесь за все более сложные задачи.

Не нужно начинать все с начала

На занятиях, посвященных среде PowerShell, я часто задаю своим студентам вопрос: «Как в PowerShell подключается сетевой диск?». В попытке найти ответ на этот вопрос многие обращаются к справочной системе. В ходе поисков студенты часто останавливают свой выбор на New-PSDrive, что, кстати, не является правильным ответом; эти накопители не видны за пределами PowerShell. В конце концов я объявляю им правильный ответ: Net Use.

Присутствующим остается лишь сокрушаться: «Ну почему это не пришло мне в голову?». Что ж, студенты получили хороший урок: Microsoft не предлагает нам забыть все, что мы уже знаем. Странно, правда? Все известные нам по окну командной строки приемы - Net Use, Icacls, DsAcls, NSLookup, Ping, Ipconfig, Pathping - по-прежнему функционируют, так что продолжайте с ними работать. Более того, эти средства можно свободно использовать совместно с собственными командами PowerShell. Так что если вы уже знаете, как решается та или иная задача, не ломайте голову над тем, как это делается в среде PowerShell. Смело применяйте известные вам приемы.

Почему некоторые администраторы не решаются приступать к изучению PowerShell?

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

Умение эффективно работать с PowerShell предполагает четкое понимание процессов, протекающих в системах, которыми вы управляете. Навыки применения PowerShell - признак первоклассного, знающего администратора. К сожалению, за годы, когда внутренние механизмы системы были скрыты от нас графическим интерфейсом, многие из наших коллег утратили часть знаний, которыми они должны владеть. Мне приходилось беседовать с администраторами, которые никогда не пользовались утилитой проверки связи Ping, которые без оснащенного графическим интерфейсом инструмента не могут отыскать причины неполадок в механизме репликации AD и которые имеют весьма слабое представление о том, как почтовые сообщения выстраиваются в очередь и доставляются в системе Exchange. Таким администраторам трудно овладеть навыками работы с PowerShell.

А вот вопрос для вас, уважаемые читатели. Скажите, можете ли вы создать пользовательскую учетную запись AD с незаполненным именем входа? Ответ: да, но только одну. Разумеется, применивший эту учетную запись пользователь не сможет зарегистрироваться в системе, но, с другой стороны, единственное требование к имени входа со стороны AD состоит в том, чтобы это имя было уникальным. Незаполненное имя уникально в первый раз, когда вы его используете; и только попытка создать второго пользователя с незаполненным именем приведет к сбою. Разумеется, если вам доводилось обращаться к AD только через графическую консоль, вам это обстоятельство неизвестно, поскольку графическая консоль вообще не принимает «незаполненных» имен. Но если внутренние механизмы AD известны вам досконально, ответ будет вполне очевиден.

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

Учитесь - или ищите другую работу

Я люблю повторять слова, которые стали моей присказкой: «Изучайте PowerShell или учитесь произносить фразу: "А чипсы будете заказывать?"». Я уже сегодня вижу, как в различных организациях администраторов, не способных работать с PowerShell, задвигают на вторые роли. И действительно, если владение технологией PowerShell - признак квалифицированного, знающего администратора, почему не сохранять и не продвигать таких сотрудников, избавляясь от их менее осведомленных коллег? Опыт и знания в области PowerShell - более надежный показатель высокой квалификации, нежели любой сертификационный экзамен, устроенный специалистами Microsoft. Если вы полагаете, что получили свою работу в первую очередь благодаря сертификатам, уж будьте уверены: знание PowerShell еще важнее.

На эту ситуацию можно взглянуть и под другим углом. Если вы ценны для своей компании только тем, что способны нажимать на кнопки Next, Next, Finish и при этом не понимаете, что происходит «под капотом» и как можно автоматизировать задачу, чтобы она выполнялась быстрее и эффективнее... Ну, тогда вы относитесь к той категории работников, которых я называю «обезьяна у кнопки». Иными словами, заменить вас можно, что называется, в два счета. Что касается меня, я предпочитаю быть специалистом, обладающим доступными только для посвященных знаниями о том, как автоматизировать работу. Это избавляет меня от необходимости выполнять скучные повторяющиеся операции. А, кроме того, такого сотрудника будет не так-то просто уволить.



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

Краткая справка

PowerShell был официально запущен в 2006 году и был призван заменить сильно ограниченный интерпретатор командной строки cmd. Это уже была вторая попытка замены, выпущенный 8 годами ранее Windows Script Host провалился из-за отсутствия встроенной документации и отсутствия интеграции в оболочку.

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

Командлеты на конвейере

Основа PowerShell - командлеты. Если вы хоть немного знаете английский язык, то уже поняли, что название «командлеты» происходят от красноречивого «cmdlet». Их структура включает в себя собственно команду (глагол) и объект (существительное). Например: Get-Process, Sort-Object, Rename-Item и так далее. Разделение, как видно, выполняется знаком «-». Есть ограниченный список командлетов, используемый системой по умолчанию, но начиная с версии PowerShell 2.0 вы можете самостоятельно создавать свои командлеты. Подробнее прочитать об этой процедуре вы можете на официальной странице Microsoft. Кстати, актуальная версия 5.1 вышла в августе прошлого года.

Другое базисное понятие в PowerShell - конвейер (Pipeline). Конвейер - процедура передачи выходных данных одного командлета в качестве входных следующего. Обозначается конвейер «|» , а на практике такая запись выглядит предельно просто:

Get-Process | Sort CM

Как видно из записи, в коде в конце каждой строки ставить «;» не надо, но данный знак можно использовать для разделения командлетов:

Get-Process; Get-Help

Все удобно и красиво.

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

Удобство и скорость

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

$proc = "Wrong_Proc"
$strCategory = "computer"
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.Filter = ("(objectCategory=$strCategory)")
$colProplist = "name"
foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)}
$colResults = $objSearcher.FindAll()

Foreach ($objResult in $colResults)
{
$objComputer = $objResult.Properties
$objComputer.name
if (Test-Connection -Count 2 -ComputerName $objComputer.name -Quiet)
{
$ps = Get-WmiObject Win32_Process -Filter "Name="$proc"" -ComputerName $objComputer.name

Foreach ($i in $ps)
{
$result = $i.Terminate()
if ($result.ReturnValue -eq 0) { "Success $comp"}
else {"Error $comp"}
}
}
}

Wromg_Proc - название искомого процесса, например, wmplayer.exe. Первая часть скрипта посвящена поиску нашего компьютера, вторая в AD, вторая - собственно работе с процессом. Несмотря на то, что визуально такая запись может оттолкнуть новичка, фактически со знанием английского можно легко расшифровать код.

Но за удобство, как это давно повелось, Microsoft пришлось заплатить немалую цену. Среди необходимых жертв и «гуляющий» синтаксис с упрощениями, который не позволяет новичкам свободно читать код своих более опытных коллег, и неоправданные вольности в оформлении, в том числе исходного кода. Но главное, чем приходится жертвовать - быстродействие. Код, исполняемый на PowerShell может быть в разы медленнее линуксового аналога bash. И если при работе только со своей машиной это не слишком заметно, то при обслуживании десятков и сотен удаленных компьютеров вы теряете часы времени вместо десятков минут.

Заверните со списком литературы

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

Существуют вещи, которые мы выполняем каждый день, будучи администраторами сети Windows, но если бы нас попросили сделать их с помощью командной строки, в отличие от администраторов Linux, для нас, администраторов Windows, это было бы весьма проблематично. Windows всегда был слаб, когда речь шла об инструментах командной строки. На мой взгляд, все изменилось с появлением Windows Powershell. С помощью Powershell (или по-другому PS) можно выполнить столько различных функций, которые мы не могли выполнять ранее. В этой статье мы сконцентрируемся на том, как Powershell может помочь нам выполнять некоторые общие сетевые функции из командной строки. Продолжайте читать, чтобы узнать больше!

Что такое Powershell?

Powershell – это устанавливаемая функция Windows Server 2008. Чтобы установить Powershell, вы должны установить функцию Powershell с помощью мастера добавления функций. Процесс установки занимает около минуты, и как только компонент установлен, у вас появляется доступ к удивительному языку сценариев командной строки. В отличие от других сценарных языков в Windows, Powershell создан исключительно для системных администраторов. Powershell использует.NET и команды ("cmdlets" или "command-lets") в своей работе. Будучи пользователем PS, вы можете использовать команды по отдельности или связывать их вместе, чтобы выполнять более сложные задачи.

Когда вы установили PS, вы сможете запустить Пуск -> Все программы -> Windows Powershell 1.0 , и нажать Windows PowerShell . На этом этапе у вас должно появиться голубое окно CLI, которое выглядит, как показано на рисунке 1.

Рисунок 1: Окно Windows Powershell Command

Вы всегда можете сказать, что работаете в Powershell, поскольку в окне "PS" в начале всегда есть следующая строка:

PS C:\Users\Administrators

Теперь, когда powershell установлен и его окно открыто, позвольте мне показать вам некоторые общие сетевые задачи, которые можно выполнить в PS.

Перечислить IP адреса вашего сервера

Чтобы получить список IP адресов на вашем сервере Windows 2008 Server, вам нужно использовать следующую команду:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE - ComputerName . | Select-Object -Property IPAddress

Вот как выглядят данные после использования этой команды на моем Windows 2008 Server:

Рисунок 2: Перечисление IP адресов с помощью Windows Powershell

Как видно из рисунка, исходные данные показывают нам, что у меня есть один адаптер с IP V4 адресом и IP V6 адресом на этом сервере Windows 2008 Server. Само по себе, это не является чем-то удивительным, но подумайте о том, что вы сможете сделать с этим, используя другие сценарные функции.

Как учит нас руководство пользователей powershell, результирующие данные являются массивом и вы можете посмотреть IP адрес лишь направив эти данные в "Select-Object" (после отключения IPV6), примерно так:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE - ComputerName . | Select-Object -ExpandProperty IPAddress

Рисунок 3: Перечисление IP адреса ТОЛЬКО с Windows Powershell

Получение списка конфигурации сетевого адаптера с помощью Powershell

Чтобы посмотреть основную конфигурацию вашего сетевого адаптера, вы можете использовать следующую команду:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE "ComputerName .

Хотя данная статья посвящена рассмотрению использования PS в Windows Server 2008, эта утилита также может использоваться и в Windows XP, Vista или Server 2003. Вот пример полученных данных команды, запущенной на моей рабочей станции Windows XP:

Рисунок 4: PowerShell показывает конфигурацию сетевого адаптера на Windows XP

Тестовый опрос компьютера с помощью PowerShell

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

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

Вот команда, которая использовалась:

Get-WmiObject -Class Win32_PingStatus -Filter "Address="127.0.0.1"" - ComputerName . | Select-Object -Property Address,ResponseTime,StatusCode

А вот результаты использования команды на моей машине Windows:

Рисунок 5: PowerShell данные показывают статус опроса, анализируемого с помощью Select-Object

Разрешение общего доступа к папке с помощью Windows Powershell

Буду с вами откровенен. Использование команд Powershell не всегда настолько просто, как использование существующих команд Windows, с которыми вы уже знакомы. Вот пример.

Следующая команда PS обеспечит общий доступ к папке в C:\temp в качестве "davidtemp" и применит к ней отличную команду:

(Get-WmiObject -List -ComputerName . | Where-Object -FilterScript {$_.Name -eq "Win32_Share"}).InvokeMethod("Create",("C:\temp","davidtemp",0,25,"David"s Temp Folder"))

С другой стороны, вы могли просто использовать уже проверенную и опробованную команду net share :

Net share davidtemp=C:\temp /remark:"David"s Temp Shared Folder"

Рисунок 6: PowerShell данные и традиционная команда net share

Обратите внимание на то, что команда Powershell не просто не сработала, но выдала мне ужасную ошибку. Я пробовал эту команду на Windows XP и Vista и я был администратором системы.

С другой стороны, команда net share очень проста и сработала с первой попытки. И хотя я пытаюсь рассказать вам о принципах работы с Powershell, не забывайте о том, что Powershell может использовать традиционные сетевые команды Windows, которые во многих случаях гораздо проще использовать. Однако вы можете оказаться в ситуации, в которой эти традиционные команды не делают всего того, что вам необходимо, и именно здесь на помощь придет Powershell.

Прочие сетевые и более сложные команды

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

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

Как вы, возможно, заметили из предыдущих примеров, одним из параметров для большинства команд Powershell является "computername". Когда мы ставим точку (".") вместо имени компьютера (computername), это будет локальный хост (наш компьютер). Однако мы также можем заменять любой IP адрес или имя компьютера Windows в домене, что дает нам возможность использовать эти команды не только на нашем ПК, но и создавать мощные сценарии в Powershell, которые можно применять на всех компьютерах сети.

Например, вот команда, которая передает IP адрес компьютера Dell через LAN:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE - ComputerName DELL9400

Вот результаты этой команды:

Рисунок 7: Результаты Powershell получения IP адреса с удаленного ПК

А вот увеличенное изображение, показывающее необходимую информацию:

Рисунок 8: Увеличение окна результатов Powershell получения IP адреса удаленного ПК

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

Взгляните на следующий пример:

"127.0.0.1","localhost","research.microsoft.com" | ForEach-Object -Process {Get- WmiObject -Class Win32_PingStatus -Filter ("Address="" + $_ + """) -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode

В этом примере был получен список IP адресов и имен домена. Этот список был передан на "ForEach-Object". Для каждого из этих «объектов» (IP адрес / доменные имена), использовался элемент "Get-WmiObject" PingStatus. Затем данные тестового опроса каждого имени домена были пропущены через "Select-Object", в результате чего были отображены только адреса, время ответа и коды статуса.

Рисунок 9: Тестовый опрос с помощью списка при сочетании и опросе данных

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

Что еще нужно знать?

Заключение

Windows Powershell – это очень мощная утилита. В этой статье невозможно описать всего того, что вы сможете сделать с помощью Powershell, но надеюсь, что мне удалось дать вам общую картину возможностей этой утилиты и вдохновить вас на последующие изыскания в этой области. С каждым днем появляются новые книги, курсы и уйма материала в Интернете о функциях Powershell, которые могут использоваться системными администраторами Windows. Учитывая столь сильную привязанность администраторов Windows к графическому интерфейсу, потребуется время на то, чтобы Powershell была принята в тех компаниях, в которых не испытывают острой необходимости в этом инструменте. Я уверен, что администраторы будут использовать Powershell для создания более коротких сценариев, с помощью которых можно будет выполнять более сложные задачи. Надеюсь, что Powershell будет обретать все большую популярность по всему миру!

Особая благодарность компании Microsoft за предоставление примеров команд в документации руководства пользователя Windows Powershell.