我创build了一个GPO启动脚本来执行特定AD容器中的计算机。 该脚本从AD netlogon共享中获取文件并将其放在计算机上的目录中。 鉴于正确的权限(即:我自己)可以执行脚本就好了,文件复制。 但在启动时不起作用 – 文件不会从AD服务器复制。
启动脚本应该作为localsystem运行(对吗?)。 所以问题是为什么这些文件不能在启动时复制? 难道是因为:
它是本地系统用户的权限吗?
读取registry在启动时有问题吗?
从AD netlogon文件夹中获取文件在启动时有问题?
我完全错过了吗?
我的testing机器具有脚本中描述的registry项和本地目录。 我自己有testing机器上的标准用户权限。 AD服务器是Windows 2008,testing客户端是Windows XP SP3(即将成为Windows 7,我承担的权限问题将是不可避免的)
Dim wShell, fso, oraHome, tnsHome, key, srcDir
Set wShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
key = "HKLM\Software\Oracle\Oracle_Home"
On Error Resume Next
orahome = wShell.RegRead(key)
If err.Number = 0 Then
tnsHome = oraHome + "\" + "network\admin\"
srcDir = wShell.ExpandEnvironmentStrings("%logonserver%") + "\netlogon\UpdatedFiles\"
fso.CopyFile srcDir + "file1.ext", tnsHome, true
End If
附注:为确保脚本正确部署,我特意在脚本中join了一些错误,并在下次启动时出现错误信息。 所以我知道GPO是正确部署的。
在本地系统帐户下运行脚本将使用AD计算机帐户(即COMPUTERNAME $)连接到networking。
但是,%logonserver%variables可能在系统帐户的上下文中无效 – 在所有本地系统帐户与本地计算机进行身份validation之后,而不是域。 %logonserver%variables可能为空或等于本地计算机名称。
尝试使用\\domain.name\NETLOGON来代替。 这将连接到域控制器(因为NETLOGON共享包含所有DC上的相同文件,因为它使用FRS,所以与您正在交谈的DC无关紧要。
嗯…你在做什么应该工作。 我知道,这并没有太多的安慰,但我使用了大量的启动脚本(每天在我的客户站点上客户端comptuers上的数千个调用),而且脚本执行的可靠性也没有问题。
我会在registry读取后添加一个“On Error Goto 0”,以便报告脚本执行中的任何其他错误。 我还会考虑,至less对于testing,添加一些MsgBox调用来报告您为fso.CopyFile调用构build的值。 基本上用“PRINT”语句debugging它。
这不是有帮助的,但是这里是我如何使用batch file:
@echo off for /f "usebackq tokens=2*" %%i in (`reg query HKLM\Software\Oracle /v Oracle_Home ^| find /i "Oracle_Home"`) do ( if not "%%j"=="" copy /y "\\%USERDOMAIN%\netlogon\UpdatedFiles\some_file.tns" "%%j" )
顺便说一下:在Windows 7下运行启动脚本时,不应该有权限问题。脚本将以SYSTEM身份运行,UAC将不会启用。 微软得到了这个权利。