15 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Windows PowerShell 2

Windows PowerShell 2.0 преподносит сценарии для Active Directory — и не только для Windows Server 2008 R2

Иногда, кажется, что для создания необходимого решения Microsoft может потребоваться целая вечность. Я имею в виду, десятки тысяч сотрудников по всему миру, а “Halo 4” нет до сих пор? Но иногда, ждать не сложно, потому что Microsoft пытается создать правильное решение — и в случае сценариев и автоматизации Active Directory ожидания оправдались. Windows Server 2008 R2 поставляется с модулем Windows PowerShell 2.0, позволяющим создавать фантастические сценарии и автоматизацию для Active Directory.

Системные требования: правда и мифы

Для работы новых команд Active Directory для Windows PowerShell потребуется Windows PowerShell v2. Команды распространяются в новом модуле для 2.0, не как PSSnapin. Модули легко распространяются и не требуют установки или регистрации — вы просто копируете файлы модуля в папку оболочки Modules и используете команду Import-Module для импортирования модуля в оболочку.

Windows PowerShell 2.0 предустановлен в Windows 7 и Windows Server 2008 R2; он будет доступен для Windows Server 2008, Windows Vista, Windows XP и Windows Server 2003 где-то в конце 2009 или начале 2010 года. Модуль Active Directory поставляется с Windows Server 2008 R2, но для использования этих команд не обязательно иметь контроллер домена (DC) в среде этой ОС. Фактически, команды будут работать хорошо вместе с Windows Server 2003 DC и Windows Server 2008 (не-R2). Вместе с DC для них вы установите бесплатную службу Active Directory Management Gateway Service (можно загрузить с microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=008940c6-0296-4597-be3e-1d24c1cf0dda). Служба шлюза обеспечивает работу с Active Directory, и может быть установлена на Windows Server 2003 R2 SP2 и более позднюю версию, или Windows Server 2008 SP2 и более позднюю версию.

Сейчас на вашем клиентском компьютере нужна функционирующая система Windows 7 или Windows Server 2008 R2, поскольку в настоящее время невозможно установить модуль на что-то постарше.

Проверка подлинности

Одна из сложнейших частей работы с Active Directory является проверка подлинности: вам может понадобиться управлять не только тем доменом, в который вы вошли, но вы можете не иметь доверия в доменах, которыми хотите управлять. В некоторых случаях у вас могут быть административные права в другом домене, но только через альтернативную учетную запись пользователя. Windows PowerShell 2.0 не предоставляет встроенный механизм для сохранения всех этих полномочий. Поэтому люди, писавшие модуль Active Directory, должны были внести новую идею. Их разработка проста и элегантна: модуль Active Directory включает поставщика Windows PowerShell PSDrive. Это означает, что вы можете “прокладывать путь” к домену Active Directory. Этот путь содержит ваши полномочия и позволяет продлить эти полномочия в течении всей сессии оболочки. Когда модуль загружается в оболочку, он автоматически передает ваше имя учетной записи в домене, используя некоторые полномочия, необходимые для работы Windows PowerShell 2.0 (внимание: будет работать Контроль учетных записей, поэтому убедитесь, что запускаете оболочку “под Администратором”, если это необходимо). Что-бы сопоставить новые домены, используйте командлет New-PSDrive, который поддерживает параметры командной строки для указания полномочий.

Что-бы изменить каталоги в подключенном домене, используйте привычную команду Cd: Cd AD:, например, меняет фокус оболочки на отображаемый домен по умолчанию. Изменения в домене важны, поскольку все команды Active Directory по умолчанию будут использовать полномочия какого-либо домена, на котором сфокусирована оболочка на данный момент. Это действительно ловкий трюк, позволяющий запускать команды Active Directory каждый раз, не указывая вручную полномочия. Нужно ли запускать одни и те же команды на другом домене? Только зайдите на этот домен, нажмите пару раз стрелку вверх, что бы обратно вызвать команду Active Directory и нажмите Ввод, для повторного запуска в новом домене.

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

Команды

