Запустити файл powershell на windows 7. Powershell: як працювати з програмою, створювати, запускати та змінювати скрипти. Версії Windows PowerShell

Головна / Захист

PowerShell має ряд режимів виконання, які визначають, який тип коду дозволяється виконувати. Все це управляється ключем реєстру, який живе в HKLM. Існує 4 різних режими виконання:

Обмежений(Restricted): Політика виконання за умовчанням, не допускає роботу скриптів і дозволяє лише інтерактивних команд.

Усі підписані(All Signed): Допускає роботу всіх скриптів. Щоправда, всі скрипти та конфігураційні файли повинні бути підписані видавцем, якому ви довіряєте; даний режимнаражає вас на ризик роботи підписаних (але шкідливих) скриптів, після отримання підтвердження довіри видавцеві.

Видалені підписані(Remote Signed): Локальні скрипти працюють без підпису. Усі скачані скрипти повинні мати цифровий підпис.

Необмежений(Unrestricted): Усі скрипти та файли конфігурації, отримані з комунікаційних програм, на кшталт Microsoft Outlook, Internet Explorer, Outlook Expressі Windows Messenger працюють після підтвердження, що ви знаєте, що файл виходить з Інтернету; ніякі цифрові підписине потрібні; Цей режим наражає вас на ризик роботи непідписаних, шкідливих скриптів.

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

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

Для зміни політики виконання на необмежену, запустіть нижченаведену команду в адміністративному PowerShell:

Set-ExecutionPolicy Unrestricted

Ви побачите запит підтвердження. Натисніть клавішу Enter.

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

Set-ExecutionPolicy Restricted

І знову ви побачите запит на підтвердження. Натисніть клавішу Enter.

От і все! Удачі вам!

73095

І вивчаючи меню пуск Windows 7 або початковий екран Windows 8 1, користувачі-початківці нерідко відкривають для себе програми, призначення яких їм не зрозуміло. Саме одна з таких програм — PowerShell. Що ж таке цей самий PowerShell і чи є від нього хоч якийсь толк? Ну, якщо його хтось придумав і інтегрував у Windows, значить, толк все-таки є. До речі, цим самим PowerShell, що придумав, є компанія Microsoft.


Отже, . Призначається ця програма, насамперед для системних адміністраторів, а ось прості користувачі, тим більше початківці, користі з нього для себе майже ніякої не дістануть. Являє собою PowerShell сучасну стандартизовану оболонку командного рядка, Що забезпечує велику гнучкість управління комп'ютером на базі операційної системи Windows. По суті, PowerShell - це та ж командний рядок, Але тільки набагато функціональніша.

Що вміє цей інструмент адміністрування?Багато чого. З його допомогою системні адміністратори та досвідчені користувачі можуть керувати процесами, службами, файловими сховищами, акаунтами та навіть серверами. Також оболонка дозволяє запускати зовнішні командипрацювати з об'єктами .NET, COMі XML, робити різні трюки і т.п., створювати і виконувати власні сценарії. До речі, для написання скриптів у Windows передбачено спеціальну графічну консоль. ISE, що є свого роду доповненням до основної оболонки PowerShell.

Як і консоль CMD, оболонка PowerShell має свій набір команд, які називаються командлетами. Утиліта розпізнає багато команд CMD, але в цілому синтаксис мови, визначення командлетів та їх параметрів відрізняються від того, що користувачі звикли бачити у звичайному командному рядку. Крім того, знайомі команди начебто dir , cd , copy і т.п., які чудово розуміються PowerShell, насправді є псевдонімами. Наприклад, команда Dir , що служить для перегляду файлової системивідповідає «рідному» командлету Get-ChildItem. Псевдоніми або як заведено говорити, аліаси, служать чисто для зручності.

Розібратися з PowerShell користувачу-початківцю, особливо якщо той незнайомий хоча б з основами звичайного командного рядка, буде непросто. А посібників та довідників, досить зрозумілих та простих для засвоєння, не так уже й багато. Є непоганий посібник, написаний Франком Кохом, з яким ми рекомендуємо ознайомитися, якщо ви все ж наважитеся приступити до вивчення скриптової мови PowerShell. Ну, і звісно, ​​власна довідкова система оболонки.

Вона потужна та розгорнута, з безліччю конкретних прикладів. Користуватися їй досить просто. Основна інформація щодо довідкової системи виводиться командлетом Get-Help. Командлет виводить список усіх доступних команд.

У цій статті ми розглянемо таку технологію від компанії Microsoft як Windows PowerShell, ми поговоримо про те, що таке PowerShell, що таке командлети та конвеєр, як писати сценарії та модулі, а також торкнемося інших не менш важливих і корисних можливостей Windows PowerShell.

До появи PowerShell існували ( і існують) наступні інструменти для автоматизації та адміністрування сервісів: командний рядок Windows та Windows Script Host. Але ці технології мають недоліки.

У командної рядки WindowsІснує і можливість виконувати якісь адміністративні завдання і можливість записати алгоритм дій, зберігши його у вигляді скрипта (bat-файлу), при цьому можна використовувати деякі елементи програмування, наприклад, використовувати змінні, умовні конструкції і навіть на кшталт циклів.

