Установка программ средствами PowerShell в Windows 10

Уже прошло какое-то время с момента запуска окончательного релиза новейшей операционной системы от Microsoft и с ней уже успели познакомиться не только энтузиасты, тестирующие промежуточные сборки, а и те пользователи, которые загрузили долгожданное обновление. Хороша ли новая система или нет? Это новейший инновационный продукт или просто та «восьмерка», которая и должна была выйти в свое время? Это вопросы, на которые в любом случае не удастся дать однозначные ответ. Помимо очевидных нововведений, к коим относятся появившееся в системе меню «Пуск», браузер Microsoft Edge, совместимость с Xbox, интегрированный с Кортаной поиск и представление задач, есть еще ряд нововведений, о которых знает далеко не каждый пользователь Windows 10.

И вот к одному из таких нововведений можно отнести возможность установки программных продуктов непосредственно средствами оболочки Windows PowerShell, о чем и пойдет речь далее в этой статье. Несмотря на то, что эта функциональная возможность появилась еще в апреле 2014-го года вместе с выходом Windows Management Framework 5.0 Preview, нативной она смогла стать только с окончательным релизом «десятки». Итак, давайте же посмотрим, какой модуль отвечает за эту функциональную возможность и как можно проинсталлировать программные продукты, не загружая инсталляционные файлы.

Модуль Windows PowerShell OneGet

Еще с выходом Windows Management Framework 5.0 Preview у командной оболочки Windows PowerShell появилось несколько новых возможностей, предназначенных для упрощения управления компьютерами. К таким возможностям относятся две занимательные технологии, а именно: Windows PowerShell Desired State Configuration и Certified for Windows Network Switches.

В случае с технологией Certified for Windows Network Switches – был добавлен ряд командлетов Windows PowerShell, отвечающих за управление сертифицированными для Windows сетевыми коммутаторами. То есть, появилось 19 новых командлетов, которые вы можете найти, выполнив в оболочке PowerShell команду «Get-Command *-NetworkSwitch*». Так как технология достаточно серьезная и заслуживает отдельного внимания, в данной статье я ограничусь лишь небольшим описанием и не буду рассматривать эту технологию более подробно.

А вот на второй технологии следует остановиться подробнее. В случае установки Windows Management Framework 5 или операционной системы Windows 10 вы можете воспользоваться средством, позволяющим существенно упростить на ваших компьютерах поиск и установку программного обеспечения. Таким средством является OneGet. OneGet – это агрегатор управления пакетами, то есть модуль, использующий специальные репозитории, предоставляющий единый интерфейс для обнаружения, установки и инвентаризации программного обеспечения. Иначе говоря, эта технология с одной стороны предоставляет набор командлетов, позволяющих конечному пользователю управлять инсталляционными пакетами (о которых мы с вами будем говорить немного ниже), а с другой стороны она предоставляет интерфейс для написания пакетов поставщиков.

Прежде чем мы с вами начнем разбираться с самим модулем, следует обратить внимание на несколько определений, которые тесно связаны с этой технологией, а именно:

  • Пакет. Если говорить в двух словах, то пакет представляет собой программу, которая собирается и устанавливается из определенного источника при помощи любой доступной системой управления пакетами. Как правило, пакет предоставляет собой скомпилированный код, с дополнительной мета информацией, к которой может относиться описание пакета, его версия или «зависимости». Система управления пакетами, например, для выполнения автоматического обновления программного продукта до новой версии, для того чтобы удостовериться в том, что все зависимости пакета будут установлены, должна обработать такую мета информацию и, в случае необходимости, должна автоматически установить все отсутствующие пакеты;
  • Репозиторий. Согласно википедии, репозитории представляют собой место, где хранятся и поддерживаются какие-либо данные. Чаще всего данные в репозитории хранятся в виде файлов, доступных для дальнейшего распространения по сети. Изначально репозитории использовались Linux-системами, позволяя устанавливать пакеты, необходимые для работы системы из других расположений. Большинство репозиториев бесплатны, однако некоторые компании предоставляют доступ к собственным репозиториям за платную подписку. О репозиториях OneGet мы с вами поговорим немного ниже;
  • Диспетчер пакетов. Представляет собой набор программных инструментов, отвечающий за автоматизацию процесса установки, обновления, настройки и удаления пакетов программного обеспечения. Как правило, пакеты включают в себя базу данных, в которой указываются предварительные требования и зависимости программного обеспечения, а также информацию о версии продукта, предотвращающую использование нерабочих программных продуктов. К диспетчерам пакетов можно отнести линуксовский apt-get или NuGet, который позже появился в Windows-системах. В свою очередь, OnetGet представляет собой логическое продолжение NuGet, работающее в качестве агрегатора для всех доступных диспетчеров пакетов, именуемых поставщиками.