Все говорят, что модуль Active Directory дает 82 новые команды в оболочке, начиная от очевидных, таких как New-ADUser до более изотерических, как Install-ADServiceAccount. Все эти командлеты имеют приставку “AD”, которая выполняет две важные функции. Первая, помогает различить похожие командлеты, — New-ADUser создает нового пользователя AD. Она не создает нового локального пользователя или нового пользователя SQL Server, или какого-нибудь еще. Во-вторых, приставка помогает легко найти все командлеты: ведите Help *-AD* и вы получите список всех 82 команд.

У каждой команды Active Directory есть параметры командной строки — в некоторых случаях множество параметров. New-ADUser, например, имеет несметное количество параметров и позволяет устанавливать справочные атрибуты, такие как Office, Organization и так далее, без необходимости запоминать внутреннюю схему имен атрибутов (Я никогда не смогу запомнить что в схеме “Last Name” — это “sn”). В этих командах есть один изящный момент:

они защищают вас от глупостей, которые вы можете совершить. Например, если вы запустите Get-ADUser, вы будете ждать список всех пользователей в алфавитном порядке. В большом домене это не только займет некоторое время, но и может сильно воздействовать на ваш DC. Что-бы предотвратить это, есть принудительный параметр команды -filter, позволяющий задавать точку отсчета (такую, как организационная единица) или другие критерии. При помощи -filter *фактически вы получите каждого пользователя в алфавитном порядке. Однако команда не будет автоматически получать каждый атрибут этих пользователей — поскольку это, опять же, может немного понизить работоспособность DC. Дополнительные параметры, такие как -ResultPageSize (предлагает указать, сколько результатов будет показано за раз) и -Properties (предлагает указать, какие атрибуты получать), помогают регулировать баланс между выполнением и получением необходимой информации.

Это похоже на серьезную работу

Я не очень нежно вспоминаю те дни, когда создание и заполнение нового пользователя в Active Directory занимало два десятка строк VBScript. Теперь это просто:

PS AD:> new-aduser -name DonJ -CannotChangePassword $True -Department IT -DisplayName ‘Don Jones’ -EmployeeNumber 42 -GivenName Don -Office ‘Las Vegas’ -Organization ‘Concentrated Technology’ -PasswordneverExpires $True

Ловкий трюк: после создания нового пользователя, может понадобиться сделать что то еще с пользовательским объектом. Если вы добавите переключатель -PassThru в команду, только что созданный объект пользователя будет выведен на конвейер, где другой командлет сможет принять его как входной параметр. Это позволит сделать что-то вроде этого:

New-ADUser . -passThru | Set-ADAccountPassword . -passThru | Enable-ADAccount

Я сократил синтаксис, понятно что — “. ” это место для нормальных параметров. Пример показывает, как -passThru позволяет продолжить вывод объекта пользователя в другой командлет. Эта технология позволяет невероятно эффективно использовать однострочные выражения — команды в одну строчку, а не сценарий — что позволяет работать более эффективно.

Подождите … Это еще не все

Вот здесь я создал небольшой храм, прямо в своем офисе, для парней и девчонок, которые пишут эти команды Active Directory: я обнаружил маленькое чудо под названием конвейерное связывание параметров. И эти люди использовали его в полную силу. Выполните Help New-ADUser -full, и посмотрите помощь для каждого отдельного параметра. Вы заметите, что многие из них соответствуют атрибутам Active Directory, таким как City, Office и Department — принимают входной конвейер “ByPropertyName”. Это и означает, что вы можете передавать входной конвейер командлета New-ADUser. И если входные параметры содержат свойства, которые соответствуют по имени параметра, то они будут согласованы автоматически. Поэтому, если ввод содержит свойство “City”, то оно прикрепится к параметру -City. Если ваш входной конвейер содержит свойство “Department”, оно подключится к параметру -Department.

Если вы знаете, как работает командлет Import-CSV, то вы, наверное, уже взволнованы. Представьте, что файл .CSV содержит такие колонки:

Каждая строка файла содержит информацию для этих колонок. Вы можете легко создать эти структуры в Microsoft Office Excel, Microsoft Office Access, Microsoft SQL Server, или где-нибудь еще, и затем выгрузить свои данные в формат CSV. Если вы сделаете это учитывая соответствие имен колонок и имен параметров New-ADUser, то вы можете создать новых пользователей так:

Import-CSV c:new-users.csv | New-ADUser

Да, это все что вам придется набрать. Если ваш файл .CSV содержит все необходимые колонки — -Name (параметр -Name задается принудительно) — то New-ADUser волшебным образом правильно свяжет.CSV колонки с правильными параметрами. Вы можете импортировать сотни новых пользователей за секунды, вводя не больше 50 символов. Если вы не хотите изучать Windows PowerShell 2.0… то, я думаю, что вы должны просто нажать “Далее, Далее, Готово”.

Управление AD сделано правильно

Один из основных принципов Windows PowerShell это то, что программисты должны написать все административные функции для управления Active Directory — в командлетах оболочки. Любой GUI должен быть, по сути, внешним интерфейсом для этих командлетов. Microsoft Exchange Server 2007 предоставляет нам такую систему, и работает великолепно. Вы получите прекрасный графический пользовательский интерфейс и всегда будете иметь возможность перемещения в командную строку, если этот интерфейс не будет удовлетворять вашим нуждам. Таким способом Microsoft перезаписывает пользователей и компьютеры Active Directory?

Ну, нет. Но если честно, это довольно старый инструмент. Тем не менее, есть еще одна инновационная технология в Windows Server 2008 R2. Это Центр администрирования Active Directory, еще более новый графический интерфейс для управления Active Directory. И угадайте, что находится под Центром администрирования? Да, это командлеты Active Directory. Это означает, что те вещи, которые вы делаете в графическом интерфейсе, вы можете сделать и из оболочки.

Читать еще:  Как запустить восстановление системы Windows 10 в безопасном режиме

В итоге, практически после десятилетия, Active Directory действительно преуспел. Теперь у нас есть возможность простого интуитивного управления через графический интерфейс. Или более мощного автоматизированного управления через полнофункциональную командную строку — что, откровенно говоря, не намного сложнее, чем использование графического интерфейса. Вам не придется ждать Windows Server 2008 R2, потому что с правильными дополнениями ваши домены Windows Server 2003 могут позволить себе такую же управляемость.

PowerShell: инструмент не только для сисадмина

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

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

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

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

Ну а главное в 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

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

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

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

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

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

Немало интересных и познавательных обучалок можно найти на Хабрахабр.

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

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

Хотите стать веб-разработчиком? Тогда вам на интенсив по веб-разработке для начинающих!

Немного коснувшись 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

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

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

Ну а главное в 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

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

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

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

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

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

Читать еще:  1. Обязательно пользуйтесь антивирусом

Немало интересных и познавательных обучалок можно найти на Хабрахабр.

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

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

Хотите стать веб-разработчиком? Тогда вам на интенсив по веб-разработке для начинающих!

Как разобраться в программе

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

Решаясь начать изучение скриптового языка Power Shell, целесообразно ознакомиться с руководством, созданным Франком Кохом, или обратиться к справочной системе самой программы. Последняя является довольно мощной, с большим количеством конкретных примеров. Основная информация здесь откроется для просмотра после ввода командлета Get-Help.

Список всех доступных команд выводит командлет Get-Command. Связка get-help-командлет применяется с целью получения справки по конкретному алиасу. Пример: справка по использованию get-process (отвечает за вывод списка текущих процессов) будет выведена командой get-help-process. Передав ей параметры -example, -detailed, -online или –full, пользователь сможет получить сведенья обо всех его нюансах подробно.

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

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

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

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

Хочешь посмотреть права на директорию? Сделать это помогает такой командлет:

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

Если не можешь понять, что делает какой-то командлет, напиши следующее (заменив Get-Process на название неизвестного командлета):

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

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

Теперь давай попробуем узнать что-нибудь о нашем домене через кoнсоль PowerShell. К примеру, давай посмотрим пользовательские аккаунты, у которых установлен неистекающий пароль:

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

Утилиты export_keys.ps1 и import_keys.ps1¶

  • Загрузить скрипты

Две утилиты, используеющиеся совместно.

  • автоматически определяет разрядность системы;
  • автоматически определяет SID пользователя;
  • экспортирует ветку в папку со скриптом.
  • автоматически определяет разрядность системы;
  • автоматически определяет SID пользователя;
  • изменяет ветку реестра в экспортированном файле;
  • импортирует файл с контейнерами;
  • автоматически устанавливает сертификаты, перенесенных контейнеров.

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

