Гид по технологиям

Установка PowerShell 7 с помощью Ansible

• 5 min read • DevOps • Обновлено 24 Nov 2025
Установка PowerShell 7 через Ansible
Установка PowerShell 7 через Ansible

Логотип PowerShell

Ansible позволяет массово развернуть PowerShell 7 на множестве Linux-систем без установки агентов — достаточно подготовить инвентори и плейбук. В статье показано, как настроить структуру каталогов, написать универсальный playbook для Ubuntu, Fedora и RedHat, а также даны чек-листы, распространённые ошибки и улучшенные сниппеты для продакшн-использования.

Быстрые ссылки

  • Установка Ansible на Windows и Linux

  • Настройка Ansible

  • Создание плейбука

  • Запуск плейбука

  • Заключение

Введение

PowerShell 7 — это мощная оболочка и язык сценариев. Так как PowerShell теперь кросс-платформенный, системным администраторам важно уметь автоматически разворачивать его на множестве систем. Ansible — удобный инструмент для написания плейбуков, который позволяет автоматически устанавливать PowerShell 7 на целевые узлы.

Краткое определение: Ansible — декларативный инструмент автоматизации, который выполняет команды на удалённых хостах по SSH/Shell, без установки дополнительных агентов.

Установка Ansible на Windows и Linux

На Linux Ansible обычно устанавливается через системный менеджер пакетов. Обычные команды:

sudo apt install ansible
sudo yum install ansible
sudo dnf install ansible

Windows: Ansible как нативный пакет для Windows недоступен. Рекомендуемый путь — установить Windows Subsystem for Linux (WSL) и внутри него выполнить установку Ansible теми же командами.

Важно: для управления Linux-хостами Ansible использует SSH. Для управления Windows — WinRM. В этой статье мы фокусируемся на развёртывании PowerShell 7 на Linux-системах.

Настройка Ansible

Для удобства работы организуйте простую структуру каталога репозитория с Ansible:

  • inventories

  • playbooks

  • vars

В директории inventories создайте файл hosts с перечнем целевых систем. Пример простой группы production с комментариями:

[production]
# test-system-01
100.100.10.10
# test-system-02
100.100.10.11
# test-system-03
100.100.10.12
# test-system-04
100.100.10.13

Хост может состоять в нескольких группах — это удобно для группировки и таргетинга.

Совет: храните конфиденциальные данные (пароли, ключи) в Ansible Vault.

Создание плейбука

Создайте папку playbooks/deploy-powershell и файл main.yml. Ниже — базовый пример для Ubuntu с добавлением ключа и репозитория Microsoft, затем установки пакета:

---
- name: Install PowerShell 7
  hosts: all
  become: yes
  tasks:
    - name: Download and Add Powershell Key to Apt-Get Keyring
      apt_key:
        url: "https://packages.microsoft.com/keys/microsoft.asc"
        state: present

    - name: Add Powershell Repository into /etc/apt/sources.list - Bionic
      apt_repository:
        repo: 'deb [arch=amd64] https://packages.microsoft.com/ubuntu/18.04/prod bionic main'
        state: present

    - name: Install Powershell
      apt:
        pkg: powershell
        state: latest
        force: yes

Пояснения: используем become: yes чтобы выполнять действия от имени root; apt_key и apt_repository добавляют доверенные ключи и репозиторий; apt устанавливает пакет.

Расширение плейбука для других дистрибутивов

Добавим условную логику по значению ansible_distribution для поддержки Ubuntu, RedHat и Fedora. Также добавим обновление кэша пакетов где нужно и обработчик (handler) для обновления APT.

---
- name: Install PowerShell 7
  hosts: all
  become: yes
  vars:
    ms_repo_rhel7: "https://packages.microsoft.com/config/rhel/7/prod.repo"
    ms_repo_ubuntu_bionic: "deb [arch=amd64] https://packages.microsoft.com/ubuntu/18.04/prod bionic main"
  tasks:
    - name: Ensure apt cache is updated
      apt:
        update_cache: yes
      when: ansible_os_family == 'Debian'

    - name: Download and Add Powershell Key to Apt-Get Keyring
      apt_key:
        url: "https://packages.microsoft.com/keys/microsoft.asc"
        state: present
      when: ansible_distribution == 'Ubuntu'

    - name: Add Powershell Repository into /etc/apt/sources.list - Ubuntu
      apt_repository:
        repo: "{{ ms_repo_ubuntu_bionic }}"
        state: present
      when: ansible_distribution == 'Ubuntu'

    - name: Add repository - RHEL-based
      yum_repository:
        name: microsoft
        description: Microsoft Repository
        baseurl: "{{ ms_repo_rhel7 }}"
      when: ansible_os_family == 'RedHat'

    - name: Install PowerShell package on Debian/Ubuntu
      apt:
        pkg: powershell
        state: latest
        force: yes
      when: ansible_os_family == 'Debian'

    - name: Install PowerShell package on RHEL/CentOS
      yum:
        name: powershell
        state: latest
      when: ansible_os_family == 'RedHat'

    - name: Install PowerShell package on Fedora
      dnf:
        name: powershell
        state: latest
      when: ansible_distribution == 'Fedora'

  handlers:
    - name: apt-get update
      apt:
        update_cache: yes

Советы по идемпотентности: используйте модули Ansible (apt, yum, dnf), а не shell/command без необходимости. Это позволяет Ansible корректно определять изменения.

Запуск плейбука

Для запуска используйте:

ansible-playbook /path/to/main.yml -i /path/to/hosts

Вы увидите вывод по каждому узлу: success/changed/failed/ok/skipped. Условные задачи, не соответствующие дистрибутиву, будут помечены как skipped.

Важно: при первом подключении Ansible может попросить подтвердить ключ хоста SSH. Для автоматизации можно настроить опцию host_key_checking = False в ansible.cfg, но это снижает безопасность.

Критерии приёмки

  • PowerShell 7 успешно установлен и запускается командой pwsh на всех целевых хостах.
  • На хосте установлен пакет в версии, равной или новее, чем указанная в репозитории.
  • Конфигурация репозиториев и ключей присутствует и имеет корректные права доступа.
  • Ansible-run завершился без ошибок (status 0) и с ожидаемым количеством изменений.

Распространённые ошибки и когда это не сработает

  • Системы без доступа в интернет: репозитории и ключи не будут доступны. Решение: локальный прокси или внутренний репозиторий.
  • Блокировка менеджера пакетов (dpkg/apt/dnf): задача установится с ошибкой. Решение: обеспечить отсутствие lock-файлов перед запуском.
  • Неподдерживаемая архитектура (например arm64 без пакета): пакет может не существовать.
  • Неправильные права sudo/без become: задачи, требующие прав root, завершатся ошибкой.

Альтернативные подходы

  • Использовать пакеты контейнеров: доставлять PowerShell как контейнерный образ для приложений.
  • Использовать скрипты установки (bash/sh) и запускать их через Ansible module script — полезно для простых одноразовых задач, но хуже с идемпотентностью.
  • Для Windows можно использовать Chocolatey или MSI-пакеты и модуль win_package/winget для Ansible Windows-инвентаря.
  • Для больших инфраструктур рассмотреть Salt/Puppet/Chef — они дают другой уровень управления состоянием и инфраструктуры.

Чек-лист ролей (кто что делает)

  • Администратор сети:

    • Обеспечить доступ к репозиториям и прокси.
    • Открыть необходимые firewall-порты (HTTP/HTTPS).
  • DevOps-инженер:

    • Подготовить инвентори и плейбук.
    • Настроить CI для запуска Ansible-run.
  • Секьюрити-инженер:

    • Проверить ключи репозиториев.
    • Контролировать Vault для секретов.

Snippet: минимальный production-ready плейбук

---
- name: Deploy PowerShell 7 to production group
  hosts: production
  become: yes
  serial: 10
  max_fail_percentage: 20
  vars_files:
    - ../vars/credentials.yml
  roles:
    - deploy-powershell

Комментарий: использование serial и max_fail_percentage позволяет контролировать развертывание и снижать blast radius.

Decision flow: какой модуль пакета использовать

flowchart TD
  A{ansible_os_family == 'Debian'?} -->|yes| B[Использовать apt module]
  A -->|no| C{ansible_os_family == 'RedHat'?}
  C -->|yes| D[Использовать yum или dnf]
  C -->|no| E[Проверить дистрибутив / использовать shell script]

Тонкости безопасности

  • Подписывайте и проверяйте репозитории; не отключайте проверку ключей.
  • Храните секреты в Ansible Vault или интегрируйте HashiCorp Vault.
  • Не отключайте host_key_checking в продакшне без веской причины.

Проверки и тесты приёмки

  • Тест: выполнить pwsh -v на нескольких хостах через Ansible ad-hoc и проверить код возврата 0.
  • Тест: подтвердить, что репозиторий Microsoft присутствует в конфигурации менеджера пакетов.
  • Тест: проверить, что команда ansible-playbook возвращает ожидаемое число changed/ok/failed.

Шаблоны и короткие подсказки (cheat sheet)

  • Запуск на одной группе: ansible-playbook main.yml -i inventories/hosts --limit production
  • Проверка подключения: ansible all -m ping -i inventories/hosts
  • Просмотр фактов хоста: ansible host1 -m setup

Заключение

Ansible — удобный и гибкий инструмент для массовой установки PowerShell 7. Путём использования условных задач, переменных и ролей вы получите переносимый и управляемый процесс установки. Для продакшн-развертывания добавьте контроль версий, CI-пайплайн и продуманную стратегию обработки ошибок.

Важно: комбинируя Ansible и PowerShell, вы получаете возможность централизованно разворачивать и конфигурировать оболочку на сотнях хостов с минимальными усилиями.

Ресурсы и дальнейшие шаги

  • Рассмотрите добавление роли в Galaxy для повторного использования.
  • Автоматизируйте тестирование с помощью Molecule для ролей Ansible.

Ключевые термины (оглавление)

  • Ansible — инструмент автоматизации конфигурации и оркестрации по SSH.
  • Playbook — YAML-файл с задачами и ролями для Ansible.
  • Inventory — список целевых узлов для Ansible.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро