Введення в Windows

Останні прогалини в можливостях адміністрування Windows

Процес написання сценаріїв в Windows довгий час був предметом насмішок з боку адміністраторів UNIX. Головна причина полягала в тому, що в Windows відсутня безліч функцій, які могли б зробити написання сценаріїв дійсно ефективним. Однак фахівці Microsoft не тільки швидко надолужили згаяне в цій області, але й піднесли сюрприз, розробивши нову середовище для написання сценаріїв під назвою Windows PowerShell (колишня назва – Monad). У PowerShell реалізовано низку таких можливостей, про які користувачі Windows ніколи і не чули, а деякі відомі функції радикально вдосконалені. Хоча PowerShell як і раніше вважається кандидатом на випуск, познайомитися з тим, які прогалини в галузі створення сценаріїв закриває PowerShell і як саме він працює, буде корисно вже зараз.



Заповнюємо прогалини


PowerShell була задумана розробниками Microsoft як більш потужна середовище для написання сценаріїв і роботи з командного рядка. Розробники PowerShell переслідували кілька цілей. Якщо в двох словах, то було потрібно створити більш функціональну і просту у використанні середу складання сценаріїв, ніж у будь-яких аналогічному продукті для будь-якої іншої операційної системи. Крім того, це середовище має була підходити для вирішення завдань, що стоять перед системними адміністраторами, задовольняти вимогам розробників програмного забезпечення і інтегруватися з платформою Microsoft. NET Framework. Досягнення поставлених цілей означало, що Microsoft має створити деякі відсутні в інструментарії Windows Scripting функції. Для цього розробники додали в PowerShell все найкраще з-поміж командної рядка. Розглянемо ці доповнення докладніше.


Композиція. Композиція команд дозволяє створювати складні команди, пов'язуючи в єдині рядки безліч дрібних команд, кожна з яких вирішує тільки одну задачу. Для UNIX Shell це звичайна справа. Більшість адміністраторів UNIX застосовують композицію кожен день, навіть не підозрюючи, що це так називається. Розробники UNIX Shell спочатку прагнули створити командний процесор, або оболонку, з можливістю використовувати величезну кількість маленьких одноцільових команд, які можна комбінувати самими різними способами. Цей підхід різко контрастував з вже існуючими рішеннями, коли упор робився на використання великих і складних командних структур.


Конвеєрна обробка. Конвеєрна обробка дозволяє отримати результати роботи однієї команди і передати їх на вхід наступної команди при композиції. Командний інтерпретатор Windows у цьому сенсі має досить обмеженими можливостями. Наприклад, якщо виконати


dir / more


то висновок команди Dir буде переданий по конвеєру команді More. Однак більшість команд Windows не підтримують конвеєрну обробку (або схожу процедуру – перенаправлення вводу / виводу).


Об'єктна орієнтація. Результатами роботи команд PowerShell є об'єкти, а не блоки тексту. У об'єктів є властивості (які можна переглянути і змінити) та методи (виконавчі дії). Наприклад, команда get-mailbox використовується для отримання списку поштових об'єктів, якими можна згодом маніпулювати самими різними способами. Команда get-mailbox повертає не список назв поштових скриньок; вона повертає список об'єктів, які являють собою власне поштові ящики. Як буде показано в розділі «PowerShell в дії», використання команд, які повертають об'єкти, дає сценаріями величезну перевагу.


Безпека. Більшість команд PowerShell, які створюють або змінюють об'єкти, підтримують два прапори: confirm і whatif. При установці прапора confirm система запитує, чи справді потрібно виконати те чи інше дію. При установці прапора whatif буде показано, як у результаті тих чи інших дій зміниться об'єкт, але при цьому реальні зміни проводитися не будуть. Це дуже зручні прапори, що дозволяють тестувати внесення змін до того, як вони будуть зроблені в дійсності.


Несуперечлива структура і несуперечливе іменування. Майже для всіх команд PowerShell використовується несуперечлива структура типу «дія – об'єкт» і несуперечливі іменовані шаблони. До того ж самих дій не так багато. Завдяки несуперечності і невеликому словника дій легко зрозуміти принцип конструювання команд, якщо відомий об'єкт, з яким доведеться працювати.


Документація. PowerShell надає ретельно пророблений оперативний довідник для об'єктів, команд і власне виконуваної середовища.



Азбука PowerShell


Для PowerShell підготовлено величезне число командних структур, іменованих cmdlet (вимовляється як command-let). Cmdlet – це аналоги динамічних бібліотек, DLL, які самі по собі не можуть бути запущені як додатки, але в них містяться виконувані об'єкти. З цієї причини cmdlet використовуються у внутрішніх виклики з командного інтерпретатора PowerShell. У PowerShell Release Candidate 1 (RC1) включено більше 120 cmdlet.


Cmdlet можуть мати параметри, до яких можна звернутися по імені або по позиції (тобто інтерпретація параметра PowerShell буде виконуватися залежно від місця розташування параметра в командному рядку). Наприклад, при використанні cmdlet під назвою get-mailbox самий перший параметр завжди містить вказівку на поштові скриньки, над якими виконується робота. До іншим параметрам в даному cmdlet можна звернутися по імені.


Існує кілька вбудованих cmdlet, звернення до яких буде проводитися досить часто, так що про них варто згадати окремо.


Сімейство cmdlet під назвою format (конкретно format-table і format-list) отримує потік об'єктів і відповідним чином форматує їх. Можна вказати, які властивості об'єктів будуть відображатися. Наприклад, при висновку на екран список поштових скриньок, коли інтерес представляє тільки назва скриньки та її розмір, використовується команда


get-mailboxstatistics /
format-table name, size


Команда представлена у двох рядках, але в PowerShell її слід поставити в одній. Це зауваження справедливе для всіх прикладів даної статті.


Where дозволяє вибирати використовувані об'єкти. Наприклад, якщо видати команду


get-eventlog application /
where {$_.ID eq «-1018»}


PowerShell звернеться до журналу Application і витягне всі події з ID 1018. Цікаво, що where – один з небагатьох PowerShell cmdlet, для яких зроблено відступ від згаданого вище синтаксису типу «Дія – об'єкт».


Як випливає з назви, group об'єднує об'єкти згідно із зазначеним властивості. Припустимо, нам потрібно отримати список імен і розмірів всіх поштових скриньок організації, згрупований за належністю до бази даних поштового сервера. Така команда могла б виглядати таким чином:


get-mailboxstatistics /
group MailboxDatabase /
format-table count,name


Якщо подивитися на вже написані сценарії на PowerShell, можна помітити дивні абревіатури для деяких cmdlet, такі як fl замість format-list. Все просто – PowerShell підтримує скорочені імена (Або псевдоніми, alias). Для багатьох команд спільного вживання існують вбудовані скорочені імена. Крім того, ви самі можете описати власні псевдоніми в профілі оболонки; це повинен бути спеціальний файл, який PowerShell використовує за умовчанням для даного користувача.


Мова сценаріїв PowerShell, Powerscript, підтримує всі конструкції, можливі для такої мови, – цикли, розгалуження, маніпуляції з рядками. Для тих, хто коли-небудь працював в VMS або писав на JCL при роботі на мейнфреймах IBM, синтаксис Powerscript не буде чимось абсолютно новим. Укладачі сценаріїв в UNIX також побачать знайомі елементи, як і системні адміністратори, які пишуть сценарії на VBScript.



PowerShell в дії


Першим продуктом Microsoft, для якого повною мірою будуть використовуватися переваги PowerShell, стане Microsoft Exchange Server 2007 (колишня назва – Exchange 12). Відповідно, в цьому розділі статті наводяться приклади, пов'язані з Exchange. Приклади для Windows будуть продемонстровані в наступних статтях. Інтерфейс користувача Exchange 2007 повністю заснований на PowerShell. Будь-яка дія, виконане в середовищі Exchange System Manager (ESM) в Exchange 2007, – це завдання, причому кожна така задача написана на PowerShell. Перед користувачами відкриваються величезні можливості: все, що можна зробити в ESM, можна повторити з командного рядка, чого не можна сказати про Exchange Server 2003. Якісь додаткові операції можуть бути виконані тільки з командного рядка, хоча повний список таких операцій ще не опублікований.


Для Exchange 2007 розробляється власний набір cmdlet, спеціально для роботи з об'єктами Exchange. Ці команди можна буде використовувати для маніпуляції з усіма видами об'єктів, включаючи Microsoft Outlook Web Access (OWA), віртуальні каталоги, поштові ящики, групи розсилки та зберігання, а також уніфіковані плани набору номера. Оскільки всі cmdlet підкоряються одним і тим же шаблонам іменування, дуже просто зрозуміти функції таких cmdlet, як, наприклад, new-mailbox, enable-mailbox або get-mailboxStatistics.


Завдяки конвеєрної обробці і композиції можна виконувати з командного рядка такі завдання, які не могли бути виконані в Exchange 2003 ESM і навіть в оснащенні Microsoft Management Console (MMC) Active Directory Users and Computer. Припустимо, наприклад, що існує політика квотування розміру поштової скриньки за замовчуванням, а потрібно застосувати спеціальне квотування (500 Мбайт) для членів групи Executive. У Exchange 2003 політики квотування поштових скриньок накладалися на бази даних, так що можна було вибрати один з чотирьох варіантів: відмовитися від такої політики, перемістити користувачів ексклюзивної групи в окрему базу даних поштових скриньок, задіяти Active Directory Users and Computers для ручного накладання квоти для кожного облікового запису або написати сценарій, який використовує Active Directory Service Interfaces (ADSI) для внесення необхідних змін. У Exchange 2007 з підтримкою PowerShell завдання індивідуального квотування вирішується набагато простіше. Потрібно просто запустити команду


get-group «Executives» /
set-mailbox
-SendStorageQuota 500MB


Хоча команда коротка, в ній використовується і конвеєрна обробка, і композиція. Зверніть увагу, що параметр для getgroup – позиційний, тоді як для set-mailbox застосовується іменований параметр (SendStorageQuota). Чому? Все, що можна зробити з get-group, – отримати список об'єктів типу «облікові записи», які є членами вказаної групи, але set-mailbox має величезний перелік параметрів, які можна задати. Наприклад, можна з легкістю встановити спеціальні квоти для тих користувачів, в атрибуті Last Name яких присутня буква х:


get-mailbox *x /
set-mailbox
-SendStorageQuota 1GB


Як видно з наведеного прикладу, в PowerShell дозволяється використовувати групові символи для пошуку колекцій об'єктів, які вас цікавлять. Однак робити це зовсім не обов'язково. За замовчуванням cmdlet повертають всі об'єкти вибраного типу. Наприклад, якщо запустити cmdlet


get-mailboxstatistics


ми отримаємо статистику про всі поштових скриньках організації Exchange. Така властивість cmdlet сильно спрощує виконання завдань, що застосовуються до всіх об'єктів заданого типу. Наприклад, якщо потрібно витягти все поштові ящики організації, згрупувати їх за базами даних поштових скриньок, в яких вони розташовані, і відформатувати результуючий набір об'єктів у вигляді списку, слід задати команду


get-mailbox /
group Database / fl


А ось ще більш вражаючий приклад використання cmdlet. Команда


get-OWAVirtualDirectory /
set-OWAVirtualDirectory
-FileAccessControlOnPublicComputers
blockAllExceptTranscoded


звертається до кожного віртуального каталогу OWA в організації, а потім встановлює засоби управління візуалізацією WebReady Document Viewing в режим блокування доступу до всіх вкладень, за винятком файлів, які можуть відображатися в режимі Document Viewing. Одним рядком ви фактично заборонили користувачам загальнодоступних комп'ютерів зберігати додатки або звертатися до них, за винятком тих вкладень, які можна перетворити. Це у величезній мірі знижує ризик випадкового розкриття конфіденційних даних. Якщо б ту ж завдання довелося виконувати «вручну», легко було б пропустити один або кілька серверів, що зробило б захист неповною.



Вибрані функції


Під час роботи з PowerShell ви помітите, що деякі функції використовуєте постійно. Перерахую для прикладу свої улюблені функції.


Start-transcript і партнер stop-transcript. Команда start-transcript повідомляє PowerShell про необхідність вести повний звіт про взаємодію з середовищем командного інтерпретатора, щоб потім було простіше повернутися до попередньої сесії і зрозуміти, що саме було зроблено. Можна навіть використовувати цей журнал для включення раніше заданого набору команд у повторно використовуваний сценарій. Stop-transcript повідомляє PowerShell про припинення журналювання.


Get-command разом з прапором-synopsis. Якщо невідомо, що робить той чи інший cmdlet, можна скористатися командою get-command з прапором-synopsis для отримання загальної інформації про зазначений cmdlet. Запустимо, для прикладу, команду


get-command -name get-service
-synopsis


PowerShell надасть загальні відомості про використання cmdlet get-service.


Get-excommand. Якщо адміністратор не знає, який саме cmdlet йому потрібен, краще використовувати get-excommand для пошуку cmdlet, які в принципі можуть представляти інтерес для вирішення поставленого завдання. При використанні get-excommand разом з груповими символами дуже просто знайти те, що потрібно. Наприклад, команда


get-excommand *ailbox*


повертає список cmdlet, властивостей і методів, що відносяться до поштових скриньок (mailboxes). Щоб отримати тільки список cmdlet, скористайтеся where для фільтрації результатів роботи get-excommand:


get-excommand *ailbox* /
where {$.Name -eq «Cmdlet»}



Вивчайте PowerShell


Звичайно, спочатку самостійно створені сценарії на PowerShell не будуть шедеврами. Поки PowerShell не стане звичним, поки не будуть вивчені всі способи його застосування, напевно, ви будете думати про PowerShell як про такий собі додаток до вже існуючих методів написання сценаріїв. Я рекомендую для вивчення книгу Andy Oakley Monad і Web-ресурс Windows PowerShell Quick Start, який є частиною Windows PowerShell Wiki на Channel9 компанії Microsoft (http://channel9.msdn.com/wiki/default.aspx/ Channel9.WindowsPowerShellQuickStart).


Поль Робішо – Головний інженер компанії 3sharp, має сертифікати MCSE і Exchange MVP. Автор кількох книг, у тому числі The Exchange Server Cookbook (видавництво O'Reilly and Associates), і творець Web-сайту http://www.exchangefaq.org . ( troubleshooter@robichaux.net )

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*