Сервісний центр VPSGroup ремонт комп'ютерної техніки, заправка картриджів, ремонт оргтехніки, Київ, Виставковий центр, Васильківська, 55

PowerShell 30 Огляд нових можливостей (частина 2).

Продовжуємо тему нововведень в PowerShell 3.0. У першій частині ми розглянули загальні зміни, в основному стосуються зручності роботи. Сьогодні ми торкнемося технологій, призначених для автоматизації та віддаленої роботи, в тому числі через Web.

Sheduled Jobs

Для початку згадаємо, що з себе представляють ці самі Jobs.Фонові завдання (Jobs) з'явилися ще в другому PowerShell. Вони дають можливість виконати команду «у фоновому режимі», без взаємодії з поточним сеансом користувача. Це досить зручно, адже поки завдання виконується у фоновому режимі, можна продовжувати роботу в поточному сеансі, не чекаючи його завершення.

Для прикладу запустимо фонове завдання з ім'ям Hello, яке виводить вітання активного користувача:

Start-Job -Name Hello {Write-Output "Hello, $ env: username"}

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

Get-Job -Name Hello | Receive-Job

Ця команда візьме Job по імені Hello і видасть результат його роботи.



В PowerShell 3.0 з'явилася можливість планувати виконання фонових завдань прямо з консолі. Наприклад я хочу отримати вітання не зараз, а о 4 годині дня. Створюю тригер:

$ t = New-JobTrigger -Once -At 4pm

І реєструю завдання, яке запуститься з цього триггеру:

Register-SheduledJob - Name Hello -ScriptBlock {Write-Output "Hello, $ env: username"} -Trigger $ t

Тепер рівно о 4 годині дня завдання Hello буде запущено.



І щоб в цьому переконатися, відкриємо Task Sheduler і в розділі PowerShell \ SheduledJobs побачимо наше завдання .



Планувати виконання завдання можна як одноразово, в певний час, так і періодично (напр. кожен понеділок). Також запуск завдання можна прив'язати до певної події в системі, наприклад до завантаження або входу в комп'ютер.

Workflow

Windows PowerShell Workflow, або просто робочі процеси - нововведення, що вперше з'явилося в PowerShell 3.0. Workflow в PowerShell засновані на Windows Workflow Foundation і призначені для автоматизації складних процесів, які займають багато часу і виконуються у великих масштабах.Простіше кажучи, Workflow призначений для надійного виконання довгострокових завдань на безлічі комп'ютерів.

Workflow забезпечують підтримку паралельних обчислень, повторних операцій і головне - можливість припиняти і відновлювати роботу. Наприклад, робочий процес може виявити проблему, яка вимагає ручного втручання, повідомити про це користувача і призупинити виконання завдання до тих пір, поки він не виправить ситуацію і не відновить процес.

Як приклад візьмемо все той же вітання і трохи його змінимо. Ця команда виведе вітання користувачеві, почекає 10 хвилин і потім попрощається з ним:

Write-Output "Hello, $ env: username!"; sleep 600; Write-Output "Good Bye!"

А тепер створимо робочий процес з ім'ям Hello:

workflow Hello {Write-Output -InputObject "Hello, $ env: username!"; Start-Sleep -Seconds 600; Write-Output -InputObject "Good Bye!"}

Що ми можемо зробити з цим робочим процесом? Чи можемо використовувати його як звичайну функцію, викликавши по імені, а можемо запустити як фонове завдання:

$ j = Hello -AsJob

За допомогою команди Suspend-Job призупинимо виконання завдання і подивимося, що вона встигла зробити.



А тепер увага, смертельний номер - ми закриємо сесію. Звичайний Job при цьому повинен загинути разом з результатами своєї роботи. Перевіримо. Відкриваємо нову сесію, робимо експорт модуля PSWorkflow і дивимося поточні завдання. Ось воно, наше завдання, знаходиться в стані Suspended.І ми можемо продовжите його виконання командою
Resume-Job з того місця, де воно було зупинено.



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

Стійкі сесії

Дистанційні сесії в PS 3.0 зроблені більш стійкими до проблем мережі. При розриві з'єднання PowerShell не закриває відразу віддалену сесію, а протягом 4 хвилин намагається відновити підключення.