Изначально Microsoft ограничивает использование большинства доступных поставщиков, предоставляя базовый набор, позволяющий обнаружить и установить дополнительные поставщики для управления программным обеспечением. Среди базовых поставщиков можно выделить:

  • Bootstrap – поставщик, позволяющий обнаруживать остальных поставщиков;
  • MSI – поставщик, предназначенный для обработки файлов MSI;
  • MSU – в свою очередь, поставщик, отвечающий за обработку файлов обновлений Microsoft;
  • ARP (Add/Remove programs) – поставщик, отвечающий за инвентаризационные данные о любом программном продукте, который зарегистрирован в компоненте системы «Удаление или изменение программы»;
  • PowerShellGet – поставщик, позволяющий управлять различными модулями PowerShell.

Полный список поставщиков OneGet с их кратким описанием вы можете найти по следующей ссылке.

Далее в этой статье мы будем работать с поставщиком Chocolatey, который позволяет выполнять автоматическую установку большинства программных продуктов.

Сам модуль OneGet включает в себя 10 командлетов Windows PowerShell, большинство которых будут рассмотрены в следующем разделе настоящей статьи. К этим командлетам относятся:

  • Find-Package – выполнение поиска пакетов;
  • Get-Package – возвращает список всех установленных на компьютере пакетов;
  • Get-PackageProvider – возвращает список поставщиков, которые на данном компьютере подключены к OneGet;
  • Get-PackageSource — возвращает список источников пакетов, которые зарегистрированы для определенного поставщика пакетов;
  • Install-Package – позволяет устанавливать один или несколько программных продуктов;
  • Register-PackageSource – добавление для указанного поставщика пакетов источник пакета;
  • Save-Package – позволяет сохранить пакет на локальный компьютер без последующей установки;
  • Set-PackageSource – изменение для указанного поставщика пакетов источник пакета;
  • Uninstall-Package – удаление одного или нескольких пакетов программных продуктов;
  • Unregister-PackageSource – удаление зарегистрированного источника пакета.
    • Установка программного обеспечения при помощи OneGet

      Вот и настало время самого процесса установки программных продуктов. Далее вы увидите, как можно установить поставщик пакетов, найти требуемое программное обеспечение, установить его, а также как можно удалить ненужное приложение и загрузить себе на компьютер инсталляционный пакет программного продукта. Начнем по порядку.

      Установка поставщика пакетов Chocolatey

      1. Откройте оболочку Windows PowerShell и для отображения списка источников пакетов, которые зарегистрированы в OneGet на локальном компьютере выполните команду Get-PackageSource. Обратите внимание на то, что если в команде вы указываете конкретный поставщик пакета, то в таком случае командлет Get-PackageSource отобразит для вас только те источники, которые связаны с указанным вами поставщиком. В противном случае команда возвращает все источники пакетов, которые зарегистрированы в OneGet. Так как нам нужно просмотреть источники пакетов для всех провайдеров, команда будет выполняться без каких-либо дополнительных параметров. Обязательно обратите внимание на то, что на данном этапе у вас дополнительный поставщик пакетов, который будет использоваться для инсталляции программных продуктов еще не установлен. Выходные данные команды вы можете посмотреть на следующем изображении:

        Рис. 1. Команда Get-PackageSource

        Рис. 1. Команда Get-PackageSource.

      2. Как видно на предыдущей иллюстрации, поставщик Chocolatey не установлен на нашем локальном компьютере. Следовательно, это нужно исправить. Обратите внимание на то, что для добавления поставщика пакетов у параметра ExecutionPolicy оболочки PowerShell должно быть установлено значение Unrestricted. В противном случае добавить поставщик не получится. Напомню, что командлет Get-ExecutionPolicy позволяет вам отобразить политики выполнения для текущего сеанса. Политика выполнения – это часть стратегии безопасности оболочки Windows PowerShell, которая определяет, можно ли загружать файлы конфигурации и выполнять скрипты, а также определяет, для выполнения каких скриптов требуется цифровая подпись. По умолчанию используется значение «Restricted» (не загружает файлы конфигурации и не выполняет скрипты), поэтому если вы у себя не изменяли значение политики выполнения – выполните команду Set-Executionpolicy Unrestricted. Так как по умолчанию областью политики выполнения является значение LocalMachine, чтобы параметры политики распространялись только на текущего пользователя, вы можете к применяемой команде еще добавить параметр –Scope со значением CurrentUser. Выходные данные этих двух команд видно на следующей иллюстрации:

        Рис. 2. Изменение параметров политики выполнения

        Рис. 2. Изменение параметров политики выполнения.

      3. На этом этапе мы можем посмотреть список поставщиков, которые зарегистрированы в OneGet на текущем компьютере. Для этого вы можете воспользоваться командлетом Get-PackageProvider. Данный командлет, как я уже успел упомянуть немного выше, возвращает список поставщиков пакетов, которые уже подключены в OneGet. При желании вы можете отфильтровать результаты, основанные на всех или на части одного (нескольких) имени поставщика. Например, чтобы посмотреть, какие поставщики подключены на данный момент, вы должны выполнить командлет Get-PackageProvider без каких-либо дополнительных параметров. Как видно на следующей иллюстрации, изначально на компьютере у меня подключено 4 таких поставщика, о которых я уже сегодня вам рассказывал. Теперь, чтобы установить поставщик Chocolatey на компьютере вам нужно выполнить команду Get-PackageProvider –Name Chocolatey –ForceBootstrap, где параметр –ForceBootstrap отвечает за автоматическую установку поставщика. Обратите внимание на то, что, как правило, при установке поставщика Chocolatey также должен быть просинталлирован поставщик NuGet. Как видно на следующей иллюстрации, после повторного использования командлета Get-PackageProvider, устанавливаемый нами поставщик уже должен фигурировать в списке:

        Рис. 3. Установка поставщика пакетов Chocolatey

        Рис. 3. Установка поставщика пакетов Chocolatey.

      Теперь мы можем сгенерировать полный список всех доступных в поставщиках пакетов и передать его по конвейеру командлету Export-CliXML для создания XML-представления объектов и их сохранения в XML-файле. Учтите, что экспортируемый вами список будет постоянно меняются и со временем все больше и больше пакетов будут добавляться в используемые вами репозитории. Соответственно, не забывайте время от времени заменять экспортируемый вами файл. Для того чтобы выполнить экспорт списка пакетов и сохранить этот список в папке C:\TestPosh вам нужно выполнить следующую команду: Find-Package | Export-CliXML C:\TestPosh\Test.xml

      Учтите, что процедура экспорта обязательно займет у вас какое-то время. После того как команда закончит выполняться и у вас на компьютере будет создан XML файл, импортируйте его и, для удобства просмотра, при помощи конвейера и команды GridView, отвечающей за отображение результатов выполнения команды в окне в виде интерактивной таблицы, можете посмотреть, какие пакеты будут доступны для установки. Естественно, этот список пакетов вы можете открыть при помощи любого приложения, которое способно обрабатывать XML файлы, например, средствами того же Excel. Данная команда, как вы видите на следующей иллюстрации, выглядит следующим образом: Import-CliXML С:\TestPosh\Test.xml | Out-GridView

      Рис. 4. Просмотр списка пакетов, доступных для установки

      Рис. 4. Просмотр списка пакетов, доступных для установки.

      Так как поставщик уже установлен, можно переходить к следующей части данной процедуры, а именно к

      Установке программного обеспечения средствами PowerShell

      Прежде чем устанавливать программные продукты нам следует посмотреть, что же уже установлено на компьютере. Для выполнения этой задачи вы можете воспользоваться командлетом Get-Package, который возвращает список всех пакетов программного обеспечения, установленных на локальном компьютере как с помощью OneGet, так и другими средствами инсталляции приложений. При желании вы также можете запускать командлет Get-Package и на удаленных компьютерах, запустив его как часть Invoke-Command, команды Enter-PSSession или скрипта.

      В том случае, если вы хотите получить информацию по конкретному программному обеспечению, например, по установленным продуктам Microsoft Office 2013, вы можете наряду с данным командлетом использовать параметр –Name с соответствующим значением, например, Get-Package -Name «office 2013». Выходные данные этого командлета видны ниже:

      Рис. 5. Вывод командлета Get-Package

      Рис. 5. Вывод командлета Get-Package.

      Перед инсталляцией программного обеспечения попробуем определиться с тем, что же нам нужно установить. Так как на машине установлен только офис 2013 и еще несколько приложений, далее я вам покажу, как можно установить такие программные продукты, как Adobe Creative Cloud, Adobe Reader, Notepad++, а также Process Explorer, Process Monitor и WinRar.

      Ввиду того, что до самого процесса инсталляции нам нужно сами пакеты локализовать, следует воспользоваться возможностями командлета Find-Package. Как вы уже заметили немного ранее, данный командлет позволяет выполнять поиск инсталляционных пакетов в доступных на локальном компьютере источниках пакетов. В том случае, если вы не будете использовать с данным командлетом какие-либо параметры, вам будет выведен командой полный список всех приложений, как было заметно ранее.

      Например, для начала попробуем найти приложения Adobe, которые доступны для инсталляции из добавленного нами поставщика Chocolatey. Для этого достаточно помимо самого командлета указать параметр –Name и в качестве его значения ввести искомый программный продукт. Так как после слова Adobe у инсталляционных пакетов может быть указано имя продукта, следует ввести имя продукта следующим образом: Adobe*, как показано на следующей иллюстрации. Как вы видите, модуль OneGet обнаружил в репозитории следующий инсталляционный пакет: adobe-creative-cloud версии 1.0. В принципе, это один из искомых продуктов, а это значит, что его следует проинсталлировать. Для этого, как также можно заметить на следующей иллюстрации, нужно воспользоваться возможностями командлета Install-Package. Чтобы установить Creative Cloud выполняется следующая команда Install-Package -Name adobe-creative-cloud –Force, где параметр Force, как принято в PowerShell, переопределяет ограничения, препятствующие выполнению команды до тех пор, пока изменения не начнут нарушать требования безопасности. Выходные данные этих команд можно увидеть на следующей иллюстрации:

      Рис. 6. Установка Adobe Creative Studio

      Рис. 6. Установка Adobe Creative Studio

      Теперь, после того как первый программный продукт был установлен попробуем выполнить поиск определенной версии Adobe Reader. Для этого помимо уже известной команды Find-Package –Name AdobeReader следует добавить параметр –AllVersions, который возвращает все доступные версии пакета, или все версии пакета, которые находятся в диапазоне, указанном в параметрах MinimumVersion и MaximumVersion. Обратите внимание на то, что этот параметр не является обязательным, так как изначально поиск отображает свежайшую версию программного продукта. Теперь из всех доступных версий нам следует выбрать ту, которая должна быть проинсталлирована на компьютере, например, пусть это будет версия 2015.007.20033. для того, чтобы установить именно эту версию ридера, следует для команды Install-Package -Name AdobeReader добавить параметр –RequiredVersion со значением 2015.007.20033, который определяет точную версию пакета, который вы хотите установить. Также вы можете установить максимально доступную версию продукта, добавив параметр MaximumVersion с соответствующим значением. Вывод этих команд виден на следующей иллюстрации:

      Рис. 7. Установка программного продукта определенной версии

      Рис. 7. Установка программного продукта определенной версии

      Если вам нужно установить свежайшую версию программного продукта и в то же время вы не хотите вводить в оболочке PowerShell несколько команд, вы можете обобщить поиск и установку пакета при помощи конвейера. Например, в случае с установкой последней версии текстового редактора Notepad++ вы можете выполнить следующую команду: Find-Package -Name NotepadPlusPlus | Install-Package –Force. Таким образом, вы выполняете поиск пакета в репозитории и в случае нахождения результата сразу инсталлируете его в тихом режиме. Процесс выполнения установки этого программного продукта виден ниже:

      Рис. 8. Установка Notepad++

      Рис. 8. Установка Notepad++

      Теперь, так как согласно указанному выше заданию осталось установить еще Process Explorer, Process Monitor и WinRar, попробуем установить сразу несколько программных пакетов. Для этого желательно точно знать, как называются эти пакеты в самом репозитории. Как я уже писал ранее, это можно проверить при помощи командлета Find-Package | Out-GridView. После того как будут известны имена пакетов можно заняться самой установкой. Для этого вы можете выполнить следующую команду: Find-Package -Name procexp, procmon, winrar | Install-Package. В данном примере, как видно на следующей иллюстрации, я специально не указываю параметр Force, чтобы вы могли обратить внимание на весь процесс установки нескольких программных пакетов одновременно.

      Рис. 9. Установка нескольких программ одновременно

      Рис. 9. Установка нескольких программ одновременно

      Сохранение и удаление программ

      Последние два командлета, которые будут рассмотрены в этой статье отвечают за сохранение инсталляционного пакета и удаление проинсталлированной программы. Начнем с сохранения.

      Для того чтобы сохранить инсталляционный пакет можно воспользоваться очередным командлетом модуля OneGet, а именно модулем Save-Package. Данный командлет позволяет сохранить пакеты на локальном компьютере без их последующей установки. По умолчанию данный командлет сохраняет последнюю версию программного продукта, однако если вы к текущему командлету добавите параметр AllVersions, у вас на компьютере будут сохранены все размещенные в репозитории версии выбранной вами программы. Более того, аналогично параметрам командлетов поиска и установки программ, помимо сохранения всех версий, при помощи параметров -MaximumVersion и –MinimumVersion, вы еще можете выбрать диапазон версий пакета, который желаете сохранить. Чтобы сохранить пакет на своем компьютере, помимо параметра Name и, в случае необходимости, параметра, отвечающего за версию продукта, вы должны указать параметр Path с будущим расположением вашего инсталлятора.

      Как видно на следующей иллюстрации, команда Save-Package –Name Procexp –Path C:\TestPosh сохранит последнюю версию Process Explorer в папке C:\TestPosh:

      Рис. 10. Сохранение Process Explorer на компьютере

      Рис. 10. Сохранение Process Explorer на компьютере

      Если вы случайно установили не тот пакет, вы всегда можете при помощи модуля OneGet его удалить. Для этого используется командлет Uninstall-Package. Как и в случае с остальными командлетами данного модуля, для удаления программы вам нужно указать параметр Name с соответствующим именем приложения, а также, для тихого удаления, вы можете использовать параметр Force. Например, чтобы удалить с компьютера установленный ранее WinRAR вам нужно выполнить следующую команду: Uninstall-Package –Name WinRAR –Force, как показано ниже:

      Рис. 11. Удаление установленной программы

      Рис. 11. Удаление установленной программы

      Заключение

      Из этой статьи вы узнали об одной из особенностей новой операционной системы от Microsoft, а именно об инсталляции программных продуктов средствами командной оболочки Windows PowerShell. Я вам рассказал о самом модуле OneGet, об основной терминологии, используемой наряду с этой технологией и о том, какие существуют предустановленные поставщики пакетов. Вы узнали о том, как можно подключить к OneGet сторонний поставщик пакетов и как при его помощи можно находить, устанавливать, сохранять и удалять программные продукты.

      Надеюсь, что данная информация была для вас полезной и вы узнали для себя что-то новое. Если у вас возникли вопросы по материалу данной статьи – задавайте их в комментариях, буду рад оказать любую помощь.

      VN:F [1.9.22_1171]
      Rating: 10.0/10 (13 votes cast)
      Установка программ средствами PowerShell в Windows 10, 10.0 out of 10 based on 13 ratings

One comment

  1. Наконец то я разобрался с этим.
    Спасибо за хорошую статью.

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *