about_Windows_PowerShell_Compatibility

簡単な説明

PowerShell 7 の Windows PowerShell 互換性機能について説明します。

長い説明

モジュールマニフェストによってモジュールが PowerShell Core と互換性があることが示されていない限り、フォルダー内 %windir%\system32\WindowsPowerShell\v1.0\Modules のモジュールは Windows PowerShell 互換性機能によって Windows PowerShell 5.1 プロセスのバックグラウンドで読み込まれます。

互換性機能の使用

Windows PowerShell の互換性機能を使用して最初のモジュールをインポートすると、PowerShell によって、バックグラウンド Windows PowerShell 5.1 プロセスで実行されているという名前 WinPSCompatSession のリモートセッションが作成されます。 このプロセスは、互換性機能が最初のモジュールをインポートするときに作成されます。 このプロセスは、最後のモジュールが削除されたとき (を使用 Remove-Module )、または PowerShell プロセスが終了したときに閉じられます。

セッションに WinPSCompatSession 読み込まれたモジュールは、暗黙的なリモート処理によって使用され、現在の PowerShell セッションに反映されます。 これは、PowerShell ジョブで使用されるトランスポート方法と同じです。

モジュールをセッションに WinPSCompatSession インポートすると、暗黙的なリモート処理によってユーザーの $env:Temp ディレクトリにプロキシモジュールが生成され、このプロキシモジュールが現在の PowerShell セッションにインポートされます。 これにより、PowerShell は Windows PowerShell 互換性機能を使用してモジュールが読み込まれたことを検出できます。

セッションが作成されると、逆シリアル化されたオブジェクトで正しく動作しない操作に対して使用できます。 パイプライン全体が Windows PowerShell で実行され、最終的な結果だけが返されます。 次に例を示します。

$s = Get-PSSession -Name WinPSCompatSession
Invoke-Command -Session $s -ScriptBlock {
  "Running in Windows PowerShell version $($PSVersionTable.PSVersion)"
}

互換性機能は、次の2つの方法で呼び出すことができます。

  • Usewindowspowershell パラメーターを使用してモジュールを明示的にインポートする

    Import-Module -Name ScheduledTasks -UseWindowsPowerShell
    
  • モジュール名、パス、またはコマンド検出による自動読み込みによって Windows PowerShell モジュールをインポートすることによって暗黙的に実行します。

    Import-Module -Name ServerManager
    Get-AppLockerPolicy -Local
    

    まだ読み込まれていない場合は、を実行 Get-AppLockerPolicy すると、AppLocker モジュールが自動読み込みされます。

Windows PowerShell 互換性ブロックは、 WindowsPowerShellCompatibilityModuleDenyList PowerShell 構成ファイルの設定に一覧表示されているモジュールの読み込みをブロックします。

この設定の既定値は次のとおりです。

"WindowsPowerShellCompatibilityModuleDenyList":  [
   "PSScheduledJob","BestPractices","UpdateServices"
]

暗黙的なモジュール読み込みの管理

Windows PowerShell 互換性機能の暗黙的なインポート動作を無効にするには、PowerShell 構成ファイルの設定を使用 DisableImplicitWinCompat します。 この設定をファイルに powershell.config.json 追加できます。 詳細については、「 about_powershell_config」を参照してください。

この例では、Windows PowerShell の互換性に関するモジュールの暗黙的な読み込み機能を無効にする構成ファイルを作成する方法を示します。

$ConfigPath = "$PSHOME\DisableWinCompat.powershell.config.json"
$ConfigJSON = ConvertTo-Json -InputObject @{
  "DisableImplicitWinCompat" = $true
  "Microsoft.PowerShell:ExecutionPolicy" = "RemoteSigned"
}
$ConfigJSON | Out-File -Force $ConfigPath
pwsh -settingsFile $ConfigPath

モジュールの互換性に関する最新情報については、 PowerShell 7 モジュールの互換性 リストを参照してください。

コマンドレット clobbering の管理

Windows PowerShell 互換性機能は、暗黙的なリモート処理を使用してモジュールを互換モードで読み込みます。 その結果、モジュールによってエクスポートされたコマンドは、現在の PowerShell 7 セッションで同じ名前のコマンドよりも優先されるようになります。 PowerShell 7.0.0 リリースでは、PowerShell に付属するコアモジュールがこれに含まれていました。

PowerShell 7.1 では、次のコア PowerShell モジュールが上書きされないように動作が変更されました。

  • Microsoft. PowerShell ホスト
  • Microsoft.PowerShell.Diagnostics
  • Microsoft.PowerShell.Host
  • Microsoft.PowerShell.Management
  • Microsoft.PowerShell.Security
  • Microsoft.PowerShell.Utility
  • Microsoft.WSMan.Management

また、PowerShell 7.1 では、互換性モードで上書きできない追加のモジュールを一覧表示する機能も追加されました。

PowerShell 構成ファイルに設定を追加 WindowsPowerShellCompatibilityNoClobberModuleList できます。 この設定の値は、モジュール名のコンマ区切りのリストです。 この設定の既定値は次のとおりです。

"WindowsPowerShellCompatibilityNoClobberModuleList": [ ]

制限事項

Windows PowerShell の互換性機能:

  1. Windows のコンピューターでのみローカルに機能する
  2. Windows PowerShell 5.1 が必要です
  3. ライブオブジェクトではなく、シリアル化されたコマンドレットパラメーターと戻り値を操作します。
  4. Windows PowerShell リモート処理セッションにインポートされたすべてのモジュールは、同じ実行空間を共有します。

キーワード

about_Windows_PowerShell_Compatibility

関連項目