Сайт о телевидении

Сайт о телевидении

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

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

Windows PowerShell 2.0 был выпущен в составе Windows 7 и Windows Server 2008 R2 как неотъемлемый компонент системы. Кроме того, вторая версия доступна и для других систем, таких как Windows XP SP3, Windows Server 2003 SP2, Windows Vista SP1 и Windows Server 2008.

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

Windows PowerShell построен на базе Microsoft NET Framework и интегрирован с ним. Дополнительно PowerShell предоставляет удобный доступ к COM, и ADSI, равно как и позволяет выполнять обычные команды командной строки, чтобы создать единое окружение, в котором администраторы смогли бы выполнять различные задачи на локальных и удалённых системах.

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

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

В оболочку PowerShell встроено свыше 100 команд. Так же можно создавать дополнительные команды, но при этом следует пользоваться языком стандарта.NET, таким как Visual Basic .NET или C#.

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

Рис. 1. Команда Get-ChildItem

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

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

Рис 2. Команда Get-Command

Для получения этих сведений можно воспользоваться командой Get-Help. Если мы введем только Get-Help, то мы получим справку по ней самой.

Рис. 3. Команда Get-Help

Как видно из справки по команде Get-Help, чтобы получить справку по конкретной команде нужно ввести название команды сразу после Get-Help. Посмотрим справку по уже известной нам команде Get-Command. Для этого введем:

Рис. 4. Справка по команде. Команда Get-Help Get-Command

Get-Command в данном случае является параметром команды Get-Help и подобно параметрам команд в командной строке cmd.exe, параметры команд PowerShell предоставляют сведения, необходимые командам для выполнения их работы.

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

Рис. 5. Команда Get-Help Get

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

Рис. 6. Команда Get-Help Get-Content

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

Рис. 7. Команда Get-Help Get-Content -full

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

На рисунке 7 показана часть сведений, возвращенных этой командой. Администратору нужно будет прокрутить на своем компьютере окно или изменить его размеры так, чтобы можно было просмотреть все содержимое. В разделе ПАРАМЕТРЫ (PARAMETERS англ. версия справки) содержится описание параметров, которые можно добавить к команде, чтобы изменить возвращаемый ею результат. Обратите внимание на два важные пункта у параметров: Требуется? (Required англ.) и Позиция? (Position англ.).

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

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

К примеру, как показано на рисунке 8, при выполнении команды Get-Content требуется указывать параметр -Path, рассмотрим этот параметр по подробней.

Рис. 8. Параметр -Path

В переменной Требуется ? стоит значение true , это значит, что этот параметр является обязательным для команды Get-Content. В переменной Позиция? стоит значение 1, это значит, что можно не указывать название параметра при его вводе, нужно лишь ввести его сразу после названия команды (1-ая позиция).

Рис. 9. Команда Get-Content E:01.txt

Где E:01.txt – это параметр -Path

Рис. 10. Файл E:01.txt.

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

В разделе справки ПАРАМЕТРЫ за именем каждого параметра следуют сведения, заключенные в угловые скобки (< >). Эти сведения указывают на тип данных, к которому должно относиться значение параметра. Как показано на рисунке 8, значение параметра -Path должно быть строковым (string). Если за названием типа указаны квадратные скобки (string), это означает, что в качестве значения параметра можно использовать строковый массив. В случае использования параметров-переключателей, таких как например параметр -Full, которые не принимают значений, то тип данных будет указан как .

Рис. 11. Параметр -Full

Следует отметить еще одну функцию PowerShell, имеющую отношение к параметрам, это функция автоматического завершения ввода комбинации «параметр-имя». Пользователь должен только ввести достаточное число букв, составляющих имя параметра, чтобы его можно было отличить от других параметров. Так, команда Get-Help Get-Content -full эквивалентна команде Get-Help Get-Content -ful. В разделе справки ПРИМЕЧАНИЯ также имеются примеры того как можно использовать ту или иную команду. На рисунке 12 показаны 3 примера использования команды Get-Help.

Рис. 12. Примеры использования команды Get-Help

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

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

Рис. 13. Команда Get-Help about*

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

Рис. 14. Команда Get-Help about_aliases

На рисунке 14 показана часть данных справки, которые получены в результате работы команды Get-Help about_aliases. Как мы видим, в файле справки содержится обзор действий, нацеленных на создание псевдонимов в PowerShell и управление ими.

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

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

Чтобы просмотреть псевдонимы, доступные в ходе текущего сеанса, нужно запустить команду Get-Alias:

Рис. 15. Команда Get-Alias

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

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

Рис. 16. Команда Get-Alis -definition Get-ChildItem

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

Рис. 17. Команды Get-ChildItem c: и dir c:

Если мы хотим создать свой собственный псевдоним в PowerShell, то нам поможет команда Set-Alias. Давайте создадим псевдоним для команды Get-Help. Используем сокращение hlp. Нужная нам команда будет выглядеть так:

Рис. 18. Команда Set-Alias hlp Get-Help и созданный псевдоним hlp

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

Заключение

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


Мы уже убедились в том, что это достаточно простой и эффективный инструмент для выполнения повседневных задач. Однако понять истинные возможности 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 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 и базам данных

Изучение 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, но если бы нас попросили сделать их с помощью командной строки, в отличие от администраторов 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.