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

Управління пакетами в Windows (частина 1).

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

Для того, щоб спростити процес установки ПО, в Windows додана можливість установки ПО з пакетів (package). Такий підхід використовується в операційних системах Linux, суть його полягає в тому, що програми зберігаються в спеціальних сховищах (репозиторіях) у вигляді пакетів, для управління якими використовується менеджер пакетів (напр.apt в Debian). Таким чином установка додатки зводиться до виконання всього однієї команди.

Тепер давайте розглянемо схему управління пакетами (Package Management), реалізовану в Windows. Вона складається з чотирьох основних складових:

• Package Sources - джерело пакетів, він же репозиторій.Місце, де зберігаються установчі пакети програм. Як розташування джерела може бути вказаний URL-адресу в інтернеті, загальна папка в локальній мережі або локальна папка на комп'ютері;
• PackageManagement Providers - провайдери (постачальники) пакетів, що відповідають за доступ до джерел пакетів.Кожен постачальник може керувати одним або декількома джерелами;
• PackageManagement Core - ядро ​​управління пакетами. Програмний інтерфейс, що забезпечує взаємодію постачальників з кінцевими користувачами;
• End User - кінцевий користувач, тобто той, хто користується функціоналом Package Management за допомогою командлетів PowerShell.



Як випливає зі схеми, управління пакетами в Windows здійснюється виключно за допомогою PowerShell. Для цієї мети призначений спеціальний модуль PackageManagement (раніше відомий як OneGet), що входить до складу PowerShell починаючи з версії 5.0. Для більш ранніх версій PowerShell модуль можна встановити разом з WMF 5.1 або окремо, зі сховищ PowerShell Gallery.

В модуль входить 13 командлетів, докладний опис можна знайти тут.



Увага!

Перед тим, як приступати до керування пакетами, обов'язково перевірте, чи дозволено у вас виконання скриптів. Вивести поточну політику виконання скриптів можна командою:

Get-ExecutionPolicy

За замовчуванням виконання скриптів PowerShell заборонено (Restricted).Для успішної роботи з пакетами необхідно встановити значення Unrestricted або ByPass, наприклад:

Set-ExecutionPolicy Unrestricted



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

Get-PackageProvider

За замовчуванням в Windows є такі постачальники пакетів:

• MSI - постачальник для обробки файлів msi (файли установки Windows );
• MSU - постачальник для обробки файлів msu (файли оновлень Windows);
• PowerShellGet - служить для управління модулями PowerShell;
• Programs - відповідає за інвентаризаційні дані про всі програмних продуктах, зареєстрованих в оснащенні "Видалення або зміна програми";



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

Get-PackageSource

На даний момент з джерел доступний тільки репозиторій PSGallery, постачальником якого є PowerShellGet.



Ну власне джерело у нас є, постачальник теж, можна приступати до установки пакетів. Як приклад встановимо модуль PSWindowsUpdate.

Перше, що нам потрібно зробити - це знайти потрібний пакет. Наступна команда виведе всі версії потрібного пакету, наявні в зазначеному репозиторії:

Find-Package -Provider PowerShellGet -Name PSWindowsUpdate -AllVersions



Примітка.Для роботи з репозиторіями небходім провайдер NuGet, тому при першому зверненні вам буде запропоновано встановити його. NuGet - це безкоштовний менеджер пакетів з відкритим вихідним кодом, призначений для платформи Microsoft. Він потрібен для роботи з пакетами NuGet (.nupkg).

Наступною командою встановимо знайдений пакет, додатково вкажемо необхідну версію:

Install-Package -Name PSWindowsUpdate -RequiredVersion 2.1.1.1 -Source PSGallery -Provider PowerShellGet -Force

Примітка. Версію пакету вказувати не обов'язково, в цьому випадку буде встановлена ​​найбільш свіжа.



Після установки перевіримо наявність пакету:

Get-Package -Name PSWindowsUpdate

і самого модуля:

Get-Module -Name PSWindowsUpdate -ListAvailable

Як бачите , все на місці.



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

UnInstall-Package -Name PSWindowsUpdate -Force



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

Користувач виконує команду PowerShell для установки пакета -> Модуль PackageManagement звертається до ядру управління пакетами (PackageManagement Core) -> Ядро обробляє команду PowerShell і передає її потрібною постачальнику -> Постачальник звертається до свого джерела, знаходить в ньому необхідний пакет і запускає процес установки.



І ось тут варто докладніше пояснити призначення компонента PackageManagement Core. Справа в тому, що кожен постачальник має свій власний синтаксис команд, а ядро ​​служить як би перекладачем, який вміє спілкуватися з кожним постачальником на його рідній мові. При цьому кінцевому користувачеві надається строго уніфікований набір команд, незалежно від використовуваного постачальника.

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

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

Find-PackageProvider



Для роботи з Chocolatey рекомендується використовувати однойменний постачальник сhocolatey.Встановимо його командою:

Install-PackageProvider -Name chocolatey



Ще раз перевіримо список джерел і переконаємося, що в ньому з'явився Chocolatey. І щоб не було потрібно підтвердження на установку пакетів, зробимо його довіреною джерелом:

Set-PackageSource -Name Chocolatey -Trusted



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

Find-Package -Source Chocolatey | measure | select count

На момент написання статті кількість пакетів в "шоколадці" становить 6533 штуки, і воно постійно збільшується.



як приклад знайдемо і встановимо мій улюблений редактор Notepad ++:

Find-Package -Name notepadplusplus -Source Chocolatey | Install-Package



Для перевірки зайдемо в меню Пуск і переконався, чтоNotepad ++ дійсно встановлений і готовий до роботі.



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