Вибір читачів
Популярні статті
Існують речі, які ми виконуємо щодня, будучи адміністраторами мережі WindowsАле якщо б нас попросили зробити їх за допомогою командного рядка, на відміну від адміністраторів Linux, для нас, адміністраторів Windows, це було б дуже проблематично. Windows завжди був слабкий, коли йшлося про інструменти командного рядка. На мій погляд, все змінилося з появою Windows Powershell. За допомогою Powershell (або інакше PS) можна виконати стільки різних функцій, які ми не могли виконувати раніше. У цій статті ми зосередимося на тому, як 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 встановлено і йоговікно відчинене
Перерахувати 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
Щоб переглянути основну конфігурацію вашого мережного адаптера, ви можете використовувати наступну команду:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE "ComputerName .
Хоча ця стаття присвячена розгляду використання PS в Windows Server 2008, ця утиліта також може використовуватися і в Windows XP, Vista або Server 2003. Ось приклад отриманих даних команди, запущеної на моїй робочої станції Windows XP:
Рисунок 4: PowerShell показує конфігурацію мережевого адаптера Windows XP
Хоча командний рядок 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
Буду з вами відвертий. Використання команд 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 є "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: Тестове опитування за допомогою списку при поєднанні та опитуванні даних
Висновок Windows Powershell – це дужепотужна утиліта . У цій статті неможливо описати все те, що ви зможете зробити здопомогою Powershell але сподіваюся, що мені вдалося дати вам загальну картину можливостей цієї утиліти і надихнути вас на подальші дослідження в цій галузі. З кожним днем з'являються нові книги, курси та безліч матеріалу в Інтернеті про функції Powershell, які можуть використовуватися системними адміністраторами Windows. Враховуючи таку сильну прихильність адміністраторів Windows дографічному інтерфейсу
, потрібен час на те, щоб Powershell була прийнята в тих компаніях, в яких не відчувають гостру необхідність у цьому інструменті.
Напевно, всі чули про PowerShell, але, напевно, не всім довелося з ним працювати. Для тих, хто тільки починає прокладати свій шлях у нетрі PowerShell, ми наводимо переклад посту, що вийшов на порталі 4sysops.com. У ньому розказано про 7 команд, які допоможуть тим, хто тільки-но почав працювати з PowerShell. За подробицями – ласкаво просимо під кат.
Ви можете вибрати будь-який командлет зі списку, виведеного на запит вище, щоб отримати довідку про нього. Наприклад,
PS C:\> Get-Help -Name Get-Service
Ви отримуєте всю інформацію про командлет Get-Service (розглянуто нижче).
Потрібно більше інформації про командлет? Скористайтеся Get-Help:
PS C:\> Get-Help Get-Content -Detailed
Запуск/зупинка служби на віддаленому комп'ютері(Spooler):
PS C:\> $ServiceObj = Get-Service -ComputerName MyPC1 -Name spooler PS C:\> Stop-Service -InputObj $ServiceObj PS C:\> Start-Service -InputObj $ServiceObj
PS C:\> Get-Process
Введіть наступний командлет для отримання детальної інформаціїпро запущених процесах
PS C: Get-Process | Format-List * -Force
Отримання інформації про процеси, запущені на віддаленому комп'ютері:
PS C:\> Get-Process -ComputerName MYPC1 | Format-List * -Force
MYPC1 необхідно замінити на ім'я комп'ютера, з якого ви хочете отримати інформацію про запущені процеси.
Порада: Хоча у командлета 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. Перше, що ви, ймовірно, почнете (природно, крім звернення до документації та довідковій системі), - скористаєтеся командою 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
Як відомо, 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-файлі накопичуються, він стає все менш зручним для прочитання. Далі ми розглянемо, як застосовувати функції 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.
У цьому розділі я перелічу командлети PowerShell, які Ви точно використовуватимете.
У PowerShell для того, щоб створити змінну, задати їй значення або отримати це значення зазвичай використовують знак долар $ ( коротко та зручно), але для цих цілей існують спеціальні командлети.
У Windows PowerShell існує набір командлетів, які призначені для форматування результату роботи командлета. Вони дозволяють користувачеві відобразити результат у тому вигляді, в якому йому зручно переглядати цей результат.
PowerShell дозволяє імпортувати та експортувати дані в різних поширених форматах, наприклад, CSV або XML, а також перенаправляти висновок результату роботи команди в зовнішній файлабо принтер.
Для адміністрування мережі у Windows PowerShell існують такі командлети як:
У Windows PowerShell є командлети, які можуть працювати з елементами, під елементами тут можна розуміти: файли, папки, ключі реєстру тощо.
Windows PowerShell, звичайно, дозволяє працювати зі службою каталогів Active Directory. Для цих цілей існує чимало командлетів, ось деякі з них:
Для роботи з Hyper-V у Windows PowerShell існує багато командлетів, ось невеликий перелік:
У Windows PowerShell є можливість запускати завдання в фоновому режимі, щоб, не чекаючи закінчення роботи команди ( для випадків, коли завдання виконується довго), продовжувати працювати у поточній сесії. Для роботи з фоновими завданнями PowerShell є наступні командлети:
Оскільки PowerShell працює з об'єктами, він дозволяє виконувати деякі дії над цими об'єктами, наприклад:
З допомогою Windows PowerShell можна виконувати команди не лише на локальному комп'ютері, але й на одному або навіть на кількох віддалених комп'ютерах.
PowerShell, звичайно ж, вміє керувати службами та процесами у Windows, для цього існують такі командлети як:
Windows PowerShell дозволяє виконувати адміністративні завдання для операційної системи та комп'ютера в цілому, наприклад, перезапустити операційну системуабо перейменувати комп'ютер.
Для керування контентом, наприклад, текстом у файлі Windows PowerShell існують спеціальні командлети, такі як:
Також хотілося б виділити наступні командлети Windows PowerShell, які, напевно, Вам знадобляться і будуть корисні.
Ось ми з Вами і розглянули корисні та часто використовувані командлети Windows PowerShell, сподіваюся, цей довідник буде корисним Вам, удачі!
Статті на тему: | |
Як встановити новий шрифт у Photoshop?
Шрифт – це графічна форма знаків алфавітної системи письма. Тобто... Прошивка або перепрошивка смартфона Asus Zenfone
Прошивка ASUS ZenFon 5 Інструкція з прошивки смартфона Asus Zenfone 5... Багатофункціональна кнопка для смартфона Klick
Якийсь час тому на Kickstarter'і з'явився цікавий проект... |