Більшість програмних продуктівмає консольний інтерфейс, тобто. ми можемо керувати програмою, використовуючи командний рядок, при цьому заощаджуючи ресурси за рахунок відсутності витрат на роботу графічного інтерфейсу. Компанія Microsoft для серверної операційної системи Windows Serverнавіть випускає редакції без графічного інтерфейсу ( Server Core, у Windows Server 2016 навіть є Nano Server), але цього недостатньо, оскільки можливості командного рядка обмежені, тобто. написати якусь складну логіку для автоматизації чогось ми не зможемо, а якщо і зможемо, то на це нам знадобиться час і знання.

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

Технологія Windows Script Host дозволяє виконувати всі адміністративні завдання, що й командний рядок, включаючи їхню автоматизацію шляхом написання WSH скриптів, але тут ми вже можемо використовувати повноцінні мови програмування ( VBScript та JScript), тобто. можна реалізовувати складну логіку та алгоритми. До того ж за допомогою WSH ми керуємо програмними продуктами через об'єктний інтерфейс, іншими словами Windows Script Host набагато « крутіше» ніж командний рядок. Але дана технологіятакож не стала тим ідеальним інструментом адміністрування та автоматизації цього адміністрування для системних адміністраторів, тому що Windows Script Host вимагав знань перелічених вище мов програмування, що для системних адміністраторів насправді зайве. Адміністраторам потрібно лише простий інструмент адміністрування з можливістю запрограмувати якісь дії, а заглиблюватися в об'єктні моделі програмних продуктів мовами програмування VBScript та JScript їм не хочеться.

У результаті компанії Microsoft необхідно було розробити такий інструмент адміністрування для системних адміністраторів, який на 100 відсотків задовольняв би всі потреби сисадмінів як у плані можливостей адміністрування та автоматизації, так і в плані зручності та простоти використання, таким чином, з'явився Windows PowerShell.

Що таке Windows PowerShell?

Windows PowerShell– це мова сценаріїв та командна оболонка Windows, які розроблені для адміністрування та конфігурування операційних систем Windows. PowerShell розроблено на основі середовища CRL та платформи.NET Framework і на відміну від командного рядка, який приймає та повертає текст, Windows PowerShell працює з об'єктами. Кожен об'єкт PowerShell має властивості та методи, які можна використовувати для керування цими об'єктами.

У Windows PowerShell Microsoftрозробила концепцію командлетів ( cmdlets), яка є системою іменування команд « Дієслово-Іменник». Дана система дозволяє системним адміністраторам швидше освоїти та спростити роботу з PowerShell.

За допомогою Windows PowerShell можна:

  • Отримувати доступ до файлової системи;
  • Керувати реєстром;
  • Управляти службами;
  • Керувати процесами;
  • Налаштовувати операційну систему;
  • Встановлювати програмне забезпечення;
  • Встановлювати ролі та компоненти сервера;
  • Здійснювати адміністрування та конфігурування ролей та компонентів сервера;
  • Писати та використовувати сценарії для автоматизації управління та адміністрування;
  • Виконувати інші завдання системних адміністраторів.

Windows PowerShell містить багато часто використовуваних утиліт і команд, що запускаються з командного рядка, наприклад ipconfig, ping та інші. Зроблено це для того, щоб полегшити перехід системних адміністраторів із командного рядка на PowerShell.

Також для зручності багато часто використовувані команди та утиліти PowerShell мають синоніми ( Alias), наприклад cls - це синонім командлета Clear-Host, dir синонім Get-ChildItem ( повний списоксинонімів можна подивитися шляхом запуску командлета Get-Alias).

Для спрощення пошуку потрібної команди в PowerShell є спеціальний командлет Get-Command, за допомогою якого можна здійснювати пошук як дієсловом, так і іменником. Усі команди Windows PowerShell згруповані в модулі ( наприклад, Hyper-V, NetTCPIP), що також полегшує пошук потрібної команди.

Після того, як потрібна команда знайдена, можна подивитися інструкцію по роботі з цією командою, тобто. довідку, для цього є спеціальний командлет Get-Help, наприклад наступна команда покаже довідку по командлету Get-Command:

Get-Help Get-Command

Довідка в Windows PowerShell може бути короткою, детальною ( параметр -Detailed), повною ( параметр -Full), а також можна виводити лише приклади ( параметр — Examples). Наступна команда покаже лише приклади використання командлета Get-Command:

Get-Help Get-Command -Examples

Довідка PowerShell, що оновлюється, тобто. її можна оновити командою Update-Help.

Версії Windows PowerShell

Перша версія PowerShell 1.0 з'явилася 14 листопада 2006 і випускалася у вигляді окремого дистрибутива, який можна було встановити на наступні версії операційних систем Windows: Windows XP Service Pack 2, Windows Server 2003 Service Pack 1 і Windows Vista.

У Windows Server 2008 PowerShell 1.0 поставлявся як компонент, який також потрібно було встановлювати.

Починаючи з Windows 7 і Windows Server 2008 R2, PowerShell постачається як невід'ємний компонент системи ( тобто. встановлений, встановлювати його не треба). Нижче наведено таблицю відповідності версії PowerShell та версії операційної системи Windows ( тобто. яка версія PowerShell за промовчанням встановлена ​​в тій чи іншій версії Windows):

