📝 脚本与首选项

组策略 GPO · 第 6 篇 · 适用于 Windows Server 2019 / 2022 / 2025

📑 目录

  1. 开机/关机脚本
  2. 登录/注销脚本
  3. 首选项 — 驱动器映射
  4. 首选项 — 注册表设置
  5. 首选项 — 服务管理
  6. 首选项 — 本地用户和组
  7. 项目级目标筛选(ILT)
  8. 常见问题

1. 开机/关机脚本

开机脚本在系统启动时以 SYSTEM 权限运行,关机脚本在系统关闭时运行。

路径:计算机配置 → 策略 → Windows 设置 → 脚本(启动/关机)

1.1 实战:开机脚本清理临时文件

PowerShell - Cleanup-Temp.ps1
# 开机脚本:清理 7 天前的临时文件
$days = 7
$paths = @("C:\Windows\Temp", "C:\Temp")

foreach ($path in $paths) {
    if (Test-Path $path) {
        Get-ChildItem $path -Recurse -ErrorAction SilentlyContinue |
            Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$days) } |
            Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
    }
}
1

GPO 编辑器 → 计算机配置 → 策略 → Windows 设置 → 脚本 → 启动 → 添加 → 浏览 → 上传 Cleanup-Temp.ps1

2

脚本参数:-ExecutionPolicy Bypass -NoProfile -File Cleanup-Temp.ps1

2. 登录/注销脚本

登录脚本在用户登录时以 当前用户 权限运行。

路径:用户配置 → 策略 → Windows 设置 → 脚本(登录/注销)

2.1 实战:登录脚本映射网络驱动器

PowerShell - Map-Drives.ps1
# 登录脚本:映射网络驱动器
$drives = @{
    "H" = "\\DC01\UserData$\$env:USERNAME"
    "S" = "\\DC01\SoftwareDist$"
    "P" = "\\DC01\Public"
}

foreach ($letter in $drives.Keys) {
    if (!(Test-Path "$letter`:")) {
        try {
            New-SmbMapping -LocalPath "$letter`:" -RemotePath $drives[$letter] -Persistent $true
        } catch {
            Write-EventLog -LogName Application -Source WSH -EventId 1001 -Message "Failed to map $letter`: to $($drives[$letter])"
        }
    }
}

3. 首选项 — 驱动器映射

比登录脚本更优雅的方式,支持 项目级目标筛选

路径:用户配置 → 首选项 → Windows 设置 → 驱动器映射

1

右键 驱动器映射新建 → 映射驱动器

2

操作:创建 | 位置:\\DC01\UserData$\%username% | 驱动器号:H:

3

公共 选项卡:勾选 "在登录时重新连接"

4

目标 选项卡:可添加筛选条件,如"仅对安全组 GG-IT-Users 生效"

4. 首选项 — 注册表设置

路径:计算机配置 → 首选项 → Windows 设置 → 注册表

4.1 实战:禁用 USB 存储设备

1

右键 注册表新建 → 注册表项

2

操作:更新

3

配置:

  • 配置单元:HKEY_LOCAL_MACHINE
  • 键路径:SYSTEM\CurrentControlSet\Services\USBSTOR
  • 值名称:Start
  • 值类型:REG_DWORD
  • 值数据:4(4 = 禁用,3 = 启用)
PowerShell - 验证注册表首选项
# 检查 USB 存储是否被禁用
Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\USBSTOR" -Name Start
# Start = 4 表示已禁用

5. 首选项 — 服务管理

路径:计算机配置 → 首选项 → 控制面板设置 → 服务

5.1 实战:禁用 Print Spooler 服务(非打印服务器)

1

右键 服务新建 → 服务

2

服务名称:Spooler | 启动模式:已禁用 | 服务操作:停止

6. 首选项 — 本地用户和组

路径:计算机配置 → 首选项 → 控制面板设置 → 本地用户和组

6.1 实战:将域管理员加入本地 Administrators 组

1

右键 本地用户和组新建 → 本地组

2

组名:Administrators(内置组)

3

操作:更新 → 成员:添加 IEHANG\Domain Admins

6.2 实战:从本地 Administrators 组移除普通用户

1

同上创建本地组策略

2

在成员列表中添加要移除的账户,勾选 "从该组中删除"

7. 项目级目标筛选(ILT)

ILT 是首选项的强大功能,可精确控制首选项项的应用条件。

筛选条件示例
安全组仅 GG-IT-Users 组成员
操作系统仅 Windows 11
IP 地址范围192.168.10.0/24
计算机名CLI-*
注册表匹配某注册表值存在
环境变量%COMPUTERNAME% 匹配模式
网络连接特定网络适配器存在
时间范围仅工作时间生效

8. 常见问题

Q1:登录脚本和首选项驱动器映射应该用哪个

首选项优先。首选项支持 ILT 精确筛选、日志记录和更简单的管理界面。脚本适合首选项无法实现的复杂逻辑。

Q2:首选项设置不生效

① 检查首选项项的 操作类型(创建/替换/更新/删除)是否正确 ② 检查 ILT 条件是否匹配 ③ 查看 Event Viewer → Applications and Services Logs → Group Policy → Operational 中的首选项应用日志 ④ 确认客户端 F2A(首选项客户端扩展)已安装