PowerShell: запитання й відповіді :: Журнал СА 3.2008

ВАСИЛЬ ГУСЄВ   PowerShell: запитання й відповіді   Windows PowerShell все наполегливіше входить в життя системних адміністраторів ВАСИЛЬ ГУСЄВ

PowerShell: запитання й відповіді

Windows PowerShell все наполегливіше входить в життя системних адміністраторів. Якщо раніше можна було ігнорувати «нову забаву Microsoft з пафосною назвою", то зараз це все складніше і складніше.

Підтримка PowerShell стала обов'язковою (в розумних межах) для майбутніх серверних продуктів Microsoft, та й інші компанії не втрималися від того, щоб використовувати цей засіб автоматизації в своїх продуктах. Наприклад, VMware готує VI Toolkit - оснащення для автоматизації та управління VMware ESX і VMware VirtualCenter, а Intel випустила набір командлетів для управління WebSphere MQ. І це лише найгучніші імена. Давно стало зрозуміло, що PowerShell залишиться надовго. І треба сказати - це здорово!

Будучи неймовірно потужним інструментом автоматизації, PowerShell ще і дуже зручний і простий у вивченні. Безліч стандартних псевдонімів і вміння прозоро працювати з класичними утилітами командного рядка полегшать перехід любителям cmd.exe і інших оболонок. Але тим не менше це абсолютно іншу мову і зовсім інший підхід до роботи, тому у фахівців, початківців освоювати PowerShell, неминуче виникають питання. Я зібрав питання, які люди мені задавали, які я зустрічав на просторах Інтернету, ну і ще трошки додав сам, зі свого досвіду роботи. І в цій статті постараюся дати на них відповіді.

Що таке PowerShell?

Традиційна формулювання звучить так: «мова сценаріїв і оболонка командного рядка нового покоління». Раніше був відомий під кодовим ім'ям «Monad».

Навіщо він мені потрібен, коли є VB Script?

Платформа Windows довгий час була відсталою в області командного рядка і скриптів. Успадкований від DOS command.com, що перетворився потім в cmd.exe, Visual Basic Script та зрідка JavaScript і Perl. Ось і все, що було у адміністраторів. Але вирішивши завойовувати напрямок серверних операційних систем, фахівці Microsoft зрозуміли, що без командного рядка - успіху не бачити. Спочатку з'явилася величезна кількість утиліт, таких як netsh, diskpart, fsutil. Але практично всі вони володіють власним синтаксисом, виводять інформацію в різному вигляді, так і для роботи з ними все одно потрібна повноцінна оболонка. Та й ресурси Com-об'єктів теж хочеться використовувати за допомогою чого-небудь більш зручного, ніж VB Script. І для цього був створений PowerShell. Створювався він з нуля, не оглядаючись на сумісність (як cmd) і саме для системних адміністраторів (на відміну від VBS). PowerShell увібрав в себе кращі елементи з безлічі мов, наприклад Perl, C # або PHP, але при цьому приніс в світ командного рядка такі речі, як об'єктні конвеєри або можливість використання .Net Framework. А з огляду на ще величезний інтерес виробників програмного забезпечення до PowerShell, стає зрозуміло: вчити PowerShell - потрібно.

Чи варто починати вивчати PowerShell зараз? Може краще почекати, коли вийде версія 2.0?

Сенсу чекати другої версії немає ніякого. Вона не змінить мови, лише додасть йому нові можливості. Сумісність з першою версією є головним пріоритетом розробників. Та й доступна на момент написання статті версія - лише CTP (Community Technology Preview), тобто навіть до Beta-версії PowerShell 2.0 не доріс.

А все-таки, що буде нового в PowerShell 2.0?

