通过 GPO 将文件和文件夹复制到用户计算机
您可以使用组策略将特定文件和文件夹复制到 Active Directory 域中的用户计算机。您可以将文件放置在桌面上、特定的用户配置文件目录中或本地驱动器上的任何其他文件夹中。使用 GPO,您可以从共享存储库自动复制和更新各种配置文件、INI 文件、应用程序可执行文件 (EXE)、DLL 或脚本。
使用组策略首选项复制文件
例如,我想复制两个文件(
app.exe和
settings.xml)到某些 Active Directory 域用户的桌面。
创建共享文件夹来存储要复制到用户计算机的源文件。它可能是文件服务器上的共享SMB文件夹或域控制器上的SYSVOL目录(该文件夹使用DFS在域中的所有DC之间自动复制,使用起来很方便,因为它有助于减少WAN链路的负载)。我已将文件放在 Sysvol 文件夹中
\\a-d.site\SYSVOL\a-d.site\scripts\CorpApp
。确保经过身份验证的用户组对此文件夹具有读取权限。
使用 Active Directory 用户和计算机管理单元创建新的 Active Directory 安全组 (CorpAPPUsers)(
dsa.msc)。您可以使用以下 PowerShell cmdlet 创建组:
New-ADGroup CorpAPPUsers -path 'OU=Groups,OU=DE,dc=a-d,DC=com' -GroupScope Global -PassThru -Verbose将用户添加到要通过 GPO 自动将文件复制到其桌面的组中:
Add-AdGroupMember -Identity CorpAPPUsers -Members asmith, bmuller, tweber打开组策略管理控制台(
gpmc.msc);
创建一个新的 GPO 对象 (CopyCorpApp) 并将其链接到包含用户计算机的 OU;
编辑 GPO 设置;
-
展开以下组策略首选项部分:用户 配置 -> 首选项 -> Windows 设置 -> 文件;
如果您需要将文件复制到计算机(无论登录用户如何),最好在 GPO 的“计算机配置”部分中使用类似的策略。
选择新建 -> 文件;
指定共享文件夹中的源文件以及要将文件复制到的计算机上的目标路径。如果指定的路径不存在,则会自动创建。请务必指定目标文件的全名(如果仅指定目标目录,则复制文件时将收到“访问被拒绝”错误)。
您可以在此处选择特定的文件名,也可以通过指定通配符一次性复制源目录中的所有文件
*。
使用 GPO 复制文件有 4 种操作:
创建 - 仅当目标目录不存在时才将文件复制到目标目录;
替换 - 用户计算机上的目标文件始终被源文件替换。如果源文件很大,则每次更新 GPO 时都会复制该文件,这可能会导致网络负载较高。如果您只想替换文件一次,请在“常用”选项卡上启用“应用一次,不再重新应用”选项;
更新(默认策略)- 如果文件已存在且源文件和目标文件不同,则不会将其替换为源文件(仅替换属性)。如果文件不存在,则复制;
删除——删除目标文件。您可以选择计算机上的特定文件夹作为目标目录或使用环境变量。要将文件复制到当前用户的桌面,请使用
%DesktopDir%您可以按 F3 查看 GPP 中可用的环境变量的完整列表。
以下是使用 GPO 复制文件时可用作目标文件夹的环境变量列表:
- %AppDataDir%
当前用户的应用程序数据文件夹
- %CommonAppdataDir%
所有用户的应用程序数据文件夹
- %CommonDesktopDir%
所有用户的桌面
- %CommonProgramsDir%
所有用户的程序目录。
- %CommonStartMenuDir%
所有用户的开始菜单文件夹
- %CommonStartUpDir%
所有用户的启动目录
- %ComputerName%
NetBIOS 计算机名称
- %DesktopDir%
当前用户桌面
- %DomainName%
当前的 域名
- %LocalTime%
本地计算机时间
- %LogonDomain%
当前用户的域
- %LogonServer%
用户经过身份验证的域控制器的名称
- %LogonUser%
当前用户名
- %NetPlacesDir%
用户的网上邻居目录
- %ProgramFilesDir%
程序文件目录
- %ProgramsDir%
用户程序目录
- %RecentDocumentsDir%
用户最近的文档目录
- %SendToDir%
用户的发送目录
- %StartMenuDir%
当前用户的开始菜单
- %StartUpDir%
当前用户启动文件夹
- %SystemDir%
Windows目录
- %SystemDrive%
安装操作系统的驱动器
- %TempDir%
用户临时文件夹
- %WindowsDir%
Windows目录
要将文件复制到特定用户的桌面,请打开策略设置中的常用选项卡,启用项目级定位选项,然后单击定位;
在下一个窗口中,您可以选择更多有关如何应用 GPO 的选项。就我而言,我想将该策略限制为仅适用于 CorpAPPUsers 组成员。为此,请点击新建项目 -> 安全组并指定域用户组;
由于我们已将 GPO 链接到包含计算机对象(而不是用户帐户)的组织单位,因此您需要启用 GPO 环回处理模式。在计算机配置->策略->管理模板->系统->组策略中启用选项配置用户组策略环回处理模式=合并;
然后更新客户端计算机上的组策略设置(
gpupdate /force或注销并重新登录),并确保这两个文件已自动复制到用户的桌面。
通过这种方式,您可以将脚本、应用程序可执行文件或系统工具(PsTools、iperf、Portqry 等)复制到用户计算机。您可以将文件复制到 Program Files 并通过 GPO 将其快捷方式放置在桌面上。
如果您需要将目录复制到用户的计算机,则需要使用计算机(用户)配置 -> 首选项 -> Windows 设置 -> 文件夹部分中的组策略项。此选项允许您在目标计算机上创建目录。然后,您可以如上所述将源文件复制到此目录。
如果文件未复制到用户的计算机,您可以使用 gpresult.exe 工具找出未应用组策略的原因。为了获取 GPO 文件复制操作的详细日志,您可以在计算机配置 -> 策略 -> 管理模板 -> 系统 -> 组策略 -> 日志记录和跟踪下启用日志。启用配置文件首选项日志记录和跟踪选项,并在策略设置中选择信息、警告和错误模式。
现在,您可以在事件查看器 -> 应用程序日志中跟踪与通过客户端上的 GPO 复制文件相关的所有事件和错误。按组策略文件源启用过滤器。
就我而言,通过 GPO 复制文件时,用户计算机上出现事件 ID 4098 错误:
The user '%CommonDesktopDir%' preference item in the 'CopyCorpApp {GPO_GUID}' Group Policy Object did not apply because it failed with error code '0x80070005 Access is denied.' This error was suppressed.通过向经过身份验证的用户组授予对源目录中文件的 NTFS 读取权限,已解决此问题。
如何使用GPO启动脚本复制文件夹和文件?
请注意,组策略首选项不允许您复制包含所有子子文件夹和文件的整个目录。如果您需要复制包含大量文件的文件夹,或者希望在更新源中的任何文件时始终更新目标用户文件夹的内容,您可以制作一个简单的登录脚本并通过 GPO 运行它。
让我们创建一个 GPO 启动脚本,将所有新的(和更改的)文件从源目录复制到用户的计算机:
在Sysvol中创建一个批处理文件:CopyCorpApp.bat:
IF EXIST "C:\CorpApp" EXIT MD "C:\CorpApp" xcopy \\fs01\Sources\CorpApp\*.* C:\CorpApp /e /y /k /r /d /i在某些情况下,最好使用功能更强大的 robocopy 命令来复制文件。
该脚本将复制整个目录结构和所有具有属性的文件。仅复制新的或更改的文件。这意味着每次运行脚本时如果源目录没有更改,xcopy 命令将不会覆盖文件。
创建一个新的GPO(如上所述)并将其分配给用户计算机所在的OU;
展开计算机配置 -> 策略 -> Windows 设置 -> 脚本(启动/关闭)。选择启动;
单击添加按钮并指定 SysVol 上脚本的 UNC 路径;
重新启动用户的计算机并确保源文件夹已成功复制。