Версія PowerShell Версії Windows
PowerShell 2.0 Windows 7, Windows Server 2008 R2
PowerShell 3.0 Windows 8, Windows Server 2012
PowerShell 4.0 Windows 8.1, Windows Server 2012 R2
PowerShell 5.0 Windows 10, Windows Server 2016

З кожною новою версією PowerShell стає все більш потужним інструментом адміністрування, для порівняння в першій PowerShell було близько 130 командлетів, а PowerShell 5.0 їх вже більше 600!

Дізнатись поточну версію PowerShell можна за допомогою властивості PSVersion вбудованої змінної $PSVersionTable, наприклад, виконайте таку команду:

$PSVersionTable.PSVersion

Або запустіть командлет

Get-Variable -Name PSVersionTable -ValueOnly

де значення PSVersion і буде версією PowerShell.

Мова PowerShell

PowerShell– це об'єктно-орієнтована скриптова мова програмування. Він використовується для написання команд управління всіма компонентами операційної системи Windows в оболонці Windows PowerShell, а також для написання сценаріїв автоматизації завдань адміністрування в інтегрованому середовищі сценаріїв Windows PowerShell (ISE). Мова PowerShell хоч і створена для завдань адміністрування, вона є повноцінною скриптовою мовою програмування, оскільки має програмні конструкції, які є в кожній мові програмування, такі як: умови, цикли, обробка помилок, робота зі змінними, об'єктами, масивами.

Мова PowerShell має єдиний синтаксис написання команд та структуру іменування цих команд за принципом « Дієслово-Іменник», що робить цю мову інтуїтивно зрозумілою як програмістів, так системних адміністраторів.

Оболонка Windows PowerShell

Оболонка Windows PowerShell- Це середовище виконання команд та сценаріїв на мові PowerShell. Дана оболонка має ті ж можливості, що і командний рядок такі як: зберігання історії виконання команд, налаштування зовнішнього виглядуоболонки, завершення виконання команд поєднанням клавіш Ctrl+C, а також багато інших можливостей, яких немає в оболонці командного рядка, наприклад, така чудова можливість як « підсвічування синтаксису» ( з'явилася у PowerShell 5.0).

Запустити оболонку PowerShell можна кількома способами, наприклад:

  • З командного рядка, набравши PowerShell;
  • Через діалогове вікно Виконати» ( клавіші Win+R), також набравши PowerShell;
  • У Windows 7 - Пуск->Всі програми ->Стандартні ->Windows PowerShell -> Windows PowerShell;
  • У Windows 8.1 або Windows Server 2012 R2 - Пуск->Всі програми ->Службові ->Windows PowerShell;
  • У Windows 10 або Windows Server 2016 - Пуск->Всі програми -> Каталог Windows PowerShell ( у групі W) -> Windows PowerShell.

Приклад запуску PowerShell у Windows Server 2016

Скріншот оболонки PowerShell у Windows Server 2016

Командлети у PowerShell

Командлет (cmdlet) – це команда Windows PowerShell, за допомогою якої можна здійснювати взаємодію з об'єктами операційної системи з метою їхнього керування. Ці команди є частиною мови PowerShell. Командлети збудовані за принципом « Дієслово-Іменник», розділені дефісом (-); іншими словами, ми спочатку вказуємо, що робити, а через дефіс над чим. Наприклад, командлет Get-Help, де Get це дієслово, що означає « Отримати», а Help - іменник Допомога» у контексті PowerShell « Показати – Довідку». Командлети PowerShell повертають результати у вигляді об'єктів, що є однією з головних відмінностей від командного рядка Windows, у якому команди повертають лише текст на екран.

Крім командлетів отримання даних (Get), існують і такі типи командлетів як:

  • Add – додавання даних;
  • Clear – очистити;
  • Enable – увімкнути;
  • Disable – вимкнути;
  • New – створити;
  • Remove – видалити;
  • Set - задати;
  • Start - запустити;
  • Stop – зупинити;
  • Export – експортувати;
  • Import – імпортувати;
  • І ще багато інших.

Повний список командлетів у Windows PowerShell можна переглянути за допомогою спеціального командлета Get-Command. Наприклад, запустіть його з параметром -CommandType cmdlet, у результаті на екрані з'явиться список командлетів.

Get-Command -CommandType cmdlet

Як Ви вже зрозуміли, командлети мають параметри, за допомогою яких ми можемо конкретизувати дії командлета. Параметри бувають обов'язкові та необов'язкові, наприклад, командлет Get-Command обов'язкових параметрів немає.

Нижче на малюнку представлений спосіб пошуку командлета по дієслову ( параметр Verb). У даному випадкуу нас відобразився список командлетів, які вміють перезапускати щось.

Команда

Get-Command -Verb Restart

Для пошуку командлета по іменнику необхідно використовувати параметр Noun. Наприклад, ми отримали список командлетів, які працюють зі службами.

Команда

Get-Command -Noun Service

Якщо Ви не знайшли потрібний командлет за повною назвою, можете використовувати маску у форматі *Текст*.

Конвеєр у PowerShell

Однією з основних можливостей Windows PowerShell є можливість використання конвеєра під час виконання команд.

Конвеєр– це передача результату роботи командлета через вертикальну межу (|) іншому командлету. При цьому, як Ви пам'ятаєте, в PowerShell командлети працюють з об'єктами та повертають об'єкти, відповідно конвеєру передаються також об'єкти.

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

Наприклад, давайте дізнаємося назву найбільшого файлу в каталозі «C:\Windows\System32» ( простий приклад конвеєра).

Команда

Get-ChildItem -Path "C:\Windows\System32" -File | Sort-Object length -Descending | Select-Object -First 1

  • Get-ChildItem – командлет отримання об'єктів у вказаному каталозі;
  • Sort-Object – командлет для сортування об'єктів, у нашому випадку ми сортуємо за розміром файлу ( length -Descending);
  • Select-Object – командлет вибору необхідних якостей об'єкта, у разі ми виводимо стандартні поля і лише перший об'єкт, тобто. великий файл ( параметр -First 1).

Усі командлети відокремлені один від одного вертикальною межею. Результат кожного командлета передається на вхід іншому командлету, тобто. спочатку ми отримуємо всі об'єкти в зазначеному каталозі, потім сортуємо отриманий результат і на закінчення вибираємо перший об'єкт.

Фонове виконання завдань

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

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

У Windows PowerShell для роботи з фоновими завданнями є наступні командлети:

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

Для запуску у фоновому режимі необхідно написати команду Start-Job, а у фігурних дужках () команду або набір команд, які потрібно виконати у фоновому режимі.

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

Запуск завдання у фоновому режимі

Start-Job (Get-Service)

Дивимося на список завдань, запущених у фоновому режимі

Відображаємо результат роботи завдання Job1

Receive-Job Job1

Як бачимо, у нас з'явилося завдання зі статусом. Completed», тобто. вона вже виконалася ( просто Get-Service відпрацьовує швидко).

Щоб подивитися результат роботи фонової завдання, тобто. командлета Get-Service ми виконали команду Receive-Job і передали їй ім'я завдання ( можна і значення ідентифікатора). В результаті у нас відобразився перелік служб.

Дистанційне керування на PowerShell

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

Існує кілька способів віддаленого керування:

  • За допомогою параметра -ComputerName (є у багатьох команд). Іншими словами Ви передаєте ім'я комп'ютера, на якому необхідно виконати команду, як параметр. Спосіб має недолік, оскільки обмежується виконанням однієї команди;
  • За допомогою сесій. Командлет Enter-PSSession (інтерактивний сеанс). Таким чином Ви підключаєтеся до віддаленого комп'ютера і всі команди, які Ви набиратимете в оболонці PowerShell, будуть виконуватися на віддаленому комп'ютері так само, якби Ви набирали команди безпосередньо на віддаленому комп'ютері. Спосіб також має недолік, так як сеанс обмежується одним комп'ютером;
  • За допомогою командлету Invoke-Command. За допомогою даного способуВи можете виконувати команди або сценарії як на одному комп'ютері, так і на кількох.

Наприклад, щоб підключитися до віддаленого комп'ютера ( у прикладі нижче ServerName) інтерактивним сеансом виконайте таку команду:

Enter-PSSession ServerName

Сценарії, функції та модулі у Windows PowerShell

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

Суть даного механізму наступна, Ви пишіть потрібний Вам набір команд і зберігаєте його як сценарій - це простий текстовий файл з розширенням.PS1.

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

Важливо!

За промовчанням виконання сценаріїв у Windows заборонено! Щоб подивитися політику виконання сценаріїв, виконайте командлет Get-ExecutionPolicy. В результаті він поверне діючу політику, наприклад:

  • Restricted – блокується виконання будь-яких сценаріїв ( значення за замовчуванням);
  • AllSigned – дозволено виконання сценаріїв, які мають цифровий підпис;
  • RemoteSigned – дозволено виконання локальних сценаріїв, всі завантажені сценарії повинні мати цифровий підпис;
  • Unrestricted - дозволено виконання будь-яких сценаріїв ( не рекомендується, оскільки небезпечно!).

Для вирішення виконання сценаріїв необхідно використовувати командлет Set-ExecutionPolicyз одним із перерахованих вище параметрів.

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

Set-ExecutionPolicy RemoteSigned

У сценарії можна передавати параметри, робити їх обов'язковими або задавати значення за промовчанням.

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

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

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

Get-ChildItem Env:\PSModulePath | Format-Table -AutoSize

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

Інтегроване середовище сценаріїв Windows PowerShell (ISE)

Для того щоб було зручно писати сценарії, функції та відповідно модулі, компанія Microsoft розробила спеціальну графічну програму Integrated Scripting Environment(ISE) – інтегроване середовище сценаріїв. Працювати в цій програмі дуже зручно, до того ж вона має потужний функціонал. створення безлічі вкладок зі сценаріями, область виведення, вбудований відладчик та інше).

Запустити її можна так:

  • У Windows 7 - Пуск->Всі програми ->Стандартні ->Windows PowerShell -> Windows PowerShell ISE;
  • У Windows 10 або Windows Server 2016 - Пуск->Всі програми -> Каталог Windows PowerShell ( у групі W) -> Windows PowerShell ISE.