Алгоритм работы¶

  1. Перенесети папку с утилитами на первый компьютер абонента, с которого надо скопировать контейнеры;
  2. Запустите скрипт export_keys.ps1 и дождитесь его успешного выполнения. При этом в папке со скриптами появится экспортированная ветка реестра;
  3. Перенесите папку со скрипом и экспортированным файлом на второй компьютер;
  4. Запустите скрипт import_keys.ps1 и дождитесь его успешного выполнения;
  5. Просмотрите вывод скрипта, на наличе проблем и проверьте вход в сервисы СКБ Контур.

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

Скрипт export_keys.ps1 сохраняет ветку в файле ps_keys.reg на рабочем столе. Скрипт import_keys.ps1 подхватывает файл ps_keys.reg также с рабочего стола и резудьтат обработки сохраняет в файле ps_keys_out.reg .

Файл ps_keys.reg не будет подхвачен скриптом import_keys.ps1 из других папок.

Вывод скриптов¶

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

Пример успешного вывода export_keys.ps1 :

Пример успешного вывода import_keys.ps1 :

Введение в оболочку командной строки Windows PowerShell

Введение в оболочку командной строки Windows PowerShell

На настоящий момент мы рассмотрели уже три разных инструмента, предназначенных для автоматизации работы в операционной системе Windows : оболочки командной строки Cmd.exe и WMIC, а также сервер сценариев WSH. Зачем же компании Microsoft понадобилась разработка еще одной полностью новой оболочки командной строки со своим языком сценариев?

Причины и цели создания новой оболочки

Чтобы ответить на этот вопрос, вспомним основные требования к “идеальному” средству автоматизации, которые мы обсуждали в первой лекции, и посмотрим, в какой степени удовлетворяют этим требованиям перечисленные выше инструменты (табл.16.1).

Таблица 16.1. Требования к инструменту автоматизации

ТребованиеCmd.exeWSHWMIC
Работа во всех версиях операционной системы без установки дополнительного программного обеспеченияДаДаНет (только Windows XP и выше)
Интеграция с командной строкойДаНетДа
Согласованный и непротиворечивый синтаксис команд и утилитНетНетДа
Поддержка псевдонимов (кратких синонимов) для длинных названий командНетНетДа
Автоматическое завершения команд и имен файлов при вводе их с клавиатурыЧастично (автоматическое завершение имен файлов и папок)НетНет
Поддержка истории введенных команд с возможностью их повторного вызова, просмотра и редактированияДаНетДа
Наличие подробной встроенной справки по командам с примерами использованияЧастичноНетДа
Возможность автоматического выполнения сценариевДа (язык командных файлов)Да (языки сценариев VBScript, JScript и т.д.)Частично (команды WMIC можно встраивать в командные файлы)
Доступ и использование всех технологий и возможностей, поддерживаемых операционной системойНет (нет прямого доступа к объектам COM, WMI, ADSI, .NET)ДаНет (доступ только к объектам WMI)

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

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