Якщо протягом 4 хвилин підключення з'явиться, то сесія буде відновлена ​​а запущене в ній завдання виконано , в іншому випадку сесія буде роз'їдені.



Але це ще не все. При роз'єднанні сесія не видаляється, а перетворюється на стан disconnected, і до неї можна знову підключитися як з того ж, так і з будь-якого іншого комп'ютера.

Як приклад відкриємо віддалену сесію з ім'ям Test на комп'ютері SRV3 і запустимо в цій сесії команду, яка буде виводити всі запущені на комп'ютері процеси з інтервалом в 1 хвилину:

$ S = New-PSSession -Name Test -ComputerName SRV3
Invoke-Command -Session $ S {Get-Process | foreach {$ _; sleep 60} -AsJob

Після чого розірвемо сесію командою Disconnect-Session.Тепер сесія Test знаходиться в стані disconnected.



Заходимо на інший комп'ютер, відкриваємо консоль PowerShell, підключаємося до сесії Test:

Connect-PSSession -Name Test -ComputerName SRV3

І отримуємо результати роботи, запущеної в цій сесії:

Receive-PSSession -Name Test

Як бачите, завдання спокійно залишиться активним.



Файли конфігурації сесії

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

Наведу простий приклад. Отже, ми хочемо щоб в віддаленому сеансі були доступні тільки командлети для перегляду. Створюємо новий файл конфігурації OnlyGet.pssc:

New-PSSessionConfigurationFile -VisibleCmdlets Get- * -Path C: \ PS \ OnlyGet.pssc

Файл створений і його навіть можна відкрити і подивитися в звичайному блокноті командою:

Invoke-Item -Path C: \ PS \ OnlyGet.pssc



Потім, використовуючи створений файл, реєструємо нову конфігурацію з ім'ям GetOnly:

Register-PSSessionConfiguration -Name GetOnly -Path C: \ PS \ OnlyGet.pssc

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



підключити до віддаленого комп'ютера SRV3, використовуючи нову конфігурацію і подивимося поточний час і дату:

$ S = New-PSSession -ComputerName SRV3 -ConfigurationName GetOnly
Invoke-Command -Session $ S {Get-Date}

Команда виконається успішно. А тепер спробуємо змінити час, зсунувши його на 10 хвилин назад:

Invoke-Command -Session $ S {Set-Date -Ajust -0: 10: 0}

І отримаємо помилку , оскільки в даній сесії видно тільки командлети Get.

Відкриємо ще одну сесію на SRV3 з іншою конфігурацією, в якій дозволені командлети Set, і пробуємо ще раз змінити час. На цей раз команда буде виконана.



Командлети Web

Ще PowerShell 3.0 вміє звертатися до веб-сервісів безпосередньо, без посередників. Наприклад, я можу звернеться до головній сторінці свого блогу і отримати список посилань:

$ w = Invoke-WebRequest teamhelps.pp.ua
$ w.links | fl innerText, href



Або взяти RSS фід і вивести з нього назви статей і посилання:

Invoke-RestMethod http://feeds/feedburner.com/windowsnotesru | fl Title, Link



Web Access

І якщо вже мова зайшла про Web, то згадаю про ще одну цікаву можливість - PowerShell Web Access. З її допомогою можна підключатися до віддалених серверів і працювати з PowerShell прямо в веб-браузері.Оскільки я вже описував цю технологію в статті PowerShell Web Access в Windows Server 2012, не буду на ній зупинятися. Скажу лише, що все, що потрібно для роботи з PowerShell Web Access - це будь-який пристрій (телефон, планшет і т.п.), що має доступ в інтернет і браузер з підтримкою JavaScript і включеними cookies.



На цьому, мабуть, закінчу. Звичайно, я описав далеко не всі можливості PowerShell 3.0, так що в найближчому майбутньому планую повернутися до цієї теми більш докладно. Також про PowerShell 3.0 можна почитати (англійською) тут http://technet.microsoft.com/en-us/library/hh857339.aspx і тут http://technet.мікрософт.ком/ен-ус/лібрарі/нн847833.аспс. .