スクリプトを使用して WDAC ポリシーをデプロイする

Windows Defender アプリケーションコントロール (WDAC) の一部の機能は、特定の Windows バージョンでのみ使用できます。 アプリケーション制御機能の可用性について詳しくは、こちらをご覧ください。

この記事では、スクリプトを使用して Windows Defender アプリケーション制御 (WDAC) ポリシーを展開する方法について説明します。 次の手順では PowerShell を使用しますが、任意のスクリプト ホストで動作できます。

これで、1 つ以上の WDAC ポリシーがバイナリ形式に変換されます。 そうでない場合は、「Windows Defender アプリケーション制御 (WDAC) ポリシーの展開」で説明されている手順に従います。

重要

既知の問題のため、メモリの整合性が有効になっているシステムで再起動を行い、新しい署名済み WDAC 基本ポリシーを常にアクティブにする必要があります。 CiTool、RefreshPolicy.exe、または WMI を使用してポリシーのアクティブ化を開始する以下のすべての手順をスキップします。 代わりに、ポリシー バイナリを正しい system32 と EFI の場所にコピーし、システム再起動でポリシーをアクティブ化します。

この問題は、システムで既にアクティブになっている署名済みの基本ポリシー、署名されていないポリシーの展開、または補足ポリシーの展開 (署名済みまたは署名なし) の更新には影響しません。 また、メモリ整合性を実行していないシステムへのデプロイにも影響しません。

Windows 11 22H2 以降のポリシーの展開

受信トレイ CiTool を使用して、次のコマンドを使用して、Windows 11 22H2 にポリシーを適用できます。 次の例でデプロイ>するポリシー バイナリ ファイルへのパスを、WDAC ポリシー バイナリ ファイルへの実際のパスに置き換えてください<

# Policy binary files should be named as {GUID}.cip for multiple policy format files (where {GUID} = <PolicyId> from the Policy XML)
$PolicyBinary = "<Path to policy binary file to deploy>"
CiTool --update-policy $PolicyBinary [-json]

Windows 11、Windows 10 バージョン 1903 以降、および Windows Server 2022 以降のポリシーの展開

この手順を使用するには、 WDAC ポリシー更新ツール をダウンロードして、すべてのマネージド エンドポイントに配布します。 WDAC ポリシーで WDAC ポリシー更新ツールが許可されていることを確認するか、マネージド インストーラーを使用してツールを配布します。

  1. スクリプトで使用する変数を初期化します。

    # Policy binary files should be named as {GUID}.cip for multiple policy format files (where {GUID} = <PolicyId> from the Policy XML)
    $PolicyBinary = "<Path to policy binary file to deploy>"
    $DestinationFolder = $env:windir+"\System32\CodeIntegrity\CIPolicies\Active\"
    $RefreshPolicyTool = "<Path where RefreshPolicy.exe can be found from managed endpoints>"
    
  2. アプリケーション制御 (WDAC) ポリシー バイナリWindows Defenderコピー先フォルダーにコピーします。

    Copy-Item -Path $PolicyBinary -Destination $DestinationFolder -Force
    
  3. 必要に応じて手順 1 ~ 2 を繰り返して、より多くの WDAC ポリシーを展開します。

  4. RefreshPolicy.exe を実行して、マネージド エンドポイント上のすべての WDAC ポリシーをアクティブ化および更新します。

    & $RefreshPolicyTool
    

他のすべてのバージョンの Windows および Windows Server のポリシーの展開

WMI を使用して、他のすべてのバージョンの Windows と Windows Server にポリシーを適用します。

  1. スクリプトで使用する変数を初期化します。

    # Policy binary files should be named as SiPolicy.p7b for Windows 10 versions earlier than 1903
    $PolicyBinary = "<Path to policy binary file to deploy>"
    $DestinationBinary = $env:windir+"\System32\CodeIntegrity\SiPolicy.p7b"
    
  2. アプリケーション制御 (WDAC) ポリシー バイナリWindows Defenderコピー先にコピーします。

    Copy-Item  -Path $PolicyBinary -Destination $DestinationBinary -Force
    
  3. WMI を使用して WDAC ポリシーを更新してアクティブ化する

    Invoke-CimMethod -Namespace root\Microsoft\Windows\CI -ClassName PS_UpdateAndCompareCIPolicy -MethodName Update -Arguments @{FilePath = $DestinationBinary}
    

署名済みポリシーの展開

署名済み WDAC ポリシーを使用している場合は、前のセクションで説明した場所に加えて、ポリシーをデバイスの EFI パーティションに展開する必要があります。 署名されていない WDAC ポリシーは、EFI パーティションに存在する必要はありません。

  1. EFI ボリュームをマウントし、ディレクトリが存在しない場合は、管理者特権の PowerShell プロンプトで作成します。

    $MountPoint = 'C:\EFIMount'
    $EFIDestinationFolder = "$MountPoint\EFI\Microsoft\Boot\CiPolicies\Active"
    $EFIPartition = (Get-Partition | Where-Object IsSystem).AccessPaths[0]
    if (-Not (Test-Path $MountPoint)) { New-Item -Path $MountPoint -Type Directory -Force }
    mountvol $MountPoint $EFIPartition
    if (-Not (Test-Path $EFIDestinationFolder)) { New-Item -Path $EFIDestinationFolder -Type Directory -Force }
    
  2. 署名済みポリシーを作成したフォルダーにコピーします。

    Copy-Item -Path $PolicyBinary -Destination $EFIDestinationFolder -Force
    
  3. システムを再起動します。