Примітка! ISE не буде працювати на системі Windows Server, встановленій у варіанті Server Core.

Скріншот інтегрованого середовища сценаріїв PowerShell (ISE) у Windows Server 2016

На цьому у мене все, сподіваюся, матеріал був Вам корисним! Успіхів!

Досвідчені користувачі операційної системи Windows 10 могли чути про утиліту командного рядка PowerShell. Також з нею можуть бути знайомі ті, хто має досвід роботи з Windows 7 і 8.1. Після багатьох років використання програми командного рядка Windows та файлів формату.bat настав час познайомитися з більш функціональним інструментом.

PowerShell є цінним поповненням списку інструментів Windowsі його масштаб може злякати деяких користувачів. Що це — скриптова мова чи командна оболонка? Не варто турбуватися: незважаючи на великі можливості, освоїти PowerShell під силу кожному.

Крок 1: встановлення

Для початку нам потрібна сама утиліта PowerShell. Якщо ви працюєте з Windows 10, у вас вже інстальовано версію PowerShell 5. Оновлення Windows 10 Anniversary Update використовує версію 5.1, але різниця непомітна. У Windows 8 і 8.1 використовується PowerShell 4, чого теж цілком достатньо. Установка PowerShell на Windows 7 не доставить проблем, але все ж таки пару зайвих кроків доведеться зробити. Зокрема, необхідно додатково встановити.Net Framework. Можна інсталювати Windows Management Framework, до складу якого входить PowerShell.

PowerShell має два інтерфейси. Досвідчені користувачі можуть вибрати повноцінний графічний інтерфейс, відомий як Integrated Scripting Environment (ISE) Початківцям краще використовувати консоль PowerShell, простий текстовий інтерфейс у стилі командного рядка Windows або навіть DOS 3.2.

Щоб запустити PowerShell від імені адміністратора у Windows 10, натисніть кнопку «Пуск» і прокрутіть список програм до Windows PowerShell. У Windows 8.1 шукайте Windows PowerShell у папці System у Windows. У Windows 7 оболонка знаходиться в папці Accessories. В якості звичайного користувача PowerShell можна запустити так само, використовуючи ліву кнопку миші замість правої.

У будь-якій версії Windows можна застосувати пошук. Для зручності подальшого використання можна закріпити PowerShell на панелі завдань.

Крок 2: старі команди Windows

Синтаксис команд Windows PowerShell працює звичним чином. Наприклад, cdзмінює папки, dirпоказує список усіх файлів та папок усередині поточної папки.

Залежно від методу запуску консолі PowerShell можна почати c:\Windows\system32або в c :\Users\ . У прикладі на скріншоті використовується команда cd ..(з пропуском) для переходу на один рівень вгору за раз, потім запускається команда dirдля відображення списку файлів та папок у директорії C:\.

Крок 3: встановлення файлів допомоги

Команди начебто cdі dirне є активними командами PowerShell. Це так звані псевдоніми (aliases) – заміни справжніх команд PowerShell. Псевдоніми зручні для тих, хто має великий досвід роботи з командним рядком. Однак вони не торкаються глибин PowerShell.

Щоб почати знайомитись з можливостями PowerShell, наберіть helpта потрібну вам команду. На скріншоті показано команду .

Команда helpговорить, що dirє псевдонімом команди PowerShell Get-ChildItem. Якщо набрати get-childitemв PS C:\>, побачите те саме, що і при використанні команди dir.

Як зазначено внизу скріншота, файли допомоги PowerShell не встановлюються автоматично. Для їх отримання запустіть PowerShell від імені адміністратора та наберіть update-help. Встановлення файлів допомоги займе кілька хвилин, ряд модулів можуть бути відсутніми - наприклад, в даному випадку не встановилися Help for NetWNV і SecureBoot. Коли все готово, повна система допомоги завжди даватиме потрібні підказки.

Тепер наберіть команду get-helpі будь-яку цікаву для вас команду («cmdlet» мовою PowerShell, російською командлети), буде показано її опис. Наприклад, get-help get-childitemвидає список опцій get-childitem. Також можна вивести різні варіанти. Наприклад

get-help get-childitem -examples

видає сім детальних прикладів використання get-childitem. Команда

get-help get-childitem -detailed

включає ці сім прикладів і докладні роз'яснення кожного параметра в командлеті get-childitem.

Крок 4: отримання допомоги за параметрами

На скріншоті ви могли помітити два списки під Syntaxдля get-childitem. Наявність двох різних синтаксисів означає можливість застосування двох способів запуску командлет. Як тримати синтаксис окремо один від одного і що означає параметри? Відповідь проста, якщо знати трюк.

Для отримання подробиць щодо параметрів командлети get-childitemабо будь-який інший використовуйте параметр -Full:

get-help get-childitem -full

Це видає список того, що ви можете зробити з командлетою і що станеться. Дивіться скріншот.

Перегляд опису параметрів дозволяє помітити, що get-childitemдає можливість отримати об'єкт child(на зразок назви підпапки або імені файлу) у вказаному місці, з збігом певних символів або без. Наприклад:

get-childItem "*.txt" -recurse

повертає список файлів *.txt у поточній папці та всіх підпапках (через параметр -recurse). Тоді як

get-childitem “HKLM:\Software”

повертає список усіх ключів реєстру верхнього рівня HKEY_LOCAL_MACHINE\Software.

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

Крок 5: вивчення імен

Є причина того, чому показані командлети досі виглядають подібним чином: get-childitem, update-help, get-helpвикористовують єдину схему дієслово-іменник. Цю угоду застосовують усі командлети PowerShell, у яких дієслово стоїть перед єдиним іменником. Це сподобається тим, хто свого часу постраждав від мінливості назв команд у мовах VB та VBA.

Погляньте на найпоширеніші командлети:

set-location: встановлює поточну робочу локацію на певну локацію

get-content: отримує вміст файлу

get-item: отримує файли та папки

copy-item: копіює об'єкт з однієї локації в іншу

remove-item: видаляє файли та папки

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

get-service: отримує послуги, запущені на локальному або віддаленому комп'ютері.

invoke-webrequest: отримує вміст з веб-сторінки в інтернеті

Щоб переглянути роботу певної командлети, використовуйте get-helpяк у випадку

get-help copy-item -full

На основі опису допомоги можна зрозуміти, що необхідно командлеті. Наприклад, якщо ви хочете копіювати всі файли та папки з Documentsв c:\temp, використовуйте

copy-item c:\users\ \documents\* c:\temp

Ввівши цю команду, ви побачите кілька цікавих можливостей оточення PowerShell. Наприклад, якщо набрати copy-iта натиснути кнопку Tab, PowerShell заповнить Copy-Item. Якщо неправильно набрати командлету і PowerShell не може розпізнати її, подається повний опис того, що було зроблено не так.

Спробуйте цю командлету:

invoke-webrequest askwoody.com

Ви отримаєте короткий список заголовків, зображень, посилань та іншого вмісту веб-сторінки. Зверніть увагу на get-helpна список invoke-webrequest, який «повертає колекцію форм, посилань, зображень та інші важливі елементи HTML» - саме те, що має відображатися на екрані.

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

get-command: список усіх доступних командлет

get-verb: список усіх доступних дієслів

clear-host: очищення екрану програми-хоста

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

get-command *-service

Будуть показані всі дієслова, доступні з іменником service. Ось їх список:

Get-Service

New-Service

Restart-Service

Resume-Service

Set-Service

Start-Service

Stop-Service

Suspend-Service

Можна поєднувати ці командлети з іншими.

Крок 6: використання труб

Якщо ви знайомі з командним рядком Windows або пакетними файлами, то знаєте про перенаправлення та труби. Перенаправлення (символ >) та труби (символ |) беруть результат дії та прикріплюють його в інше місце. Наприклад, можна перенаправити результат команди dirу текстовий файл або передати результат команди pingу команду findдля фільтрування цікавих результатів, як

dir > temp.txt

ping askwoody.com | find “packets” > temp2.txt

Тут у другій команді findшукає рядок packetsвзяту з адреси askwoody.com командою pingі об'єднує всі рядки, що збігаються, у файл під назвою temp2.txt.

Перша з цих команд чудово працює у PowerShell. Для запуску другої команди знадобиться щось на зразок

ping askwoody.com | select-string packets | out-file temp2.txt

Використання перенаправлення та труб значно розширює можливості командного рядка Windows: замість нескінченного прокручування вниз екраном у пошуку текстового рядка можна відфільтровувати потрібні команди Windows.

Powershell має підтримку pipe, причому вона обмежена текстом. PowerShell дозволяє передавати цілий об'єкт з однієї командлети в іншу, де об'єкт є комбінацією даних (званих властивостями) та дій (методів), які можуть використовувати ці дані.

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

Як це розуміти? Використовуйте командлету get-member. Якщо ви хочете знати, який тип об'єкта обробляє командлет, проведіть її через get-member. Наприклад, якщо ви намагаєтеся зрозуміти запущені на комп'ютері процеси та звузили опції до командлети , ось як дізнатися результат командлети:

get-process | get-member

Запуск цієї командлети видає довгий список властивостей та методів для , але на початку списку можна побачити тип об'єкта, який створює :

TypeName: System.Diagnostics.Process

Нижченаведений скріншот також показує властивості під назвою get-process Handles, Name, NPM, PM, SI, VMі WS.

Якщо ви бажаєте маніпулювати результатом для роботи з цим командлетом (замість відображення довгого списку активних процесів на моніторі), потрібно знайти іншу команду, яка як вступні дані приймає System.Diagnostics.Process. Для пошуку потрібної командлети знову використовуйте можливості PowerShell:

get-command -Parametertype System.Diagnostics.Process

Ця командлет видає список командлет, які можуть обробляти System.Diagnostics.Process.

Деякі командлети відомі тим, що набувають майже будь-якого виду даних. Головною серед них є . Ця командлета пропускає через себе кожен об'єкт, що посилається по трубі, один за одним, і застосовує до нього заданої критерії вибору. Існує спеціальний маркер під назвою $_ , який дозволяє використовувати кожен предмет у трубі, один раз.

Допустимо, ви хочете отримати список всіх запущених на комп'ютері процесів під назвою «svchost», тобто хочете зіставити властивість Nameпроцесу svchost. Використовуйте команду:

get-process | where-object ($_.Name -eq “svchost”)

Командлету дивиться на кожен об'єкт System.Diagnostics.Process, порівнює .Nameцього об'єкта з «svchost»; якщо є збіги, вони видаються монітор. Дивіться скріншот.

Крок 7: аналіз корисних команд PowerShell

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

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

Get-AppXPackage | Foreach (Add-AppxPackage -DisableDevelopmentMode -Register “$($_.InstallLocation)\AppXManifest.xml”)

Якщо запустити цю команду, ігноруйте позначені червоним кольором попередження, і коли команда виконана, перезавантажте комп'ютер; всі встановлені програми Windows 10 з'являться на своїх місцях.

Ось як працює ця команда. Get-AppXPackageперевіряє всі пакети програм у профілі користувача. Навіть якщо ви видалили програму, вона залишається у списку профілю користувача.

Командлету Get-AppXPackageповертає об'єкт TypeName Microsoft.Windows.Appx.PackageManager.Commands.AppxPackage, який включає повне ім'я пакета програми і місцезнаходження відповідного файлу маніфесту XML. Якщо запустити командлету get-appxpackage, ви побачите довгий список пакетів програм. Скриншот показує опис Xbox.

Командлету Foreachза допомогою циклу проходить через кожен об'єкт у AppXPackage, відправляючи їх командлету Add-AppxPackage. Згідно get-helpдля Add-AppxPackage, тут є два ключові перемикачі:

  • Перемикач -Registerвикористовується для реєстрації існуючих установок пакетів програм, можна встановити параметри DisableDevelopmentModeі Register
  • Перемикач -DisableDevelopmentModeкаже Windows заново зареєструвати існуючий пакет програми, який було вимкнено, не зареєстровано або пошкоджено.

Рядок « $($_.InstallLocation)\AppXManifest.x ml» описує, де розташований файл manifest.xml. Якщо подивитися на файли AppXManifest.xml, ви побачите складний список ідентифікаторів додатків, виконуваних файлів та велику кількість візуальних елементів, пов'язаних із додатком.

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

Запуск програми з PowerShell

Завдання запустити з PowerShell якийсь виконуваний файл (програму або утиліту командного рядка) зустрічається досить часто. PowerShell пропонує для цього кілька різних способів, які ми розглянемо далі в цій статті. Почнемо з найпростішого…

Прямий запуск

Найпростіший спосіб запустити виконуваний файл PowerShell - це перейти в директорію з файлом і стартувати його безпосередньо. Наприклад візьмемо просту програмку, що виводить вітання, і виконаємо її командою:

Set-Location ″C:\Program Files″
.\Hello.exe

Зверніть увагу, що навіть перебуваючи в потрібному каталозі, потрібно вказувати відносний шлях до файлу, що виконується. Виняток становлять файли з директорій, перерахованих у змінній оточенні (path). Наприклад, різні вбудовані програми та утиліти (notepad, calc, ping тощо), що знаходяться в директорії Windows\System32, можна запускати без вказівки шляху.

Оператор &

Якщо необхідно вказати повний шлях до файлу, що виконується, то можна скористатися оператором & (Оператор виклику). Він дозволяє виконати рядок тексту, вказаний у лапках як єдину команду. Наприклад:

& 'C:\Program Files\Hello.exe'

Оскільки оператор & не аналізує команду, що передається, то він не може інтерпретувати її параметри. Тому додаткові параметри\аргументи передаються також у вигляді тексту, у лапках. Для прикладу візьмемо попередню програму і трохи змінимо її, тому вона приймає потрібний текст у вигляді аргументу:

& 'C:\Program Files\Hello.exe' 'Hello, world'

За бажання можна вказати кількох аргументів через кому:

& 'C:\Program Files\Hello.exe' 'Hello,', 'world'

Для зручності команду та аргументи можна помістити у змінні:

$exe = 'C:\Program Files\Hello.exe'
$arg1 = 'Hello'
$arg2 = 'world'
& $exe $arg1 $arg2

Ну і якщо аргументів багато, їх можна об'єднати, скориставшись такою конструкцією:

$exe = 'C:\Program Files\Hello.exe'
$allargs = @('Hello,','world')
& $exe $allargs

Invoke-Expression

Командлет Invoke-Expression працює приблизно так само, як і оператор & бере текстовий рядок і виконує його у вигляді команди. Наприклад:

Invoke-Expression -Command 'C:\Windows\Hello.exe'

Однак він має один великий недолік, а саме — невміння працювати з пробілами. Наприклад, наступна команда викликає помилку:

Invoke-Expression -Command 'C:\Program Files\Hello.exe'

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

Invoke-Expression -Command C: Program Files Hello.exe

Start-Process

Командлет Start-Process запускає вказаний файл у вигляді процесу, використовуючи метод Start.NET класу Process. Наприклад:

Start-Process -FilePath 'C:\Program Files\Hello.exe'

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

Start-Process -FilePath 'C:\Program Files\Hello.exe' -NoNewWindow -Wait

Також Start-Process дозволяє передати до процесу додаткові аргументи:

Start-Process -FilePath 'C:\Program Files\Hello.exe' -ArgumentList 'Hello, world' -NoNewWindow -Wait

За промовчанням командлет нічого не повертає, але за допомогою -PassThru можна змусити його повернути об'єкт процесу. Цей об'єкт дуже зручно помістити у змінну:

$process = Start-Process -FilePath 'C:\Program Files\Hello.exe' -Wait -PassThru

з якої можна потім можна дізнатися багато корисних речей, такі як статус:

$process.HasExited

$process.ExitTime

або код виконання:

$process.ExitCode

.NET

У принципі.NET класом Process можна скористатися безпосередньо, без командлету Start-Process. Наприклад, запустити процес можна командою:

::Start(′C:\Program Files\Hello.exe′)

Такий спосіб досить незручний і громіздкий (на мій погляд), але трохи гнучкіший у використанні. Для прикладу запустимо нашу програму у поточному вікні, передамо до неї аргументи та заберемо результат виконання:

$process = New-Object -TypeName System.Diagnostics.Process
$process.StartInfo.FileName = C: Program Files Hello.exe
$process.StartInfo.Arguments = ″Hello,world″
$process.StartInfo.RedirectStandardOutput = $true
$process.StartInfo.UseShellExecute = $false
$process.Start()
$process.WaitForExit()

$process.StandatdOutput.ReadToEnd()

WMI

За допомогою WMI можна зробити практично все, у тому числі запустити програму. Для цього цілком підійде метод Create WMI-класу Win32_Process.Цей метод запускає процес на локальному чи віддаленому комп'ютері через RPC. Наприклад, для виконання програми на локальному комп'ютеріможна скористатися такою командою:

()″Win32_Process″).Create(′C:\Program Files\Hello.exe′)

А для виконання на віддаленому комп'ютері команда виглядатиме так:

()″\\remotecomputer\root\cimv2:Win32_Process″).Create(′C:\Program Files\Hello.exe′)

Як варіант, можна скористатися командлетом Invoke-WmiMethod:

Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList ″C:Program FilesHello.exe″

Або командлетом Invoke-CimMethod:

Invoke-CimMethod -ClassName Win32_Process -MethodName Create -Arguments @(CommandLine=″C:\Program Files\Hello.exe″)

WMI запускає процес в окремому вікні та повертає об'єкт, що містить ідентифікатор процесу (ProcessID) та результат виконання (ReturnValue). ReturnValue може приймати такі значення:

0 - Sucsessful Completiom
2 - Access Denied
3 - Insufficient Privilege
8 - Uncnown Failure
9 - Path Not Found
21 - Invalid Parameter

Invoke-Command

Командлет Invoke-Command може виконувати команди на локальному або віддаленому комп'ютері, використовуючи WinRM. Наприклад, для запуску програми на локальному комп'ютері використовуємо команду:

Invoke-Command -ScriptBlock (C: Program Files Hello.exe)

За потреби у програму можна передати аргументи:

Invoke-Command -ScriptBlock (C: Program Files Hello.exe Hello, world)

Зверніть увагу, що Invoke-Command не дуже дружить з пробілами, тому, щоб уникнути помилок, доводиться хитруватися з лапками. Втім, подібних проблем можна уникнути, наприклад, комбінуючи використання командлета з оператором &:

Invoke-Command -ScriptBlock (& ​​'C:\Program Files\Hello.exe')

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

Invoke-Command -ScriptBlock ("C:\'Program Files'\Hello.exe") -ComputerName SRV1,SRV2,SRV3

$scriptblock = (C: Program Files Hello.exe)
$Computers = @('SRV1','SRV2','SRV3')
Invoke-Command -ScriptBlock $scriptblock -ComputerName $Computers

За промовчанням командлет повертає результат виконання програми, а якщо запустити його у фоновому режимі (параметр AsJob), то повертає об'єкт Job:

Invoke-Command -ScriptBlock (C:\'Program Files'\Hello.exe) -ComputerName localhost -AsJob -JobName Hello

Invoke-Item

Командлет Invoke-Item призначений для застосування до файлу стандартної дії. Так запустити виконуваний файл можна командою:

Invoke-Item -Path ″C:Program FilesHello.exe″

Однак найзручніше використовувати Invoke-Item для відкриття певного типу файлів. Наприклад, так ми відкриємо текстовий файл:

Invoke-Item -Path ″C:\Files\test.txt″

А так усі текстові файлив папці:

Invoke-Item -Path ″C:\Files\*.txt″

CMD

Ну і на завершення ще один спосіб запуску програми з PowerShell за допомогою оболонки cmd. Спосіб досить "непрямий", але тим не менш працюючий. Наступна команда запускає новий екземпляр cmd, виконує в ньому зазначену програму, завершує роботу cmd та повертає результат:

cmd /c ″C:Program FilesHello.exe″

Таке ось безліч способів запустити програму надає PoSh. І кожен із них добрий для певних ситуацій.

До речі, стаття написана за мотивами PowerShell: Deep Dive and Best Practice. Рекомендую почитати там ще багато цікавого.

© 2022 androidas.ru - Все про Android