Миграция с Windows PowerShell 5.1 на PowerShell 7

Средство PowerShell 7, предназначенное для облачных, локальных и гибридных сред, теперь значительно усовершенствовано и предоставляет новые возможности:

  • установка и работа параллельно с Windows PowerShell;
  • увеличенная совместимость с существующими модулями Windows PowerShell;
  • новые языковые возможности, такие как тернарные операторы и ForEach-Object -Parallel;
  • Улучшение производительности
  • удаленное взаимодействие на основе протокола SSH;
  • межплатформенное взаимодействие;
  • Поддержка контейнеров Docker

PowerShell 7 работает параллельно с Windows PowerShell, позволяя легко тестировать и сравнивать код в разных выпусках перед развертыванием. Миграция — это простой, быстрый и

PowerShell 7 поддерживается в следующих операционных системах Windows:

  • Windows 10 и 11
  • Windows Server 2016, 2019 и 2022

PowerShell 7 также работает в macOS и нескольких дистрибутивах Linux. Список поддерживаемых операционных систем и сведения о жизненном цикле поддержки см. в этой статье.

Установка PowerShell 7

Для обеспечения гибких возможностей и в связи с требованиями ИТ-специалистов, инженеров DevOps, а также разработчиков доступно несколько вариантов установки PowerShell 7. В большинстве случаев варианты установки можно сократить до следующих методов:

Примечание.

Пакет MSI можно развернуть и обновить с помощью продуктов управления, таких как Microsoft Configuration Manager. Скачайте пакеты на странице выпусков GitHub.

Для развертывания MSI-пакета требуются привилегии администратора. ZIP-пакет может развернуть любой пользователь. Установка с помощью ZIP-пакета — это самый простой способ установить PowerShell 7 для тестирования перед полной установкой.

PowerShell 7 можно также установить с помощью Магазина Windows или winget. Дополнительные сведения об обоих этих методах см. в подробных инструкциях в разделе Установка PowerShell на Windows.

Параллельное использование Windows PowerShell 7 с Windows PowerShell 5.1

В средстве PowerShell 7 предусмотрена возможность сосуществовать с Windows PowerShell 5.1. Следующие свойства гарантируют защиту инвестиций в PowerShell и простоту миграции в PowerShell 7:

  • Отдельный путь установки и исполняемый файл
  • отдельная переменная PSModulePath;
  • отдельный профиль для каждой версии;
  • увеличенная совместимость модулей;
  • новые конечные точки удаленного взаимодействия;
  • поддержка групповой политики;
  • отдельные журналы событий;

Различия в версиях .NET

PowerShell 7.2 основана на .NET 6.0. Windows PowerShell 5.1 основан на платформа .NET Framework 4.x. Различия между версиями .NET могут повлиять на поведение скриптов, особенно при вызове метода .NET напрямую. Дополнительные сведения см . в различиях между Windows PowerShell 5.1 и PowerShell 7.x.

Отдельный путь установки и исполняемый файл

PowerShell 7 устанавливается в новом каталоге и работает параллельно с Windows PowerShell 5.1.

Расположения установки по версии:

  • Windows PowerShell 5.1: $env:WINDIR\System32\WindowsPowerShell\v1.0.
  • PowerShell 6.x: $env:ProgramFiles\PowerShell\6
  • PowerShell 7: $env:ProgramFiles\PowerShell\7.

Новое расположение добавляется в переменную PATH, что позволяет запускать параллельно Windows PowerShell 5.1 и PowerShell 7. Если выполняется миграция с PowerShell 6.x в PowerShell 7, PowerShell 6 удаляется и переменная PATH заменяется.

В Windows PowerShell исполняемый файл PowerShell называется powershell.exe. В версии 6 и более поздних версиях исполняемый файл называется pwsh.exe. Новое имя позволяет легко поддерживать параллельную работу обеих версий.

отдельная переменная PSModulePath;

По умолчанию Windows PowerShell и PowerShell 7 сохраняют модули в разных расположениях. В PowerShell 7 эти расположения объединены в переменную среды $Env:PSModulePath. При импорте модуля по имени PowerShell проверяет расположение, указанное с помощью $Env:PSModulePath. Это позволяет PowerShell 7 загружать как базовые модули (Core), так и предназначенные для компьютеров.

Область установки Windows PowerShell 5.1 PowerShell 7.0
Модули PowerShell $env:WINDIR\system32\WindowsPowerShell\v1.0\Modules $env:ProgramFiles\PowerShell\7\Modules
Установленная пользователем
область AllUsers
$env:ProgramFiles\WindowsPowerShell\Modules $env:ProgramFiles\PowerShell\Modules
Установленная пользователем
область CurrentUser
$HOME\Documents\WindowsPowerShell\Modules $HOME\Documents\PowerShell\Modules

В следующих примерах показаны значения $Env:PSModulePath по умолчанию для каждой версии.

  • Для Windows PowerShell 5.1:

    $Env:PSModulePath -split (';')
    
    C:\Users\<user>\Documents\WindowsPowerShell\Modules
    C:\Program Files\WindowsPowerShell\Modules
    C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules
    
  • Для PowerShell 7:

    $Env:PSModulePath -split (';')
    
    C:\Users\<user>\Documents\PowerShell\Modules
    C:\Program Files\PowerShell\Modules
    C:\Program Files\PowerShell\7\Modules
    C:\Program Files\WindowsPowerShell\Modules
    C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules
    

Обратите внимание, что PowerShell 7 включает пути Windows PowerShell и PowerShell 7 для обеспечения автоматической загрузки модулей.

Примечание.

Могут существовать дополнительные пути, если вы изменили переменную среды PSModulePath или установили пользовательские модули или приложения.

Дополнительные сведения см. здесь: about_PSModulePath.

Дополнительные сведения о модулях см. в этой статье.

Отдельные профили

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

Путь к расположению профиля в PowerShell 7 изменился.

  • В Windows PowerShell 5.1 расположение профиля — $HOME\Documents\WindowsPowerShell.
  • В PowerShell 7 расположение профиля — $HOME\Documents\PowerShell.

Имена файлов профилей также изменились:

$PROFILE | Select-Object *Host* | Format-List
 AllUsersAllHosts       : C:\Program Files\PowerShell\7\profile.ps1
 AllUsersCurrentHost    : C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1
 CurrentUserAllHosts    : C:\Users\<user>\Documents\PowerShell\profile.ps1
 CurrentUserCurrentHost : C:\Users\<user>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

Дополнительные сведения о профилях см. в этой статье.

Совместимость PowerShell 7 с модулями Windows PowerShell 5.1

Большинство модулей, используемых в Windows PowerShell 5.1, уже работают с PowerShell 7, в том числе Azure PowerShell и Active Directory. Мы продолжаем работать с другими командами над добавлением встроенной поддержки в PowerShell 7 большего числа модулей, в том числе Microsoft Graph, Office 365 и др. Текущий список поддерживаемых модулей см. в статье Совместимость модулей PowerShell 7.

Примечание.

В Windows мы также добавили переключатель UseWindowsPowerShell в Import-Module, чтобы упростить переход на PowerShell 7 для тех, кто использует несовместимые модули. Дополнительные сведения об этих функциональных возможностях см. в статье О совместимости Windows PowerShell.

Удаленное взаимодействие PowerShell

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

Удаленное взаимодействие с использованием WS-Management

В Windows PowerShell 5.1 и более ранних версий используйте протокол WS-Management для согласования подключения и передачи данных. Служба удаленного управления Windows (WinRM) использует протокол WS-Management. Если служба WinRM включена, PowerShell 7 использует существующую конечную точку Windows PowerShell 5.1 с именем Microsoft.PowerShell для удаленных подключений. Чтобы обновить PowerShell 7 для включения собственной конечной точки, выполните командлет Enable-PSRemoting. Дополнительные сведения о подключении к конкретным конечным точкам см. в статье Удаленное взаимодействие через WS-Management в PowerShell.

Чтобы использовать службу удаленного взаимодействия Windows PowerShell, удаленный компьютер должен быть настроен для удаленного управления. Дополнительные сведения, в том числе инструкции, см. в разделе about_Remote_Requirements.

Дополнительные сведения о работе с удаленным взаимодействием см. в статье Об удаленном взаимодействии.

удаленное взаимодействие на основе протокола SSH;

Возможность удаленного взаимодействия через SSH добавлена в PowerShell 6.x для поддержки других операционных систем, которые не могут использовать собственные компоненты Windows, такие как WinRM. Функция удаленного взаимодействия по SSH создает хост-процесс PowerShell на целевом компьютере в качестве подсистемы SSH. Дополнительные сведения и примеры настройки удаленного взаимодействия на основе SSH в Windows или Linux см. в статье о удаленном взаимодействии PowerShell по протоколу SSH.

Примечание.

Коллекция PowerShell (PSGallery) содержит модуль и командлет, который автоматически настраивает удаленное взаимодействие с использованием протокола SSH. Установите модуль Microsoft.PowerShell.RemotingTools из PSGallery и выполните командлет Enable-SSH.

Командлеты New-PSSession, Enter-PSSession и Invoke-Command имеют новые наборы параметров для поддержки подключений SSH.

