次の方法で共有


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 のインストール

柔軟性を高め、IT、DevOps エンジニア、開発者のニーズをサポートするために、PowerShell 7 をインストールするためのオプションがいくつかあります。 ほとんどの場合、インストール オプションは次の方法に減らすことができます。

MSI パッケージは、 Microsoft Configuration Manager などの管理製品で展開および更新できます。 GitHub リリース ページからパッケージをダウンロードします。

MSI パッケージを展開するには、管理者権限が必要です。 ZIP パッケージは、任意のユーザーが展開できます。 ZIP パッケージは、完全インストールにコミットする前に、テスト用に PowerShell 7 をインストールする最も簡単な方法です。

Windows ストアまたは wingetを使用して PowerShell 7 をインストールすることもできます。 これらの方法の詳細については、「 Windows への PowerShell のインストール」の詳細な手順を参照してください。

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 はコア モジュールとデスクトップ モジュールの両方を読み込むことができます。

スコープのインストール 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 で使用するほとんどのモジュールは、Azure PowerShell や Active Directory など、PowerShell 7 で既に動作しています。 Microsoft Graph、Office 365 などの他のモジュールに対するネイティブ PowerShell 7 サポートを追加するために、他のチームと協力し続けています。 サポートされているモジュールの現在の一覧については、 PowerShell 7 モジュールの互換性に関する説明を参照してください。

Windows では、互換性のないモジュールを使用するユーザーのために PowerShell 7 への移行を容易にするために、 useWindowsPowerShell スイッチを Import-Module に追加しました。 この機能の詳細については、 about_Windows_PowerShell_Compatibilityを参照してください。

PowerShell リモート処理

PowerShell リモート処理を使用すると、1 台以上のリモート コンピューターで任意の PowerShell コマンドを実行できます。 永続的な接続の確立、対話型セッションの開始、リモート コンピューターでのスクリプトの実行を行うことができます。

WS-Management リモート処理

Windows PowerShell 5.1 以下では、接続ネゴシエーションとデータ 転送に WS-Management (WSMAN) プロトコルを使用します。 Windows リモート管理 (WinRM) は WSMAN プロトコルを使用します。 WinRM が有効になっている場合、PowerShell 7 では、リモート処理接続に Microsoft.PowerShell という名前の既存の Windows PowerShell 5.1 エンドポイントが使用されます。 PowerShell 7 を更新して独自のエンドポイントを含めるには、 Enable-PSRemoting コマンドレットを実行します。 特定のエンドポイントへの接続の詳細については、PowerShell でのリモート処理のWS-Management を参照してください。

Windows PowerShell リモート処理を使用するには、リモート管理用にリモート コンピューターを構成する必要があります。 手順を含む詳細については、「 リモート要件について」を参照してください。

リモート処理の操作の詳細については、「リモートについて」を参照してください。

SSH ベースのリモート処理

Windows ネイティブ コンポーネント ( WinRM など) を使用できない他のオペレーティング システムをサポートするために、POWERShell 6.x に SSH ベースのリモート処理が追加されました。 SSH リモート処理で、SSH サブシステムとしてターゲット コンピューター上に PowerShell ホスティング プロセスを作成します。 Windows または Linux で SSH ベースのリモート処理を設定する方法の詳細と例については、「 SSH 経由の PowerShell リモート処理」を参照してください。

PowerShell ギャラリー (PSGallery) には、SSH ベースのリモート処理を自動的に構成するモジュールとコマンドレットが含まれています。 Microsoft.PowerShell.RemotingTools から モジュールをインストールし、Enable-SSH コマンドレットを実行します。

New-PSSessionEnter-PSSession、およびInvoke-Commandコマンドレットには、SSH 接続をサポートするための新しいパラメーター セットがあります。

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

リモート セッションを作成するには、 HostName パラメーターを使用してターゲット コンピューターを指定し、 UserName でユーザー名を指定します。 コマンドレットを対話形式で実行すると、パスワードの入力を求められます。

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

または、 HostName パラメーターを使用する場合は、ユーザー名情報の後にアット マーク (@)、コンピューター名を指定します。

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

KeyFilePath パラメーターを使用して秘密キー ファイルを使用して SSH キー認証を設定できます。 詳細については、「 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 での編集エクスペリエンスの向上

PowerShell 拡張機能を使用した Visual Studio Code (VS Code) は、PowerShell 7 でサポートされているスクリプト環境です。 Windows PowerShell Integrated Scripting Environment (ISE) では、Windows PowerShell のみがサポートされます。

更新された PowerShell 拡張機能には、次のものが含まれます。

  • 新しい ISE 互換モード
  • 統合コンソールの PSReadLine では、構文の強調表示、複数行の編集、バック検索が可能です。
  • 安定性とパフォーマンスの向上
  • 新しい CodeLens 統合
  • パスのオートコンプリートの向上

Visual Studio Code への移行を容易にするには、コマンド パレットで使用できる ISE モードを有効にする機能を使用します。 この関数は、VS Code を ISE スタイルのレイアウトに切り替えます。 ISE スタイルのレイアウトでは、使い慣れたユーザー エクスペリエンスで PowerShell のすべての新機能が提供されます。

新しい ISE レイアウトに切り替えるには、Ctrl++キーを押してコマンド パレットを開き、「PowerShell」と入力して PowerShell: ISE モードを有効にします

レイアウトを元のレイアウトに設定するには、 コマンド パレットを開き、 PowerShell: ISE モードを無効にする (既定値に戻す) を選択します。

VS Code レイアウトを ISE にカスタマイズする方法の詳細については、「Visual Studio Code で ISE エクスペリエンスをレプリケートする方法」を参照してください。

ISE を新機能で更新する予定はありません。 最新バージョンの Windows 10 または Windows Server 2019 以降では、ISE はユーザーがアンインストールできる機能になりました。 ISE を完全に削除する予定はありません。 PowerShell チームとそのパートナーは、Visual Studio Code 用 PowerShell 拡張機能のスクリプト エクスペリエンスの向上に重点を置いています。

次のステップ

効果的に移行するための知識を備えた PowerShell 7 を今すぐインストールしてください。