Для достижения этих целей были решены следующие задачи:

  • Обеспечение прямого доступа из командной строки к объектам COM, WMI и .NET. В новой оболочке присутствуют команды, позволяющие в интерактивном режиме работать с COM-объектами, а также с экземплярами классов, определенных в информационных схемах WMI и .NET.
  • Организация работы с произвольными источниками данных в командной строке по принципу файловой системы. Например, навигация по системному реестру или хранилищу цифровых сертификатов выполняется из командной строки с помощью аналога команды CD интерпретатора Cmd.exe.
  • Разработка интуитивно понятной унифицированной структуры встроенных команд, основанной на их функциональном назначении. В новой оболочке имена всех внутренних команд (в PowerShell они называются командлетами) соответствуют шаблону “глагол-существительное”, например, Get-Process (получить информацию о процессе), Stop-Service (остановить службу), Clear-Host (очистить экран консоли) и т.д. Для одинаковых параметров внутренних команд используются стандартные имена, структура параметров во всех командах идентична, все команды обрабатываются одним синтаксическим анализатором. В результате облегчается запоминание и изучение команд.
  • Обеспечение возможности расширения встроенного набора команд. Внутренние команды PowerShell могут дополняться командами, создаваемыми пользователем. При этом они полностью интегрируются в оболочку, информация о них может быть получена из стандартной справочной системы PowerShell.
  • Организация поддержки знакомых команд из других оболочек. В PowerShell на уровне псевдонимов собственных внутренних команд поддерживаются наиболее часто используемые стандартные команды из оболочки Cmd.exe и Unix-оболочек. Например, если пользователь, привыкший работать с Unix-оболочкой, выполнит ls, то он получит ожидаемый результат: список файлов в текущем каталоге (то же самое относится к команде dir).
  • Разработка полноценной встроенной справочной системы для внутренних команд . Для большинства внутренних команд в справочной системе дано подробное описание и примеры использования. В любом случае встроенная справка по любой внутренней команде будет содержать краткое описание всех ее параметров.
  • Реализация автоматического завершения при вводе с клавиатуры имен команд, их параметров, а также имен файлов и папок. Данная возможность значительно упрощает и ускоряет ввод команд с клавиатуры.

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

Отличие PowerShell от других оболочек – ориентация на объекты

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

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

Читать еще:  Лучшие программы и утилиты для ускорения компьютера

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

В-третьих, работая в оболочке с объектами, можно с помощью их свойств и методов легко получать нужные данные, не занимаясь разбором и анализом символьной информации, как это происходит во всех традиционных тексто-ориентированных оболочках командной строки. Рассмотрим пример. В Windows XP есть консольная утилита tasklist.exe, которая выдает информацию о процессах запущенных в системе:

Предположим, что мы в командном файле интерпретатора Cmd.exe с помощью этой утилиты хотим определить, сколько оперативной памяти тратит процесс kavsvc.exe. Для этого нужно выделить из выходного потока команды tasklist соответствующую строку, извлечь из нее подстроку, содержащую нужное число и убрать пробелы между разрядами (при этом следует учесть, что в зависимости от настроек операционной системы разделителем разрядов может быть не пробел, а другой символ). В PowerShell аналогичная задача решается с помощью команды get-process , которая возвращает коллекцию объектов, каждый из которых соответствует одному запущенному процессу. Для определения памяти, затрачиваемой процессом kavsvc.exe, нет необходимости в дополнительных манипуляциях с текстом, достаточно просто взять значение свойства WS объекта, соответствующего данному процессу.

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

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

Загрузка и установка PowerShell

