Виведення даних у PowerShell. Цікаві приклади PowerShell

Існують речі, які ми виконуємо щодня, будучи адміністраторами мережі WindowsАле якщо б нас попросили зробити їх за допомогою командного рядка, на відміну від адміністраторів Linux, для нас, адміністраторів Windows, це було б дуже проблематично. Windows завжди був слабкий, коли йшлося про інструменти командного рядка. На мій погляд, все змінилося з появою Windows Powershell. За допомогою Powershell (або інакше PS) можна виконати стільки різних функцій, які ми не могли виконувати раніше. У цій статті ми зосередимося на тому, як Powershell може допомогти нам виконувати деякі спільні мережеві функції з командного рядка. Продовжуйте читати, щоб дізнатися більше!

Що таке PowerShell?

Powershell - це встановлювана функція Windows Server 2008. Щоб інсталювати Powershell, потрібно встановити функцію Powershell за допомогою майстра додавання функцій.

Процес установки займає близько хвилини, і як тільки компонент встановлений, у вас з'являється доступ до дивовижної мови сценаріїв командного рядка. На відміну від інших сценарних мов Windows, Powershell створено виключно для системних адміністраторів. Powershell використовує .NET та команди ("cmdlets" або "command-lets") у своїй роботі. Як користувач PS, ви можете використовувати команди окремо або зв'язувати їх разом, щоб виконувати більш складні завдання. Коли ви встановили PS, ви можете запуститиПуск -> Усі програми -> Windows Powershell 1.0 , і натиснути Windows PowerShell

. На цьому етапі має з'явитися блакитне вікно CLI, яке виглядає, як показано на малюнку 1. Малюнок 1:Вікно Windows

Powershell Command

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

PS C:\Users\Administrators Тепер, коли PowerShell встановлено і йоговікно відчинене

дозвольте мені показати вам деякі спільні мережеві завдання, які можна виконати в PS.

Перерахувати IP адреси вашого сервера Щоб отримати список IP адрес на вашомусервері Windows

2008 Server, вам потрібно використовувати наступну команду:

Ось як виглядають дані після використання цієї команди на моєму Windows 2008 Server:


Рисунок 2: Перелік IP-адрес за допомогою Windows Powershell

Як видно з малюнка, вихідні дані показують нам, що я маю один адаптер з IP V4 адресою та IP V6 адресою на цьому сервері Windows 2008 Server. Само собою, це не є чимось дивним, але подумайте про те, що ви зможете зробити з цим, використовуючи інші сценарні функції.

Як вчить нас керівництво користувачів powershell, результуючі дані є масивом і ви можете подивитися IP адресу лише надіславши ці дані в "Select-Object" (після відключення IPV6), приблизно так:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE - ComputerName . | Select-Object -ExpandProperty IPAddress


Рисунок 3: Перелік IP адреси ТІЛЬКИ з Windows Powershell

Отримання списку конфігурації мережного адаптера за допомогою Powershell

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

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE "ComputerName .

Хоча ця стаття присвячена розгляду використання PS в Windows Server 2008, ця утиліта також може використовуватися і в Windows XP, Vista або Server 2003. Ось приклад отриманих даних команди, запущеної на моїй робочої станції Windows XP:


Рисунок 4: PowerShell показує конфігурацію мережевого адаптера Windows XP

Тестове опитування комп'ютера за допомогою PowerShell

Хоча командний рядок PS може виконувати всі звичайні команди Windows (наприклад тестове опитування), сильна сторона Powershell полягає в тому, що ви можете взяти отримані дані і легко змінити їх.

Ось приклад того, як це можна зробити, надано керівництвом користувача Windows Powershell. У цьому прикладі результати Win32_PingStatus аналізуються за допомогою Select-Object. У цьому випадку дані просто показують час відповіді та код статусу.

Ось команда, яка використовувалася:

Get-WmiObject -Class Win32_PingStatus -Filter "Address="127.0.0.1"" - ComputerName . | Select-Object -Property Address,ResponseTime,StatusCode

А ось результати використання команди на моїй машині Windows:

Рисунок 5: PowerShell дані показують статус опитування, аналізованого за допомогою Select-Object

Дозвіл спільного доступу до папки за допомогою Windows Powershell

Буду з вами відвертий. Використання команд Powershell не завжди таке просто, як використання існуючих команд Windows, з якими ви вже знайомі. Ось приклад.

Наступна команда PS забезпечить загальний доступдо папки в C:\temp як "davidtemp" і застосує до неї чудову команду:

(Get-WmiObject -List -ComputerName. | Where-Object -FilterScript ($_.Name -eq "Win32_Share")).InvokeMethod("Create",("C:\temp","davidtemp",0,25, "David"s Temp Folder"))

З іншого боку, ви могли просто використовувати вже перевірену та випробувану команду net share:

Net share davidtemp=C:\temp /remark:"David"s Temp Shared Folder"


Малюнок 6: PowerShell дані та традиційна команда net share

Зверніть увагу на те, що команда Powershell не просто не спрацювала, але видала мені страшну помилку. Я пробував цю команду на Windows XP і Vista, і я був адміністратором системи.

З іншого боку, команда net shareдуже проста і спрацювала з першої спроби. І хоча я намагаюся розповісти вам про принципи роботи з Powershell, не забувайте, що Powershell може використовувати традиційні мережеві команди Windows, які в багатьох випадках набагато простіше використовувати.

Однак ви можете опинитися в ситуації, коли ці традиційні команди не роблять всього того, що вам необхідно, і саме тут на допомогу прийде Powershell.

Інші мережеві та складніші команди

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

Однак, як тільки ви подолали труднощі навчання і навчилися використовувати цю мову, у вас буде інструмент, який є дуже ефективним і може заощаджувати ваш час. Як ви, можливо, помітили з попередніх прикладів, одним із параметрів для більшості команд Powershell є "computername". Коли ми ставимо крапку (".") замість комп'ютера (computername), це буделокальний хост (Наш комп'ютер). Однак ми також можемо замінювати будь-яку IP адресу або ім'якомп'ютера Windows

в домені, що дає нам можливість використовувати ці команди не тільки на нашому ПК, але й створювати потужні сценарії Powershell, які можна застосовувати на всіх комп'ютерах мережі.

Наприклад, ось команда, яка передає IP-адресу комп'ютера Dell через LAN:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE - ComputerName DELL9400


Рисунок 7: Результати Powershell отримання IP-адреси з віддаленого ПК

А ось збільшене зображення, що показує необхідну інформацію:


Рисунок 8: Збільшення вікна результатів Powershell отримання IP-адреси віддаленого ПК

Отже, можливість працювати з віддаленими комп'ютерами є основною функцією Powershell, проте ще однією потужною можливістю є можливість фільтрації даних та поєднання даних, отриманих від різних команд.

Погляньте на наступний приклад:

"127.0.0.1","localhost","research.microsoft.com" | ForEach-Object -Process (Get-WmiObject -Class Win32_PingStatus -Filter ("Address="" + $_ + "") -ComputerName .) | Select-Object -Property Address,ResponseTime,StatusCode

У цьому прикладі було отримано список IP-адрес та імен домену. Цей список було передано на "ForEach-Object". Для кожного з цих «об'єктів» (IP-адреса /доменні імена

), використовувався елемент "Get-WmiObject" PingStatus. Потім дані тестового опитування кожного імені домену були пропущені через "Select-Object", внаслідок чого були відображені лише адреси, час відповіді та коди статусу.

Малюнок 9: Тестове опитування за допомогою списку при поєднанні та опитуванні даних

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

Що ще треба знати?

Висновок Windows Powershell – це дужепотужна утиліта . У цій статті неможливо описати все те, що ви зможете зробити здопомогою Powershell але сподіваюся, що мені вдалося дати вам загальну картину можливостей цієї утиліти і надихнути вас на подальші дослідження в цій галузі. З кожним днем ​​з'являються нові книги, курси та безліч матеріалу в Інтернеті про функції Powershell, які можуть використовуватися системними адміністраторами Windows. Враховуючи таку сильну прихильність адміністраторів Windows дографічному інтерфейсу

, потрібен час на те, щоб Powershell була прийнята в тих компаніях, в яких не відчувають гостру необхідність у цьому інструменті.

Напевно, всі чули про PowerShell, але, напевно, не всім довелося з ним працювати. Для тих, хто тільки починає прокладати свій шлях у нетрі PowerShell, ми наводимо переклад посту, що вийшов на порталі 4sysops.com. У ньому розказано про 7 команд, які допоможуть тим, хто тільки-но почав працювати з PowerShell. За подробицями – ласкаво просимо під кат.

GET-HELP

Найперший та найголовніший командлет PowerShell – виклик довідки. За допомогою командлета Get-Help можна перевірити синтаксис, переглянути приклади використання та детальний опис параметрів будь-якого PowerShell командлета. Цей командлет примітний тим, що ви можете набрати Get-Help Services, щоб отримати список всіх командлетів, які підходять для роботи зі службами.
Приклад:
PS C:\> Get-Help Service

Ви можете вибрати будь-який командлет зі списку, виведеного на запит вище, щоб отримати довідку про нього. Наприклад,
PS C:\> Get-Help -Name Get-Service
Ви отримуєте всю інформацію про командлет Get-Service (розглянуто нижче).


GET-CONTENT

Читання вмісту файлів – найчастіша вимога для новачків, які намагаються вивчити PowerShell. Процедура читання файлів із PowerShell спрощується. Навіть нефахівець може читати вміст файлу, просто передавши його в командлет Get-Content.
приклад.
PS C:\> Get-Content C:\scripts\Computers.txt mytestpc1 techibee.com dummynotresolvinghost.com PS C:\>

Потрібно більше інформації про командлет? Скористайтеся Get-Help:
PS C:\> Get-Help Get-Content -Detailed

GET-SERVICE

Цей командлет перераховує всі служби, встановлені на комп'ютері. Ви можете використовувати його для отримання інформації про конкретну службу, сукупність служб або просто про всі служби на комп'ютері.
Приклад:
PS C:\> Get-Service wwansvc, spooler Status Name DisplayName ------ ---- ----------- Running spooler Print Spooler Stopped wwansvc WWAN AutoConfig PS C:\>



Тут ми запросили інформацію про дві служби wwansvc та spooler
Виводиться таблиця зі статусом служби, її ім'ям та ім'ям, що відображається.
Ми можемо бачити, що служба spooler запущена, а wwansvc зупинена

STOP-SERVICE І START-SERVICE

Запуск та зупинка служб – досить важливий момент у роботі адміністратора Windows. PowerShell має вбудовані командлети, які спрощують роботу адміністратора, не вимагаючи відкриття консолі MMC. Використовуючи ці командлети, Ви можете зупиняти/запускати служби як на локальних, так і на віддалених комп'ютерах.
Приклади:
Запуск/зупинення служби на локальному комп'ютері (на прикладі служби spooler):
PS C:\> Stop-Service -Name Spooler PS C:\> Start-Service -Name Spooler

Запуск/зупинка служби на віддаленому комп'ютері(Spooler):
PS C:\> $ServiceObj = Get-Service -ComputerName MyPC1 -Name spooler PS C:\> Stop-Service -InputObj $ServiceObj PS C:\> Start-Service -InputObj $ServiceObj

GET-PROCESS

Цей командлет дозволяє знати, які процеси запущені на локальних або віддалених комп'ютерах. Показуються ім'я та ID процесу, а також шлях до файлу, ім'я компанії, версія виконуваного файлута пам'ять, що використовується процесом.
Приклади:
Отримання інформації про процеси, запущені на локальному комп'ютері:

PS C:\> Get-Process


Введіть наступний командлет для отримання детальної інформаціїпро запущених процесах
PS C: Get-Process | Format-List * -Force

Отримання інформації про процеси, запущені на віддаленому комп'ютері:
PS C:\> Get-Process -ComputerName MYPC1 | Format-List * -Force

MYPC1 необхідно замінити на ім'я комп'ютера, з якого ви хочете отримати інформацію про запущені процеси.

STOP-PROCESS

Цей командлет зупиняє процес на локальному або віддаленому комп'ютері. Він бере ім'я або ID процесу та завершує цей процес. Це корисно в тих випадках, коли програма не відповідає.
Приклад:
Зупинити процес з ID 22608 на локальному комп'ютері:
PS C:\> Stop-Process -Id 22608
Зупинити всі процеси Excel на локальному комп'ютері:
PS C:\> Stop-Process -name excel

Порада: Хоча у командлета Stop-Process немає параметра -ComputerName, Ви все одно можете використовувати його для завершення віддалених процесів, використовуючи запропоновану нижче пораду:
PS C:\>$Obj = Get-Process -Name excel -ComputerName MYPC1 PS C:\> Stop-Process -InputObject $Obj

Upd:
У пості наведено переклад статті з порталу

Наш огляд присвячений використанню ключових можливостей Windows PowerShell для виконання різних адміністративних завдань. Спочатку розглянемо вбудовані засоби ознайомлення з можливостями Windows PowerShell.

Ознайомлення з можливостями Windows PowerShell

Отже, ви - адміністратор, якому необхідно у найкоротший термін освоїти Windows PowerShell. Перше, що ви, ймовірно, почнете (природно, крім звернення до документації та довідковій системі), - скористаєтеся командою Help (рис. 1).

Уважно вивчивши виведену на екран інформацію, ми прийдемо до розуміння наступних концептуальних речей: Windows PowerShell існують аліаси, командлети, провайдери, а також довідкові файли. Аліаси (alias) служать для спрощення введення команд (наприклад, clc- це аліас команди Clear-Content), командлети (cmdlet) являють собою реалізацію всіх вбудованих у Windows PowerShell команд, провайдери (provider) забезпечують доступ до файлової системи, реєстру, сховищу сертифікатів тощо, а довідкові файли (helpfile) використовуються для отримання додаткової інформації. Для отримання докладного описукоманди застосовується наступний синтаксис:

PS C:> Help Get-Command

В результаті виконання цієї команди ми отримаємо повний опискоманди Get-Command, включаючи її призначення, синтаксис, опції та ін. (Рис. 2).


Для отримання списку всіх вбудованих команд використовуємо наступний синтаксис:

PS C:> Get-Command

Зверніть увагу на те, що всі команди складаються з дієслова та прикметника (наприклад, Get-Content, Export-Console) і всі команди підтримують єдину системуіменування - наприклад, для завершення чогось завжди використовується дієслово Stop, а не Kill, Terminate, Halt або інші синоніми, що спрощує вивчення можливостей PowerShell (рис. 3).


Команда Get-Serviceслужить отримання списку всіх сервісів, запущених на даному комп'ютері. Наприклад,

PS C:> Get-Service

повертає список, поданий на рис. 4.


Для отримання списку процесів, запущених зараз на комп'ютері, застосовується команда Get-Process(рис. 5):


PS C:> Get-Process

Windows PowerShell підтримує автоматичне завершення введення. Щоб переконатися в цьому, введіть Get-Pта натисніть клавішу TAB: ви отримаєте можливість вибору всіх команд, що починаються з введених символів.

Для отримання інформації лише про один процес як аргумент команди Get-Processзадається ім'я цього процесу (рис. 6):

PS C:> Get-Process explorer

Щоб отримати список всіх процесів, назви яких починаються з певного символу, достатньо вказати цей символ і «*» (рис. 7):


PS C:> Get-Process i *

Зверніть увагу на колонки, які містять інформацію, - Handles, NMP(K) тощо. За замовчуванням інформація відображається у вигляді таблиці, але насправді всі команди повертають об'єкти. Ці об'єкти можуть бути передані на вхід іншим командам за допомогою символу "|" (Рис. 8):


PS C:> Get-Process i | format-list

Тепер список процесів доступний в іншому поданні. Для отримання детальної інформації про різні формати можна використати таку команду:

PS C:> Help format *

Інші можливі формати:

PS C:> Get-Process i | format-wide

PS C:> Get-Process i | format-custom

Оскільки на виході завжди виходить об'єкт, можна маніпулювати для виконання додаткових операцій, наприклад фільтрації:

PS C:> Get-Process | where ($_.handlecount -gt 400)

або сортування:

PS C:> Get-Process | where ($_.handlecount -gt 400) | sort-object Handles

Може виникнути цілком резонне питання: а звідки ми дізналися, що об'єкт, що описує процес, має властивість handlecount? Для отримання списку всіх властивостей об'єкта застосовується наступна команда (рис. 9):


PS C:> Get-Process | Get-Member

Виконаємо команду Get-Process | Get-Member Company- під час форматування за промовчанням неможливо отримати бажані дані. Перетворимо отриману команду на:

PS C:> Get-Process | Get-Member Company | Format-List

Результат її перетворення подано на рис. 10.


PS C:> Get-Process | sort-object Company | format-table -Group Company name, description, handles

Результат виконання цієї команди подано на рис. 11.


Команда stop-processдозволяє зупинити запущений процес, наприклад:

PS C:> Get-process notepad | stop-process

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

PS C:> Get-Process notepad | stop-process –whatif

Крім того, можна вказувати на необхідність підтвердження перед виконанням команди:

PS C:> Get-Process notepad | stop-process –confirm

Результат виконання команди з підтвердженням подано на рис. 12.


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

Крім цього, можна створювати власні пакетні файли, що являють собою файли з розширенням *.ps1, в які поміщаються команди PowerShell, і виконувати їх. Для забезпечення безпеки пакетні файли повинні бути підписані. При тестуванні можна вимкнути вимогу щодо запуску лише підписаних файлів:

PS C:> Set-ExecutionPolicy Unrestricted

але після закінчення тестування не забудьте знову включити цю опцію за допомогою наступної команди:

PS C:> Set-ExecutionPolicy AllSigned

Після знайомства з основами Windows PowerShell подивимося, як за допомогою даної утиліти можна вирішувати різні адміністративні завдання.

Робота з файловою системою

Одне із завдань, з яким часто стикається багато ІТ-фахівців, пов'язане з маніпуляціями з файлами, такими як копіювання, переміщення, перейменування, видалення файлів і каталогів. На рис. 13 показані основні команди Windows PowerShell, які застосовуються для маніпуляцій з файловою системою: new-item, copy-item, move-item, rename-itemі remove-item.


На відміну від інших оболонок, в яких існує і набір команд для файлів (наприклад, delete або rename), і набір для каталогів (наприклад, rd або md), у Windows PowerShell єдиний набір команд використовується для маніпуляцій як з файлами, так і з каталогами.

Перша команда у нашому прикладі - new-item TextFiles –itemtype directory- застосовується для створення нового підкаталогу TextFiles у поточному каталозі. Якщо опустити параметр -itemtype Windows PowerShell запитає, що ми створюємо - файл (file) або каталог (directory). Зазначимо, що у команди new-itemє аліас – ni. У скороченому вигляді наша перша команда виглядатиме так:

PS C:> ni TextFiles –itemtype directory

Потім ми використовуємо команду copy-item(Аліаси - cpi, cp, copy) для копіювання всіх файлів з розширенням *.txt у підкаталог TextFiles. Якщо застосовувати цю команду в пакетному файлі, є сенс зробити її більш зрозумілою, вказавши параметри -path(джерело) та –destination(приймач):

PS C:>copy-item –path '.\*.txt' –destination '.\TextFiles'

Після виконання команди копіювання ми використовуємо команду set-locationдля переходу до підкаталогу TextFiles. За допомогою команди rename-itemперейменовуємо файл psdemo.txt на psdemo.bak. За потреби можна застосовувати опції -pathі -newName. Після того, як файл перейменований, переносимо його на один рівень вгору, використовуючи команду move-item. Потім застосовуємо команду set-location, а точніше – її аліас slдля переходу до іншого каталогу. Маніпуляції з файловою системою ми завершуємо видаленням всього каталогу TextFiles, використовуючи команду remove-item. Оскільки в каталозі TextFiles містяться файли, застосовується опція –recurse. Якщо ця опція не вказана, Windows PowerShell запросить підтвердження перед виконанням команди remove-item.

Робота з реєстром

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


Наша перша команда використовує аліас slдля виконання команди set-location, що змінює наше поточне місцезнаходження з файлової системи на гілку HKEY_CURRENT_USER у системному реєстрі:

PS C:\> sl hkcu:

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

Аналогами наведеної вище команди є:

PS C:\> sl registre:hkcu

PS C:\> sl hkey_current_user

Наступна команда завантажує вміст усієї гілки реєстру HKEY_CURRENT_USER у змінну reg:

PS HKCU: $reg = gci . –rec –ea silentlycontinue

Для цього ми використовуємо команду get-childitem(Аліас - gci), принцип роботи якої аналогічний роботі з файловою системою. Перший аргумент цієї команди – «.» - Вказує на те, що ми хочемо отримати вміст поточної гілки реєстру - HKEY_CURRENT_USER. Другий аргумент є скороченням від опції –recurseі вказує на те, що нам потрібний рекурсивний збір даних із усіх підгілок поточної гілки реєстру. І нарешті, третій аргумент - -ea silentlycontinue- вказує на те, що команда повинна продовжувати виконуватись навіть у разі виникнення помилок, пов'язаних із нестачею прав доступу до певних підгілок реєстру.

Наступна команда у нашому прикладі:

PS HKCU: $s = $reg | % (if (gp $_.pspath) –match PowerShell) ($_.pspath))

копіює з реєстру дані, що містять рядок ‘PowerShell’. Ми починаємо з того, що беремо об'єкт regі перенаправляємо його в команду % яка є аліасом команди for-each. Вона виконує рекурсивний обхід всіх елементів реєстру, що у об'єкті regі на кожному кроці зберігає елемент у спеціальному об'єкті PowerShell з ім'ям ‘_’ . У фігурних дужкахми вказуємо дії, які мають виконуватися на кожному кроці виконання команди for-each. Всередині блоку for-eachми використовуємо перевірку ifдля того, щоб дізнатися, чи відповідний поточний запис реєстру та його властивість pspath, які ми отримуємо через звернення до команди get-itemproperty(через аліас gp), нашому критерію - наявності рядка ‘PowerShell’. Якщо знайдено відповідність, ми повертаємо значення властивості pspath. Усі знайдені відповідності зберігаються в об'єкті s.

Роботу з реєстром ми завершуємо перенаправленням результатів пошуку до команди select-object(через аліас select) і показуємо два перші знайдені результати. Як вправу ви можете перенаправити фінальні результати до файлу за допомогою команди out-file.

Доступ до процесів

Ще одне завдання, з яким можуть зіткнутися ІТ-фахівці, пов'язана з виявленням аномалій у роботі системи, наприклад, процесів, які споживають великі обсяги пам'яті. Давайте подивимося, як це завдання вирішується засобами Windows PowerShell (рис. 15).


У першій команді ми зберігаємо інформацію про всі процеси, запущені на даному комп'ютері, у змінній $allprocs:

PS C:\>$allprocs = get-process

Після цього ми перенаправляємо отриману інформацію команді for-each, яка також може бути вказана аліасом % або foreach. Ця команда перебирає всі об'єкти, пов'язані з процесом, і на кожному кроці зберігає інформацію у внутрішньому об'єкті. $_ . Цей об'єкт можна назвати поточним об'єктом. Як параметри для команди for-eachми вказуємо операцію порівняння значення якості virtualmemorysizeз цікавим для нас розміром пам'яті (20 Мбайт у прикладі). Якщо значення цієї властивості для поточного об'єкта більше заданого, ми виводимо назву процесу на екран. Зазначимо, що PowerShell підтримуються основні скорочення для вказівки розмірів - KB, MB, GB, що дуже корисно, оскільки не потрібно вважати нулі при вказівці обсягів пам'яті, дисків і т.п.

Доступ до системного журналу

При спробі виявлення причин збоїв ми часто звертаємося до системного журналу, де зберігається безліч корисної інформаціїпро події, що відбувалися у системі. Зазвичай дослідження системного журналу застосовується утиліта Event Viewer (eventvwr.exe). У PowerShell ми можемо скористатися вбудованими командами, наприклад, командою get-eventlogдля швидкого дослідження вмісту системного журналу (рис. 16).


Наша перша команда завантажує ключову інформацію із системного журналу:

PS C:\> get-eventlog -list

Без використання опції -list PowerShell запросить точну вказівку назви системного журналу. У прикладі ми бачимо кілька точок входу в системному журналі: Application, Internet Explorer, System, Windows Power Shell тощо. Наша наступна команда отримує записи з системного журналу, які мають тип "Error":

PS C: $bad = get-eventlog “System” | where-object ( $_.EntryType –eq “Error” )

Ми використовуємо команду get-eventlog, якою вказуємо параметр "System"для вилучення лише системних записів, - ми могли б чіткіше задати це, застосувавши параметр logName. Вміст змінної $badпередається на вхід команді where-objectдля фільтрації тільки цікавих для нас записів. Як аргументи команди where-objectми вказуємо на те, що шукаємо тільки записи, які мають властивість EntryTypeодно "Error".

Ми завершуємо дослідження системного журналу виведенням на екран п'яти останніх записівпро помилки, використовуючи для цього команду select-objectз параметром –last:

PS C:\>$bad | select-object –last 5

Доступ до WMI

Як відомо, Windows Management Instrumentation (WMI) - це реалізація компанією Microsoft стандарту Common Information Model (CMI). У більшості випадків WMI застосовується ІТ-фахівцями для отримання інформації про апаратне та програмне забезпеченняна цьому комп'ютері. Як ми побачимо в наступному прикладі, використання Windows PowerShell істотно полегшує доступ до інформації, що зберігається у WMI (рис. 17).


У першому рядку ми застосовуємо команду get-wmiobjectдля отримання інформації про файл, який використовується для свопінгу пам'яті на диск і збереження цієї інформації в змінній $pfu:

PS C:\> $pfu = get-wmiobject – class ‘win32_pageFileUsage’

PS C:\>$pfu | get-member -membertype property | where_object ( $_.name –nomatch ‘_’ )

Зазвичай для знаходження інформації за певним класом можна використовувати команду get-memberбез вказівки параметрів, але в нашому прикладі нас цікавлять лише доступні властивості і ті з них, які не містять в імені символ підкреслення. Уважного читача може виникнути питання: яким чином ми дізналися про існування класу win32_pageFileUsage? Адже відомо, що в WMI підтримується більше тисячі класів, крім цього, ряд додатків додає свої класи. Ви можете застосувати команду:

PS C:\> get-wmiobject -list

для отримання списку всіх класів, що існують в системі. Після того як ми визначили доступні нам властивості класу, ми виводимо вміст властивостей, що цікавлять нас, на екран:

PS C: $pfu.caption; $pfu.currentusage

Друга частина нашого прикладу присвячена іншому класу - win32_DiskDrive, в якому зберігається інформація про диски, встановлені в системі. Цей клас - приклад WMI-класу, що містить більше одного об'єкта. У прикладі ми визначаємо значення властивості captionпершого диска, встановленого у системі:

PS C:\>$dd.caption

Використання файлів XML

У Останнім часомФайли XML все частіше використовуються для зберігання конфігураційної інформації. У міру того, як дані в XML-файлі накопичуються, він стає все менш зручним для прочитання. Далі ми розглянемо, як застосовувати функції Windows PowerShell для роботи з файлами XML.

Наприклад візьмемо конфігураційний файл Windows Calendar, який виглядає так (рис. 18):

і виконаємо з нього маніпуляції, представлені на рис. 19.

У першому рядку ми завантажуємо вміст всього XML-файлу в змінну, використовуючи команду get-content:

PS C: $doc = get-content '.\settings.xml'

Звернімо увагу на застосування типу даних : якщо не вказати використання даних цього типу, змінну буде завантажено просто текст.

У другому рядку ми вибираємо певну гілку XML-файлу - для цього застосовується метод selectnodesоб'єкта, що зберігає XML-дані та XPath-опис адреси гілки:

PS C:\> $settings = $doc.selectnode('CalendarSettings/X-Root/VCalendar')

Після цього ми використовуємо команду foreach-objectдля отримання значення властивості Nameдля всіх елементів у цій галузі.

Висновок

Ми розглянули основні можливості Windows PowerShell для спрощення завдань, що виникають перед ІТ-фахівцями. Як відомо, ці завдання часто вирішуються за допомогою скриптової мови VBScript. У Windows PowerShell є можливість застосування існуючого коду на VBScript, а отже міграція значно спрощена (рис. 20).


У цьому прикладі показано, як можна використовувати існуючий код на VBScript в PowerShell. У першому рядку ми створюємо новий COM-об'єкт, який є ядро ​​виконання скриптових програм - ScriptControl. Потім ми вказуємо, що використовуватимемо мову Visual Basic Script. У третьому рядку задається власне код на VBScript - у прикладі це виклик функції MsgBox, але практично у змінну можна, наприклад, завантажити код файла. І нарешті, в останньому рядку ми додаємо код на VBScript в наш об'єкт - і код надходить на виконання.

Мережеві ресурси

Блог команди розробників продукту: http://blogs.msdn.com/PowerShell/.

Утиліти, редактори та доповнення: http://www.powershell.com/ .

Блог Дмитра Сотнікова з компанії Quest: http://dmitrysotnikov.wordpress.com/.

PowerGadgets - приклад необмежених можливостей розширення PowerShell:

1. Написання скрипту

Скрипт PowerShell (не важливо якої версії) - це текстовий файлз розширенням *.ps1.

Ось приклад простого Power Shell срипту (файл systemInfo.ps1):

# Retrieve WMI object for operating system

Get-WmiObject Win32_OperatingSystem

Цей файл можна створювати та редагувати, наприклад, FAR Manager.

Зверніть увагу, що FAR Manager хоч і може працювати в консолі Power Shell, але виконує з-під себе скрипти в оточенні звичайної консолі Windows cmd . Тобто FAR Manager можна використовувати тільки для створення та редагування PowerShell скриптів, але не для запуску. Але перш ніж розчаровуватись, прочитайте пункт 3.

2. Запуск срипту

Скрипт потрібно виконувати з консолі Power Shell, а не зі звичайної консолі Windows. У консолі Power Shell необхідно перейти до каталогу, де лежить скрипт (командами cd ), а потім запустити сам скрипт, обов'язково прописавши перед ним символи".\" . Наприклад, маємо шлях до файлу скрипту d:\work\systemInfo.ps1 . Тоді команди запуску виглядатимуть так:

d:

cd \

cd work

.\systemInfo.ps1

або так (просто вказується повний шлях до скрипту):

d:\work\systemInfo.ps1

Швидше за все, під час запуску скрипта з'явиться така помилка:

Неможливо завантажити файл D:\work\systemInfo.ps1, оскільки виконання скриптів заборонено для цієї системи. Введіть "get-help about_signing", щоб отримати додаткові відомості.

рядок:1 знак: 18

CategoryInfo: NotSpecified: (:) , PSSecurityException

FullyQualifiedErrorId: RuntimeException

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

Щоб вирішити виконання PowerShell скриптів, потрібно створити *.bat файл, наприклад enableScript.bat з таким вмістом:

powershell -Command Set-ExecutionPolicy RemoteSigned

Цей *.bat файл можна виконати у будь-якій консолі: хоч у PowerShell, хоч у звичайній cmd . Після виконання цього файлу, PowerShell-скрипти запускатимуться в консолі PowerShell.

3. Запуск PowerShell-скрипту зі звичайної консолі Windows cmd

Скрипт PowerShell можна виконати і зі звичайної консолі Windows. Для цього можна скористатися командою:

Powershell -File ./systemInfo.ps1

Таким чином, можна виконувати скрипти прямо з FAR Manager, і вони будуть працювати.

Але тут є невелика тонкість. Параметр-File спрацьовує лише на локальних шляхах, навіть якщо шлях вказаний відносний"./". Тобто якщо *.ps1 - файл лежить на локальному диску C: або D: , то такий виклик працюватиме. Але якщо спробувати виконати скрипт, розташований на доменному ресурсі, скрипт не буде знайдений. Можливо, це виправлять у наступних версіях PowerShell.

Командлетів у , і натиснутибагато тому сьогодні я пропоную розглянути невеликий список найкорисніших і найчастіше використовуваних командлетів з коротким описом того, що вони вміють. Цей довідникдопоможе Вам швидше знайти цікаву для Вас команду Windows PowerShell і орієнтований він на системних адміністраторів-початківців.

Примітка! Цей довідник складено на основі командлетів версії PowerShell 5.0 в операційній системі Windows Server 2016.

Корисні командлети Windows PowerShell

У цьому розділі я перелічу командлети PowerShell, які Ви точно використовуватимете.

  • Get-Help – показує довідку по командлеті, функції та загальну довідку Windows PowerShell. Довідка буває декількох типів: коротка, детальна, повна та висновок лише прикладів;
  • Update-Help - завантажує та встановлює нові файли довідки, тобто. оновлення довідки;
  • Get-Command – командлет пошуку потрібної команди, можна шукати як по дієслову, так і іменнику, також можливе використання маски, якщо Ви не знаєте точне найменування дієслова або іменника;
  • Get-Alias ​​– показує псевдоніми, усі чи конкретної команди;
  • Get-PSDrive – показує підключені диски;
  • Get-Member - виводить властивості та методи, які є у об'єкта;
  • Get-WindowsFeature – виводить відомості про доступні ролі та компоненти сервера;
  • Install-WindowsFeature ( еквівалентний Add-WindowsFeature) - встановлює ролі чи компоненти на вказаний сервер;
  • Uninstall-WindowsFeature ( еквівалентний Remove-WindowsFeature) – видаляє ролі або компонента сервера;
  • Get-History – повертає список команд, введених у ході поточної сесії.

Робота зі змінними

У PowerShell для того, щоб створити змінну, задати їй значення або отримати це значення зазвичай використовують знак долар $ ( коротко та зручно), але для цих цілей існують спеціальні командлети.

  • Get-Variable – виводить список змінних та їх значення ( або одну вказану змінну);
  • New-Variable - створює нову змінну;
  • Set-Variable - задає значення змінної. Якщо змінна із зазначеним ім'ям немає, вона буде створена;
  • Clear-Variable – видаляє значення змінної;
  • Remove-Variable - видаляє змінну та її значення.

Форматування у Windows PowerShell

У Windows PowerShell існує набір командлетів, які призначені для форматування результату роботи командлета. Вони дозволяють користувачеві відобразити результат у тому вигляді, в якому йому зручно переглядати цей результат.

  • Format-List – виведення результату команди у форматі списку властивостей, де на кожній новому рядкуокрема властивість;
  • Format-Table – виведення результату команди у вигляді таблиці;
  • Format-Wide - висновок результату команди як широкої таблиці, у якій відображається лише одне властивість кожного об'єкта;
  • Format-Custom – в даному випадку форматування виводу відбувається з використанням уявлення користувача.

Імпорт та експорт

PowerShell дозволяє імпортувати та експортувати дані в різних поширених форматах, наприклад, CSV або XML, а також перенаправляти висновок результату роботи команди в зовнішній файлабо принтер.

  • Export-Csv – експорт даних у формат CSV;
  • Import-Csv – імпортує дані із CSV файлу;
  • Export-Clixml – експорт даних у формат XML;
  • Import-Clixml - імпортує файл CLIXML та створює відповідні об'єкти в оболонці Windows PowerShell;
  • Out-File – посилає висновок результату роботи командлета у зовнішній файл ( наприклад, у TXT);
  • Out-Printer – виведення результату роботи команди на принтер;
  • Import-Module - додає модулі у поточній сесії.

Робота з мережею у Windows PowerShell

Для адміністрування мережі у Windows PowerShell існують такі командлети як:

  • Disable-NetAdapter – командлет відключає мережевий адаптер;
  • Enable-NetAdapter – цей командлет включає мережевий адаптер;
  • Rename-NetAdapter - перейменовує мережевий адаптер;
  • Restart-NetAdapter – перезапускає мережевий адаптер;
  • Get-NetIPAddress – виводить інформацію про конфігурацію IP-адреси;
  • Set-NetIPAddress – змінює конфігурацію IP-адреси;
  • New-NetIPAddress - створює та налаштовує IP-адресу;
  • Remove-NetIPAddress - видаляє IP-адресу та її конфігурацію;
  • Get-NetRoute – виводить таблицю маршрутизації IP;
  • Set-NetRoute – змінює таблицю маршрутизації IP;
  • New-NetRoute – створює запис у таблиці маршрутизації IP;
  • Remove-NetRoute - видаляє один або кілька записів ( IP маршрутів) з таблиці маршрутизації IP;
  • Get-NetIPv4Protocol - виводить інформацію про конфігурацію протоколу IPv4;
  • Get-NetIPv6Protocol - виводить інформацію про конфігурацію протоколу IPv6;
  • Get-NetIPInterface – виводить інформацію про властивості інтерфейсу IP;
  • Get-NetTCPSetting - показує інформацію про налаштування та конфігурацію TCP;
  • Test-Connection – командлет посилає ICMP пакети одного чи кільком комп'ютерам, тобто. « пінгує» Комп'ютери.

Робота з елементами

У Windows PowerShell є командлети, які можуть працювати з елементами, під елементами тут можна розуміти: файли, папки, ключі реєстру тощо.

  • Clear-Item - очищає вміст елемента, але видаляє сам елемент;
  • Copy-Item – копіює елемент;
  • Get-Item - отримує елемент у вказаному місці;
  • Invoke-Item – виконує дію за умовчанням над вказаним елементом;
  • Move-Item – переміщує елемент;
  • New-Item – створює новий елемент;
  • Remove-Item – видаляє вказані елементи;
  • Rename-Item – перейменовує елемент у просторі імен постачальника Windows PowerShell;
  • Set-Item – змінює елемент;
  • Get-ChildItem - повертає елементи та дочірні елементи в одному або кількох певних місцях;
  • Get-Location – відображає інформацію про поточне місцезнаходження.

Командлети для роботи з Active Directory (AD)

Windows PowerShell, звичайно, дозволяє працювати зі службою каталогів Active Directory. Для цих цілей існує чимало командлетів, ось деякі з них:

  • New-ADUser – створення нового користувача Active Directory;
  • Get-ADUser – виводить інформацію про користувачів Active Directory;
  • Set-ADUser – змінює користувача Active Directory;
  • Remove-ADUser – видаляє користувача Active Directory;
  • New-ADGroup – командлет створює групу Active Directory;
  • Get-ADGroup – виводить інформацію про групу або шукає, щоб отримати кілька груп з Active Directory;
  • Set-ADGroup – командлет змінює групу Active Directory;
  • Remove-ADGroup - видалення групи Active Directory;
  • Add-ADGroupMember - командлет додає облікові записи користувачів, комп'ютерів чи груп як нових членів групи Active Directory;
  • Get-ADGroupMember – виводить інформацію про членів групи Active Directory;
  • Remove-ADGroupMember - видалення елементів із групи Active Directory;
  • Set-ADAccountPassword - скидання пароля облікового запису Active Directory;
  • Disable-ADAccount - вимикає обліковий запис Active Directory.
  • Enable-ADAccount – включає обліковий запис Active Directory;
  • Unlock-ADAccoun – розблокує обліковий запис Active Directory;
  • New-ADComputer - створення нового облікового запису комп'ютера в Active Directory;
  • Get-ADComputer - виводить інформацію про один або кілька комп'ютерів у Active Directory;
  • Set-ADComputer - зміна облікового запису комп'ютера Active Directory;
  • Remove-ADComputer – видалення комп'ютера з Active Directory.

Робота з Hyper-V

Для роботи з Hyper-V у Windows PowerShell існує багато командлетів, ось невеликий перелік:

  • New-VM - створення нової віртуальної машини;
  • Set-VM – налаштування віртуальної машини;
  • Start-VM – запуск віртуальної машини;
  • Stop-VM - закриття, вимкнення чи збереження віртуальної машини;
  • Import-VM – імпорт віртуальної машини з файлу;
  • Move-VM – переміщення віртуальної машини на новий Hyper-V хост;
  • Remove-VM – видалення віртуальної машини;
  • Rename-VM – перейменування віртуальної машини;
  • New-VHD - створення одного або кількох нових віртуальних жорстких дисків;
  • Set-VHD – налаштування віртуального жорсткого диска;
  • Test-VHD - тестування віртуального жорсткого диска щодо виявлення проблем, які б його непридатним використання;
  • Add-VMDvdDrive - додає DVD дискдо віртуальної машини;
  • Remove-VMDvdDrive - видаляє DVD-диск із віртуальної машини;
  • Add-VMHardDiskDrive - додає жорсткий дискдо віртуальної машини;
  • Remove-VMHardDiskDrive – видаляє один або кілька віртуальних жорстких дисків (VHD) з віртуальної машини;
  • Add-VMNetworkAdapter - додає віртуальний мережевий адаптер на віртуальній машині;
  • Remove-VMNetworkAdapter - видаляє один або кілька віртуальних мережевих адаптерівіз віртуальної машини;
  • Copy-VMFile – копіювання файлів на віртуальну машину;
  • Get-VMVideo – виводить інформацію про налаштування відео для віртуальних машин;
  • Move-VMStorage – переміщення сховища віртуальної машини.

Робота з фоновими завданнями

У Windows PowerShell є можливість запускати завдання в фоновому режимі, щоб, не чекаючи закінчення роботи команди ( для випадків, коли завдання виконується довго), продовжувати працювати у поточній сесії. Для роботи з фоновими завданнями PowerShell є наступні командлети:

  • Start-Job – запустити фонове завдання;
  • Stop-Job – зупинити фонове завдання
  • Get-Job – переглянути список фонових завдань;
  • Receive-Job – переглянути результат виконання фонового завдання;
  • Remove-Job – видалити фонове завдання;
  • Wait-Job – перевести фонову задачу на передній план, щоб чекати її закінчення.

Робота з об'єктами

Оскільки PowerShell працює з об'єктами, він дозволяє виконувати деякі дії над цими об'єктами, наприклад:

  • Measure-Object – командлет дозволяє розраховувати на основі властивостей об'єктів такі числові параметри, що агрегують як: мінімальне, максимальне, середнє значення, суму і кількість. Наприклад, Ви хочете дізнатися максимальний або середній розмір файлу певному каталозі, або просто дізнатися кількість файлів ( запущених процесів, служб тощо);
  • Select-Object – за допомогою даного командлета можна вибрати певні об'єкти або властивості цих об'єктів, наприклад, Ви хочете виводити тільки назву файлу та його розмір;
  • Sort-Object – сортує об'єкти за значеннями властивостей;
  • Where-Object - командлет для того, щоб ставити умову для вибірки об'єктів на основі значень їх властивостей;
  • Group-Object – групує об'єкти, що містять однакове значеннядля заданих властивостей;
  • ForEach-Object - перебір об'єктів з метою виконання певної операції над кожним із цих об'єктів.

Командлети PowerShell для віддаленого керування

З допомогою Windows PowerShell можна виконувати команди не лише на локальному комп'ютері, але й на одному або навіть на кількох віддалених комп'ютерах.

  • Enter-PSSession – запускає інтерактивний сеанс з віддаленим комп'ютером;
  • Exit-PSSession - завершує інтерактивний сеанс із віддаленим комп'ютером;
  • New-PSSession – створює постійне підключення до локального або віддаленого комп'ютера;
  • Remove-PSSession – закриває один або кілька сеансів Windows PowerShell;
  • Disconnect-PSSession – від'єднується від сеансу;
  • Connect-PSSession - підключається до вимкнених сеансів;
  • Get-PSSession – отримує сеанси Windows PowerShell на локальних та віддалених комп'ютерах;
  • Invoke-Command – виконує команди на локальному та віддалених комп'ютерах.

Робота зі службами та процесами

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

  • Get-Process – виводить інформацію про запущені процеси на комп'ютері;
  • Start-Process – запускає один чи кілька процесів на комп'ютері;
  • Stop-Process – зупиняє один або кілька запущених процесів;
  • Get-Service – виводить інформацію про служби;
  • Restart-Service – перезапускає службу;
  • Start-Service – запускає службу;
  • Stop-Service – зупиняє службу;
  • Suspend-Service – зупиняє роботу служби;
  • Set-Service – за допомогою цього командлета можна змінити властивості служби, наприклад, опис, ім'я та режим запуску. Також його можна використовувати для запуску, зупинення або припинення служби.

Робота з комп'ютером

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

  • Restart-Computer – командлет перезапускає операційну систему ( перезавантажує комп'ютер);
  • Stop-Computer – вимикає комп'ютер;
  • Rename-Computer - перейменовує комп'ютер;
  • Checkpoint-Computer – створює точку відновлення системи на локальному комп'ютері;
  • Restore-Computer – запускає відновлення системи на локальному комп'ютері;
  • Disable-ComputerRestore – відключає функцію відновлення системи на вказаному диску файлової системи;
  • Enable-ComputerRestore – включає функцію відновлення системи на вказаному диску файлової системи;
  • Remove-Computer - видаляє локальний комп'ютерз домену;
  • Get-EventLog – виводить інформацію про події в журналі подій або список журналів подій на локальному або віддаленому комп'ютері;
  • Clear-EventLog - видаляє записи із зазначених журналів подій.

Робота з контентом

Для керування контентом, наприклад, текстом у файлі Windows PowerShell існують спеціальні командлети, такі як:

  • Get-Content – ​​отримує вміст елемента ( наприклад, зчитує файл);
  • Add-Content – ​​додає вміст у задані елементи, наприклад текст у файл;
  • Clear-Content – ​​видаляє вміст елемента, але не видаляє сам елемент;
  • Set-Content - записує або замінює вміст елемент з новим змістом.

Інші командлети Windows PowerShell

Також хотілося б виділити наступні командлети Windows PowerShell, які, напевно, Вам знадобляться і будуть корисні.

  • Get-ExecutionPolicy – ​​за допомогою цього командлета можна дізнатися діючу політику виконання Windows PowerShell для поточного сеансу;
  • Set-ExecutionPolicy – ​​командлет змінює політику виконання Windows PowerShell;
  • Write-Host – виводить інформацію на екран ( пише текст);
  • Read-Host – зчитує рядок уведення з консолі;
  • Write-Warning – виводить попереджувальне повідомлення;
  • Write-Error – командлет оголошує помилку та виводить її в потік помилок;
  • Get-Date – повертає поточну датута час;
  • Set-Date – командлет змінює системну дату та час на комп'ютері.

Ось ми з Вами і розглянули корисні та часто використовувані командлети Windows PowerShell, сподіваюся, цей довідник буде корисним Вам, удачі!



gastroguru 2017