[-HostName <string>]  [-UserName <string>]  [-KeyFilePath <string>]

Чтобы создать удаленный сеанс, укажите целевой компьютер с помощью параметра HostName и имя пользователя с помощью параметра UserName. При интерактивном выполнении командлетов отображается запрос на ввод пароля.

Enter-PSSession -HostName <Computer> -UserName <Username>

Кроме того, при использовании параметра HostName укажите имя пользователя, за которым должен следовать символ (@) и затем имя компьютера.

Enter-PSSession -HostName <Username>@<Computer>

Проверку подлинности ключа SSH можно настроить, используя файл закрытого ключа в параметре KeyFilePath. Дополнительные сведения см. в статье Управление ключами OpenSSH.

Поддержка групповой политики

В PowerShell предусмотрены настройки групповой политики, позволяющие определить согласованные значения параметров для серверов в корпоративной среде. К этим параметрам относятся:

  • Конфигурация сеанса консоли: задает конечную точку конфигурации, в которой выполняется PowerShell.
  • Включение ведения журнала модулей. Задает свойство LogPipelineExecutionDetails модулей.
  • Включите ведение журнала блоков скриптов PowerShell: включает подробное ведение журнала всех скриптов PowerShell.
  • Включение выполнения скрипта: задает политику выполнения PowerShell.
  • "Включить транскрипции PowerShell" — включает запись входных и выходных данных команд PowerShell в виде текстовых расшифровок
  • Задайте исходный путь по умолчанию для update-Help: задает источник для обновляемой справки в каталог, а не в Интернете.

Дополнительные сведения см. в статье О параметрах групповой политики.

В PowerShell 7 предусмотрены шаблоны групповой политики и скрипт установки в $PSHOME.

Инструменты групповой политики используют файлы административных шаблонов (с расширениями .admx, .adml) для заполнения параметров политики в пользовательском интерфейсе. Это позволяет администраторам управлять параметрами политики на основе реестра. Скрипт InstallPSCorePolicyDefinitions.ps1 устанавливает административные шаблоны PowerShell на локальном компьютере.

Get-ChildItem -Path $PSHOME -Filter *Core*Policy*
    Directory: C:\Program Files\PowerShell\7

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           2/27/2020 12:38 AM          15861 InstallPSCorePolicyDefinitions.ps1
-a---           2/27/2020 12:28 AM           9675 PowerShellCoreExecutionPolicy.adml
-a---           2/27/2020 12:28 AM           6201 PowerShellCoreExecutionPolicy.admx

Отдельные журналы событий

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

Get-WinEvent -ListLog *PowerShell*

Дополнительные сведения см. в статье О ведении журналов Windows.

Улучшенные возможности редактирования с помощью Visual Studio Code

Visual Studio Code (VS Code) с расширением PowerShell — поддерживаемая среда написания скриптов для PowerShell 7. Интегрированная среда сценариев (ISE) Windows PowerShell поддерживает только Windows PowerShell.

Обновленное расширение PowerShell включает в себя:

  • новый режим совместимости ISE;
  • PSReadLine в интегрированной консоли, в том числе выделение синтаксиса, многострочное редактирование и обратный поиск;
  • повышенную стабильность работы и производительность;
  • интеграцию с CodeLens;
  • Улучшенная автозавершение пути

Чтобы упростить переход на Visual Studio Code, используйте возможность Enable ISE Mode (Включить режим ISE), доступную в палитре команд. Эта функция переключает VS Code в режим макета в стиле ISE. Режим макета в стиле ISE предоставляет все новые функции и возможности PowerShell в знакомом пользовательском интерфейсе.

Чтобы перейти к новому макету ISE, нажмите клавиши CTRL+SHIFT+P, чтобы открыть палитру команд, введите PowerShell и выберите PowerShell: Включить режим ISE.

Чтобы задать макет исходному макету, откройте палитру команд, выберите PowerShell: отключить режим ISE (восстановление до значений по умолчанию).

Дополнительные сведения о настройке макета VS Code для ISE см. в статье Репликация функций интегрированной среды скриптов в Visual Studio Code.

Примечание.

Добавление в ISE новых возможностей сейчас не планируется. Теперь ISE в последних версиях Windows 10 или Windows Server 2019 и более поздних может удалить пользователь. Окончательное удаление ISE сейчас не планируется. Команда PowerShell и ее партнеры по работе сейчас работают над совершенствованием возможностей написания скриптов с использованием расширения PowerShell для Visual Studio Code.

Next Steps

Теперь, когда вы узнали об эффективности миграции, установите PowerShell 7.