Оболочка PowerShell может работать не во всех версиях операционной системы, ее можно использовать в Windows XP SP 2, Windows Server 2003 SP 1 и более поздних версиях. Кроме этого, в системе должна быть установлена платформа .NET Framework 2.0 (в Windows XP данную среду придется устанавливать дополнительно, дистрибутив можно загрузить с сайта Microsoft по адресу http://msdn.microsoft.com/netframework/downloads/updates/default.aspx).

Загрузить PowerShell можно с сайта Microsoft, открыв страницу http://microsoft.com/powershell, где имеются ссылки на файл установки последней версии и пакеты документации на разных языках. Запустив загруженный файл, следуйте указаниям мастера установки. В 32-разрядных версиях Windows оболочка PowerShell устанавливается по умолчанию в каталог %SystemRoot%System32WindowsPowerShellv1.0 . В 64-разрядных версиях Windows 32-разрядная версия PowerShell устанавливается в каталог %SystemRoot%SystemWow64WindowsPowerShellv1.0 , а 64-разрядная версия Windows PowerShell устанавливается в каталог %SystemRoot%System32WindowsPowerShellv1.0 .

Запуск оболочки. Выполнение команд

Установив оболочку в системе, можно начать новый интерактивный сеанс. Для этого следует нажать на кнопку Пуск (Start), открыть меню Все программы (All Programs) и выбрать элемент Windows PowerShell. Другой вариант запуска оболочки – пункт Выполнить… (Run) в меню Пуск (Start), ввести имя файла powershell и нажать кнопку OK.

В результате откроется новое командное окно с приглашением вводить команды (рис. 16.1).

Выполним первую команду в PowerShell. Пусть это будет что-то знакомое, например dir (команды в PowerShell обрабатываются без учета регистра). На экран будет выведен список файлов в текущем каталоге:

Типы команд PowerShell

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

Первый тип – так называемые командлеты (cmdlet). Этот термин используется пока только внутри PowerShell. Командлет представляет собой класс .NET, порожденный от базового класса Cmdlet ; разрабатываются командлеты с помощью пакета PowerShell Software Developers Kit (SDK). Единый базовый класс Cmdlet гарантирует совместимый синтаксис всех командлетов, а также автоматизирует анализ параметров командной строки и описание синтаксиса командлетов для встроенной справки.

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

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

Сценарий – это блок кода на языке PowerShell, хранящийся во внешнем файле с расширением ps1. Анализ синтаксиса сценария производится при каждом его запуске.

Последний тип команд – внешние исполняемые файлы, которые выполняются обычным образом операционной системой.

PowerShell ISE

Наверняка вы уже наслышаны о том что в следующей версии PowerShell будет доступна графическая консоль/редактор, который называется PowerShell ISE (Integrated Scripting Environment). В этом посте я постараюсь рассказать о том что это такое, и зачем оно нужно

Как видно из этого скриншота, ISE является полноценным редактором с подсветкой кода, закладками (табами), и возможностью выполнения интерактивных команд. Это крайне удобно при написании сценариев: можно легко протестировать команду, и затем добавить её в основной код. Или наоборот выполнить несколько строк выделенных в открытом файле.

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

Еще в ISE встроен отличный отладчик. Ввы можете расставлять брейкпойнты (F9), запускать пошаговое выполнение, просматривать содержимое переменных наводя на них курсор, и т.д,:

Когда я первый раз увидел ранние версии этой утилиты, я сразу захотел иметь возможность открыть несколько закладок, с интерактивными сессиями PowerShell на других компьютерах. К сожалению тогда это было невозможно. Но сейчас, в Windows 7 (или PowerShell CTP3) нет ничего проще!

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

Так как ISE создавался с нуля, для PowerShell, он не страдает болезнями доставшимися PowerShell.exe от консольной подсистемы Windows (которая почти не изменилась со времен Windows 2000). Так например он изначально, полностью, стопроцентно поддерживает Unicode, и в нем можно легко менять шрифты, и их размер. Но у всего хорошего есть цена… В PowerShell не получится выполнять команды которые привыкли работать с экраном консоли напрямую. Это относится например к интерактивным режимам cmd.exe, netsh или diskpart. Нет, вы вполне сможете использовать эти утилиты, но вот войти в их интерактивный “subshell” не получится.

Еще много всего интересного про PowerShell ISE можно прочитать в блоге разработчиков,

Проверить PowerShell 2.0

Откройте PowerShell от имени администратора и выполните следующую команду.

В результатах, после выполнения этой командой, посмотрите строку State «Состояние». Если она говорит, что это оболочка версии 2.0 «Enabled» (Включена), вам необходимо ее отключить. Если команда возвращает значение «Disabled» (Отключено), вам не нужно ничего делать.

Отключить Windows PowerShell 2.0

Откройте PowerShell с правами администратора и выполните следующую команду;

Это отключит оболочку Windows PowerShell 2.0. Вы можете проверить это, выполнив первую команду еще раз. Строка State должна иметь значение «Disabled» (Отключено).

Если вы нехотите выполнять команду в PowerShell, вы можете отключить эту функцию с помощью Панели управления. Откройте «Проводник» и введите в адресной строке следующее:

Нажмите «Включение или отключение компонентов Windows». Это откроет новое окно «Компоненты Windows». Может потребоваться некоторое время, чтобы загрузить список функций, которые вы можете включить / отключить. После загрузки списка прокрутите список до середины и найдите Windows PowerShell 2.0. Снимите флажок и нажмите «ОК».

Вам не нужно перезагружать систему, чтобы применить изменения.

В чем заключается риск.

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

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

Что такое Windows PowerShell ISE

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

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

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

голоса
Рейтинг статьи
Ссылка на основную публикацию
Статьи c упоминанием слов: