使用脚本部署 WDAC 策略

注意

Windows Defender应用程序控制 (WDAC) 的某些功能仅在特定的 Windows 版本上可用。 详细了解 应用程序控制功能可用性

本文介绍如何使用脚本部署Windows Defender应用程序控制 (WDAC) 策略。 以下说明使用 PowerShell,但可与任何脚本主机配合使用。

现在应将一个或多个 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. 将Windows Defender应用程序控制 (WDAC) 策略二进制文件复制到目标文件夹。

    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. 将Windows Defender应用程序控制 (WDAC) 策略二进制文件复制到目标。

    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 分区中。 EFI 分区中不需要存在未签名的 WDAC 策略。

  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. 重新启动系统。