Деякі нововведення з тих, на які вже зараз можна подивитися в CTP:

  • Віддалене виконання команд (PowerShell Remoting) - використання технології WinRM для виконання команд PowerShell на одному або безлічі віддалених комп'ютерів, паралельно або послідовно. Ну і звичайно, можливість відстежувати їх стан і отримувати результати виконання.
  • Отладчик в консолі - до Командлети Set-PSDebug додадуться нові: Enable-PSBreakPoint, Disable-PSBreakPoint, Get-PSBreakPoint, Invoke-PSBreakPoint, New-PSBreak Point, Remove-PSBreakPoint, що дозволяють працювати з налагоджувальними «точками зупинки» в скриптах. Та так добре, що можуть позаздрити багато просунуті мови програмування. І все це з командного рядка.
  • Покращення роботи з WMI - нові командлети Invoke-WmiMethod, Remove-WmiObject, Set-WmiInstance, ну і деякі поліпшення в роботі Get-WmiObject.
  • Фонові роботи (Background Jobs) - Хоч їх можна використовувати вже в 1.0, офіційна версія не завадить. Це можливість виконувати команди або цілі скрипти в тлі, паралельно основній роботі.
  • Графічний Host - варіант графічної оболонки від авторів мови.
  • Покращення в Командлети Select-String - новий командлет Out-Grid, що дозволяє виводити дані у вікні з таблицею. Оператори -Join, -Split для полегшення роботи з текстовими рядками.
  • ScriptCmdlet - можливість створення командлетів тільки за допомогою коду PowerShell, без застосування C # або Visual Basic .Net

І багато іншого…

На яких операційних системах можна використовувати PowerShell?

Windows XP SP 2, Windows Server 2003, Windows Vista, Windows Server 2008. Хоча і заявлено, що PowerShell не підтримувану Home-версіях Windows, він на них прекрасно працює. А ось власникам Windows 2000 - не пощастило, PowerShell на цій системі (і на всіх попередніх) працювати не буде.

Безкоштовний чи PowerShell? Як його можна отримати?

PowerShell безкоштовний. Завантажити його можна на сторінці http://www.microsoft.com/powershell/download . Хочу звернути увагу, що PowerShell (разом з усією вбудованою і додається документацією) доступний російською мовою. Отримати його можна, скачавши Localized Package.

На цій сторінці немає версії для Windows 2008. Що робити?

PowerShell входить в стандартну поставку Windows 2008, тобто завантажувати його не потрібно. Встановити його можна за допомогою Server Manager, вибравши «Add Features».

А чи можна використовувати PowerShell в режимі установки Windows 2008 Server Core?

На жаль поки що ні. Це пов'язано з відсутністю на Server Core .Net Framework необхідного PowerShell для роботи. З'явиться він там не раніше наступного релізу. Чи буде це Windows 2008 Release 2 або взагалі наступна версія - невідомо.

У яких продуктах використовується або буде використовуватися PowerShell?

Exchange Server 2007, SC Operations Manager, SC Virtual Machine Manager, SQL Server 2008, SC Data Protection Manager 2007, Windows Compute Cluster Server 2007, Quest Management Shell for Active Directory, Special Operations Software Specops Command, IBM WebSphere MQ, VMWare VI Toolkit, Quest ActiveRoles Server і безліч інших.

У мене в консолі PowerShell проблеми з відображенням російських символів, що робити?

Сам по собі PowerShell прекрасно підтримує Unicode, чого не скажеш про оболонці командного рядка Windows, що дісталася від cmd.exe. Але і це можна поправити. Для початку переконайтеся, що в регіональних настройках, в опції «Мова для програм, які не підтримують Unicode», встановлено російську мову. Якщо і це не допомагає - спробуйте змінити шрифт, що використовується в консолі, наприклад на Lucida Console.

Російські символи в консолі PowerShell

Не хочу працювати в цьому жахливому чорному вікні. Хочу прозоре вікно і інші «блага цивілізації». Куди податися?

