默认情况下安装字体需要管理员权限。
如果只是把字体文件复制到%systemroot%\fonts内,是无法被系统认定为字体已经安装的。同时需要在以下位置的注册表写入一个项。
hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts,具体格式你可以自己查看。
那么知道怎么算正确安装脚本后。就可以使用启动脚本来做了。因为启动脚本用的是nt authority\system权限。

安装前字体文件夹内默认如下:
【AD】【组策略】利用启动脚本为域普通用户安装字体的方法_第1张图片
注册表内如下:
【AD】【组策略】利用启动脚本为域普通用户安装字体的方法_第2张图片

脚本执行完安装后如下:
【AD】【组策略】利用启动脚本为域普通用户安装字体的方法_第3张图片
注册表:
【AD】【组策略】利用启动脚本为域普通用户安装字体的方法_第4张图片

脚本内容如下:


@echo off
::以下内容为了测试脚本是否正常执行可删除
::---------------------------------------------------------------------------
rem 该脚本会在启动时在C盘根目录创建一个计算机名称加日期的文件夹
set y=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%
md "c:\%y%+%computername%"
::----------------------------------------------------------------------------

::下面是为了设置fonts的名字
set x=%date:~0,4%%date:~5,2%%date:~8,2%

::共享路径
set paath=\192.168.1.160\abc
::共享主机的访问权限
set [email protected]
set psd=1
::共享IP
set ip=192.168.1.160

::因为是启动脚本所以要先创建空连接目标计算机
net use \%ip%\ipc$ /user:%usr% %psd%

::测试空连接有没有正常,要有写入权限,测试,可删除。
::---------------------------------------------------------------------------
whoami >%paath%\1.txt
::----------------------------------------------------------------------------

::利用当天日期的一个txt文档名来判断是否需要执行下面的内容,这样,这个脚本就可控了。
if exist %paath%\%x%.txt goto abc else goto xyz

:abc
::复制字体到字体目录内并添加如下注册表信息
xcopy %paath%\%x%.TTF %systemroot%\fonts && reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v %x%(TrueType) /t reg_sz /d %x%.ttf
xcopy %paath%\%x%1.TTF %systemroot%\fonts && reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v %x%1(TrueType) /t reg_sz /d %x%1.ttf
xcopy %paath%\%x%2.TTF %systemroot%\fonts && reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v %x%2(TrueType) /t reg_sz /d %x%2.ttf
xcopy %paath%\%x%3.TTF %systemroot%\fonts && reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v %x%3(TrueType) /t reg_sz /d %x%3.ttf
xcopy %paath%\%x%4.TTF %systemroot%\fonts && reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v %x%4(TrueType) /t reg_sz /d %x%4.ttf

::必须重启才能生效
shutdown /r /t 00 /f

:xyz
exit


脚本内容应该都看得明白,里面测试的东西是方便你排错,用好了可以删掉,做个脱水版。说下里面一些为什么这么做。
设计部门可能会使用字体的情况比较多,设置这个脚本日常启动就行。
【if exist %paath%\%x%.txt goto abc else goto xyz】
里面也写了,这是为了控制。如果平时不需要安装字体,到这一步就结束了。
需要安装,你只需要将字体改成当天的日期就行,比如将微软雅黑.ttf改成20180523.ttf放到对应的目录就行。
如果是多个,就根据脚本里的内容改名。默认给了5个。
如下图:
【AD】【组策略】利用启动脚本为域普通用户安装字体的方法_第5张图片

假如A用户要你安装某个字体,你就把字体按照上图改成当天的日期后改名放到目录内。新建一个当天日期的txt放里面。告知用户A,重启计算机,重启完毕后什么都不要操作,安装完字体后电脑会自动重启,要生效必须重启。然后登录即可。
有人会问会不会无限重启,如果源ttf一直在的话。
不会,第二次执行的时候因为目标文件夹已经有文件,会询问是否覆盖而不执行下去。然后你把日期.ttf删掉即可。
过了10分钟,A用户又要你安装某个字体了。
那么如果你一开始用的20180523,那么就用下面的名字,叫他重启,就自动安装完了。


因为思考这个的关系,引申出是不是我可以做一个永久自动运行的启动脚本与登陆脚本。
这个脚本也是由共享目录内的日期.txt来控制是否执行。
这个脚本本身不执行多余操作,只通过共享目录的日期.txt来激活,启动另一个BAT或Powershell。
这样我就可以很方便的再执行其他脚本,而不需要再做新的组策略刷新等操作。避免莫名原因的失败。
那么为了避免无限loop,用xcopy覆盖不执行下面命令和if exsit来判断解决。
这个脚本起先应该将计算机或用户名回写到共享目录,让IT管理员知道哪些失败了,以保证所有人都获取到这个“根”脚本。