Поделиться через


Переход с 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.

Установка PowerShell 7

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

Заметка

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

Для развертывания пакета MSI требуется разрешение администратора. ZIP-пакет может быть установлен любым пользователем. Zip-пакет — самый простой способ установить PowerShell 7 для тестирования, прежде чем выполнять полную установку.

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

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

PowerShell 7 предназначен для совместной работы с Windows PowerShell 5.1. Следующие функции обеспечивают защиту инвестиций в PowerShell и простой перенос в PowerShell 7.

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

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

PowerShell 7.4 основана на .NET 8.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 и Desktop.

Область установки 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.

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

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

Профиль 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

Дополнительные сведения about_Profiles.

Совместимость 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 мы также добавили параметр UseWindowsPowerShellImport-Module, чтобы упростить переход на PowerShell 7 для тех, кто использует несовместимые модули. Дополнительные сведения об этой функции см. в about_Windows_PowerShell_Compatibility.

Удаленное управление PowerShell

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

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

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

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

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

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

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

Заметка

Галерея PowerShell (PSGallery) содержит модуль и cmdlet, которые автоматически настраивают удаленное взаимодействие на основе 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: определяет источник обновляемой справки как каталог, а не Интернет.

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

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*

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

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

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

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

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

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

Чтобы переключиться на новый макет ISE, нажмите клавиши CTRL SHIFTP, чтобы открытьпалитры команд , введите и выберите PowerShell: включить режим ISE.

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

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

Заметка

Нет планов обновить isE с новыми функциями. В последних версиях Windows 10 или Windows Server 2019 и более новых версий ISE теперь является функцией, которую можно удалить пользователю. Нет никаких планов окончательного удаления ISE. Команда PowerShell и ее партнеры сосредоточены на улучшении возможностей сценариев в расширении PowerShell для Visual Studio Code.

Дальнейшие действия

Вооружившись знаниями для эффективной миграции, установить PowerShell 7 сейчас!