Насправді PowerShell.exe - це лише простенький інтерфейс для мови, так званий Хост. І його легко можна змінити на альтернативу, яких уже чимало написано. Наприклад, жахливою своїми можливостями PowerShell Plus (безкоштовний для некомерційного використання) або PowerShell Analyzer, що надає інтерфейс, аналогічний SQL Analyzer. Обидва доступні для скачування на сторінці http://www.powershell.com . PoshConsole - хост, заснований на Windows Presentation Foundation, можна скачати тут - http://www.codeplex.com/PoshConsole . А фанати FAR напевно знайдуть цікавою можливість використовувати PowerShell в улюбленій програмі - http://code.google.com/p/farnet/downloads/list . Ну і програмісти теж не залишаться обділеними - VS Command Shell дозволяє виконувати команди PowerShell з Visual Studio - http://www.codeplex.com/VSCmdShell .

Альтернативна оболонка для PowerShell - PowerShell Plus

А як щодо альтернативи блокноту для написання скриптів?

Для початку - непогані редактори вбудовані в вищезгадані PowerShell Plus і PowerShell Analyzer. Відома скриптер компанія Sapien додала підтримку PowerShell в своє середовище розробки Primal Script ( http://www.primalscript.com ), І випустила PrimalScope - http://www.primalscope.com . Ну а сам я користуюся шустренький редактором PowerGUI з прекрасним автоматичним доповненням команд та параметрів PowerShell і об'єктів .Net. Крім того, він володіє чудовим отладчиком та багато інших переваг. До речі, більшість його розробників - наші співвітчизники.

Редагування профілю PowerShell за допомогою PowerGUI Script Editor

Як виконати команду на іншому комп'ютері?

На жаль, PowerShell 1.0 не підтримує можливість виконання команд на іншому комп'ютері. Хоча в більшості випадків дистанційна робота і можлива завдяки WMI, .Net, іноді хочеться саме виконати команду PowerShell на іншій системі. А ще здорово б отримати результати виконання у вигляді об'єктів ... На сьогоднішній день існує 3 виходи з цього становища: перший це почекати PowerShell 2.0. Там «Remoting» буде на висоті.

Але навіщо чекати, якщо у нас є можливості PowerShell? Вже зараз доступна функція Invoke-RemoteCommand, використовують WinRS (як і PowerShell 2.0) для виконання команд: http://blogs.msdn.com/powershell/archive/2008/02/29/remoting-using-powershell-v1.aspx .

Ну і, крім того, можна зробити скрипт Invoke-RemoteExpression використовує утиліту PsExec.exe від SysInternals: http://www.leeholmes.com/blog/UsingPowerShellAndPsExecToInvokeExpressionsOnRemoteComputers.aspx .

Все здорово, але які мінуси у PowerShell?

Їх, на щастя, небагато, але вони все ж є.

  • PowerShell не працює під Windows 2000. Звичайно, він не працює і під Windows 3.11 або 95, але тільки Windows 2000 поки що досить популярний. Втім, звичайно, можна використовувати WMI для віддаленої роботи з цією версією.
  • PowerShell не відрізняється великою швидкістю виконання. З цим важко сперечатися, навіть розробники це визнають. Але для скриптового мови це не є таким вже й великим пріоритетом - ніхто не буде писати на PowerShell системи обробки величезних масивів даних. Для цього є SQL і безліч спеціалізованих програм. Зате PowerShell дозволяє дуже швидко створювати код для автоматизації завдань і внаслідок цього вигравати величезну кількість часу.
  • PowerShell вимагає установки. У всякому разі на Windows XP, Vista і 2003. У Windows 2008 і наступних версіях він буде вбудованим компонентом системи, але поки це є часто значущим недоліком. Хоча варто відзначити, що всі стандартні методи автоматизації установки працюють. Дистрибутив PowerShell для Windows XP і Windows 2003 розуміє ключі / quiet / passive і / norestart, а пакет .msu для Windows Vista взагалі можна легко інтегрувати в дистрибутив як компонент операційної системи. Детальніше можна дізнатися тут - http://www.specopssoft.com/powershell .

Отже теоретична частина питань позаду. Найбільш нетерплячі читачі вже встановили PowerShell, прочитали вступну статтю Андрія Бірюкова в №11 за 2007 р, і, виконавши команду «Set-ExecutionPolicy RemoteSigned» (для дозволу виконання скриптів), приступили до вивчення. Тепер починають виникати інші питання - практичні.

Я знайшов в Інтернеті скрипт PowerShell, який починається зі слова function, як мені його застосувати?

Зазвичай можна просто скопіювати тіло скрипта в буфер обміну і вставити у вікно консолі, натиснувши потім пару раз. Після цього можна буде застосовувати цю функцію майже як командлет. Але якщо ви збираєтеся застосовувати його неодноразово - краще помістити його до себе в файл профілю, щоб він довантажувати автоматично. Або зробити окремий файл, наприклад MyFunctions.ps1, і вже його довантажувати в профілі, наприклад такою командою:

. c: ScriptsMyFunctions.ps1

Зверніть увагу на точку перед викликом скрипта. Вона вказує PowerShell, що його необхідно виконати в поточному оточенні і зберегти всі оголошені в ньому функції і змінні.

Я знайшов скрипт, який починається зі слова Param, що робити в цьому випадку?

Передбачається, що ви помістіть цей скрипт в файл .ps1 і будете викликати наступним чином:

MyScript.ps1

Якщо скрипт знаходиться в каталозі, який не міститься в змінній оточення Path, то необхідно вказати повний шлях до нього. Але якщо він розташований в поточному каталозі PowerShell, то можна зробити так:

.MyScript.ps1

Точка в даному випадку позначає поточний каталог.

Як використовувати змінні оточення?

У PowerShell змінні оточення представлені на спеціальному віртуальному диску - Env :. Тобто тепер можна просто перейти на цей диск за допомогою cd Env: і подивитися змінні оточення, використавши команду Dir (ну або Ls, кому як подобається - все одно це псевдоніми для Get-ChildItem). Якщо ж потрібно використовувати змінну оточення, застосовується наступна конструкція:

# Виводимо ім'я комп'ютера на екран
$ Env: computername
# Переходимо в каталог Windows
cd $ env: windir
"Welcome to" + $ env: computername + "!"

Більш докладно можна прочитати у вбудованій довідці виконавши команду:

Get-Help About_Environment_variable

Як з результатів виконання команди вибрати тільки об'єкти, що задовольняють певним умовам?

Так як в PowerShell використовуються об'єкти, вже не потрібно розбирати рядки, що видаються командою, на частини. Досить просто працювати з властивостями об'єктів.

Наприклад, для відбору об'єктів можна використовувати командлет Where-Object або його псевдоніми - Where і знак питання.

Вибираємо з поточного каталогу тільки файли з розміром більше двох кілобайт:

dir | where {$ _. length -ge 2kb}

Як перший аргумент команди Where-Object використовується скриптова блок, якщо вираз в ньому істинно, то об'єкт передається по конвеєру далі. Усередині блоку, змінна $ _ представляє поточний об'єкт, і ми можемо порівняти його з якимось критерієм з чимось ще, або провести будь-які інші обчислення. В даному випадку властивість файлу Length (розмір файлу в байтах) за допомогою оператора -ge (більше або дорівнює) порівнюється з значенням 2kb (kb - вбудований множник, рівний 1024).

Get-WmiObject win32_share | where {$ _. path -like "?:"}

А тут, отримавши з WMI список об'єктів win32_share, ми відбираємо лише ті з них, у яких властивість Path підпадає під зазначену маску.

Аналогічним чином отримуємо всі процеси, запущені не з папки Windows і її підпапок, і нібито завершуємо їх. Якщо прибрати ключ -whatif, то вони будуть завершені насправді.

ps | where {$ _. path -notLike "c: windows *"} | kill -whatif

В цьому випадку ми використовуємо псевдонім ps для Get-Process і kill для Stop-Process. Але стоп, якщо просто виконати команду Get-Process, то ми не побачимо властивості Path! І виникає наступне питання:

Як дізнатися які властивості є у об'єкта?

Третя, са sмая корисна команда в PowerShell після Get-Command і Get-Help, це Get-Member. Перенаправивши в неї об'єкт (або їх колекцію), можна побачити властивості і методи, якими ці об'єкти мають. Наприклад, виконавши наступну команду, можна побачити все властивості об'єктів типу System.Diagnostics.Process (саме такі нам повертає команда Get-Process).

Get-Process | Get-Member -MemberType * property

Є і більш наочний спосіб подивитися властивості об'єкта:

$ E = Get-Process explorer
$ E | Format-List -Property *

Тут ми спочатку поміщаємо в змінну $ e об'єкт, який представляє процес Explorer, а потім виводимо його на екран, форматуючи у вигляді списку з допомогою командлета Format-List. Для Format-List можна вказати список властивостей, які потрібно отримати, і в нашому випадку це проста маска - *. Коротше кажучи, все властивості. Можна застосовувати псевдонім і просто опустити ім'я параметра - так буде значно коротшим.

$ E | fl *

Згадаю ще про третій спосіб. Коли ви наберете $ e та натиснете клавішу табуляції, - будуть перебиратися всі властивості і методи цього об'єкту. Гортати їх у зворотний бік можна поєднанням +.

Скрипт PowerTab доповнює властивості об'єктів не гірше Visual Studio

Зрозуміло, таким же чином можна досліджувати і інші об'єкти: .Net, WMI, COM, ADSI або будь-які інші.

Як з текстового файлу вибрати рядки, що містять певний текст? І як щодо регулярних виразів?

Вже не знаю, чому розробники не зробили для командлет Select-String псевдонім grep, але нічого не заважає зробити його самостійно:

New-Alias ​​grep Select-String

Втім, точною копією grep це все одно не буде, так що я вважаю за краще ще більш короткий варіант:

New-Alias ​​ss Select-String

Ну і далі аналізуємо файли:

Select-String 3389 C: WindowsSystem32driversetcservices

Ця команда поверне два рядки, в наступному форматі: «имя_файла: номер_рядка: текст».

Якщо ж у вас завдання отримати тільки текст, - не треба намагатися парсити ці рядки! Командлет Select-String теж повертає об'єкти, і досить лише вибрати потрібну властивість, в даному випадку це Line.

ss 3389 C: WindowsSystem32driversetcservices |% {$ _. Line}

Тут я використав% - це псевдонім для командлет ForEach-Object. І для кожного об'єкта отримуємо його властивість Line.

Я показав лише маленьку дещицю можливостей Select-String. Цей командлет працює з регулярними виразами і може обробляти кілька файлів відразу. Можна, наприклад, перенаправити на нього висновок команди Dir:

dir c: windows * .log | Select-String "Error"

Раз вже заговорили про регулярні вирази, як ще можна з ними працювати?

Наступний абзац для тих, хто поки не знайомий з регулярними виразами. Ви напевно не раз використовували маски «*» або «?» Для позначення декількох схожих імен файлів і інших подібних завдань в командному рядку. Регулярні вирази - це, можна сказати, продовження ідеї. Хоча їх синтаксис набагато складніше, натомість вони дозволяють описувати практично будь-які умови, витягувати з рядків необхідні підрядка і ще багато корисних речей. Детально на синтаксисі я зупинятися не буду, навіть його короткий огляд - це тема для окремої статті.

Крім командлет Select-String, нам доступний ще оператор -match. Він дозволяє перевірити - чи підпадає рядок під регулярний вираз і повертає відповідно $ True або $ False в якості результату.

Наприклад, наступна команда поверне $ True.

"[email protected]" -match "S + @ S +"

Про всяк випадок поясню: «S +» означає «будь-який символ, крім пробілу (« S ») в кількості від 1 і більше (« + »)». Ну а символ @ на увазі сам себе.

Звичайно, можна використовувати ще і «групи захоплення», щоб розбивати рядок на компоненти. Ці групи створюються шляхом поміщення окремих елементів регулярного виразу у круглих дужках. Після виконання оператора -match групи поміщаються в спеціальну змінну $ matches.

if ( "[email protected]" -match "(S +) @ (S +)") {$ matches [2]}

Тут буде повернуто вміст другої групи - домен поштової адреси.

Підтримуються практично всі можливості регулярних виразів .Net.

Так, наприклад, використовуються іменовані групи:

"Е-mail: [email protected]" -match "(? <Ім'я> S +) @ (? <Домен> S +)"

Тепер можна отримати значення так:

$ Matches [ "Домен"]

Або навіть так:

$ matches.Імя

Ще один оператор, який працює з регулярними виразами, це -replace. З його допомогою легко замінити текст, використовуючи все ті ж регулярні вирази. Як перший операнд вказується обробляється рядок (або масив рядків), а в якості другого - масив з двох елементів.

Перший з них - шукане вираз, а другий - то, на що буде зроблена заміна.

Так, наприклад, наступна команда поверне рядок «PowerShell»:

"SimpleShell" -replace "Simple", "Power"

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

"PowerShell" -replace "[wrel]"

Ця команда видалить з рядка всі символи w, r, e і l. В результаті ми отримаємо «Posh». У -replace теж можна застосовувати групи захоплення:

"PowerShell" -replace "(. {5}) (. {5})", "$ 2 $ 1"

Цей рядок поверне нам значення «ShellPower».

До речі, я не просто так помістив останній рядок в одинарні лапки. Справа в тому, що символ $ використовується в PowerShell для позначення змінних, і в рядку, оточеній подвійними лапками, він спробує замінити $ 1 і $ 2 значеннями відповідних змінних.

У разі ж, якщо всіх перерахованих вище методів недостатньо, можна використовувати клас System.Text.RegularExpressions.Regex з .Net Framework. Створити його екземпляр можна, наприклад, таким чином:

[Regex] $ r = "[,;]"

А потім подивитися всі його методи за допомогою команди Get-Member:

$ R | Get-Member -MemberType method

Так тільки за допомогою System.Text.RegularExpressions.Regex можна застосувати метод Split:

$ R.Split ( "1; 2,3,4,5; 6")

Як змусити PowerShell порівнювати рядки (-eq, -match, -like) з огляду на регістр символів?

Всі оператори, що працюють з рядками, мають версії, чутливі до регістру символів. Відрізняються вони лише приставленої спереду буквою «c» (від Case sensitive).

Так, команда:

"Test" -eq "test"

поверне $ True, а ось:

"Test" -ceq "test"

вже $ False. До речі, те ж саме правило відноситься і до операторів -match і -replace.

Як подивитися що це за команди - «%», «gps» або «ft»?

Досить скористатися Командлети Get-Command:

Get-Command%, gps, ft

Виконавши цю команду, ми побачимо, що перераховані вище символи - псевдоніми (Alias) для командлетів Foreach-Object, Get-Process і Format-Table відповідно.

Як аргумент може бути не тільки командлет або алиас PowerShell. В даному випадку ми дізнаємося повний шлях до виконуваного файлу ping.exe.

Get-Command ping

Як змінити запрошення командного рядка?

Для цього досить перевизначити функцію Prompt, наприклад, отримати запрошення в форматі користувач @ комп'ютер: каталог> можна таким чином:

# Назва функції
function prompt {
# Бонус! Виводимо повний шлях в заголовок вікна
$ Host.UI.RawUI.WindowTitle = Get-Location;
# Отримуємо з змінної оточення ім'я користувача
$ Env: username + "@" +
# Ім'я комп'ютера
$ Env: computername + ":" +
# І останній елемент поточного каталогу
(Get-location | split-path -leaf) + ">"}

Безумовно, виконувати такий код кожного разу при запуску PowerShell не дуже то цікаво, тому виникає наступне питання:

Як створити / змінити профіль?

Про всяк випадок уточню - профіль PowerShell - це файл скрипта, який виконується автоматично при кожному запуску консолі PowerShell. Спочатку при установці PowerShell не створює його, але це легко виправити за допомогою такої команди:

New-Item -type file -Path $ PROFILE -Force

Це створить порожній файл профілю. Відкрити його найпростіше так:

notepad $ PROFILE

Ну і далі все в ваших руках. Туди можна помістити команди для завантаження необхідних оснасток, оголошення функцій і псевдонімів і т. П.

Зрозумів, що діватися нікуди, хочу вчитися. Яка література є по PowerShell?

Літератури безліч, але, на жаль, поки дуже мало що є російською мовою. Правда, дещо все ж є.

  • Додається документація переведена на кілька мов, включаючи російську! Її можна отримати, або встановивши локалізований дистрибутив PowerShell (меню «Пуск / Всі програми / Windows PowerShell»), або скачавши окремо WindowsPowerShell_Localized_DocumentationPack.zip зі сторінки http://www.microsoft.com/downloads/details.aspx?FamilyID=b4720b00-9a66-430f-bd56-ec48bfca154f .
  • Якщо ви встановили локалізований PowerShell, то у вас буде не тільки російська документація, а й вбудована довідка. Її можна подивитися за допомогою команди Get-Help або Man - кому як звичніше.
  • Стаття «Знайомимося з PowerShell - нової командної оболонкою» Андрія Бірюкова в журналі за листопад 2007 року. Також вона доступна в Інтернеті за адресою http://www.samag.ru/cgi-bin/go.pl?q=articles;n=11.2007;a=01 .
  • Російськомовні блоги (з PowerShell так склалося, що щоденники розробників і просто ентузіастів є безцінним джерелом інформації про мову. Ну і, крім того, там можна знайти безліч прикладів скриптів. На російській мові мені поки відомі такі активні блоги:

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

  • PowerShell in Action - це книга від одного з розробників PowerShell Брюса Пейета (Bruce Payette). Чудова книга не тільки для початківців, а й для профі. У першій частині поступово розкриваються основи мови, але при цьому пояснюється не тільки «Як воно працює?» Але і «Чому воно працює так?». У другій же частині книги слідують більш складні теми з прикладами реальних завдань.
  • PowerShell Cookbook від O'Reilly. Ця книга чудово доповнює PowerShell in Action, використовуючи зовсім інший підхід. Практично вся книга складена з пар завдання - рішення, що перетворює її в чудовий збірник рецептів.

Ще варто згадати пару книг від працівника німецького підрозділу Microsoft - Frank Koch. Ці книги доступні англійською та німецькою мовами для вільного скачування в Інтернеті.

Англомовні блоги. Варто подивитися, навіть якщо вам не дуже легко сприймати англійську мову, адже PowerShell часто виконує ту задачу, для якої був придуманий есперанто.

  • http://blogs.msdn.com/powershell - офіційний блог PowerShell. Розробники пишуть сюди цікаві новини про PowerShell, цікавий код і повідомляють про цікаві події.
  • http://thepowershellguy.com - блог // o //, одного з Гуру PowerShell, автора PowerTab і PowerShell WmiExplorer. Тут можна почитати багато цікавого про роботу з ADSI, WMI і подивитися на безліч класних скриптів.
  • http://dmitrysotnikov.wordpress.com - англомовний блог Дмитра Сотникова.
  • http://www.leeholmes.com/blog - щоденник Lee Holmes. Один з розробників PowerShell, а також автор PowerShell Cookbook і системи автоматичного годування кішки за допомогою PowerShell скрипта.

Ну і, звичайно, варто заглянути на офіційну сторінку - http://microsoft.com/powershell і в Script Center - http://www.microsoft.com/technet/scriptcenter , Де можна знайти, наприклад, керівництво по конвертації скриптів з VBScript - http://www.microsoft.com/technet/scriptcenter/topics/winpsh/convert .

До речі, всі ці посилання (і ще багато інших) доступні на моїй сторінці, де я їх збираю, - http://windowspowershell.ru або http://xaegr.wordpress.com/poshlinks .

Що таке PowerShell?
Навіщо він мені потрібен, коли є VB Script?
Чи варто починати вивчати PowerShell зараз?
Безкоштовний чи PowerShell?
Як його можна отримати?
2008. Що робити?
А чи можна використовувати PowerShell в режимі установки Windows 2008 Server Core?
У яких продуктах використовується або буде використовуватися PowerShell?
У мене в консолі PowerShell проблеми з відображенням російських символів, що робити?
Куди податися?