我们将在几乎所有计算机上安装一些新软件,我正在尝试设置 GPO 来执行此操作。我们正在运行 Windows Server 2008 R2 域控制器,并且我们所有的计算机都是 Windows 7。
GPO 调用位于我们文件服务器的网络共享上的以下脚本。该脚本本身调用位于另一台服务器的另一个网络共享上的可执行文件。可执行文件将立即崩溃并出现错误0x0000006
。事件日志仅显示以下内容:Windows cannot access the file for one of the following reasons: there is a problem with the network connection, the disk that the file is stored on, or the storage drivers installed on this computer; or the disk is missing. Windows closed the program Setup.exe because of this error.
这是脚本(存储在 上\\WIN2K8R2-F-01\Remote Applications
):
@ECHO OFF
IF DEFINED ProgramFiles(x86) (
ECHO DEBUG: 64-bit platform
SET _path="C:\Program Files (x86)\Canam"
) ELSE (
ECHO DEBUG: 32-bit platform
SET _path="C:\Program Files\Canam"
)
IF NOT EXIST %_path% (
ECHO DEBUG: Folder does not exist
PUSHD \\WIN2K8R2-PSA-01\PSA Data\Client
START "" "Setup.exe" "/q"
POPD
) ELSE (
ECHO DEBUG: Folder exists
)
以管理员身份手动运行脚本也会导致同样的错误。设置具有相同目标和参数的快捷方式可以完美运行。手动调用可执行文件也可以。
不确定这是否重要,但安装程序基于 dotNETInstaller。但我不知道是哪个版本。
我很感激任何关于修复此问题的建议。提前致谢!
更新
我非常怀疑这很重要,但是脚本所在的网络共享是一个共享驱动器,而可执行文件的脚本引用的网络共享是一个共享文件夹。
此外,两个共享都Domain Computers
列出了共享和安全选项卡的完全访问权限。并且PUSHD
无需将路径括在引号中即可工作。
更新2
如果我手动在客户端计算机上打开 CMD 并输入,PUSHD "\\WIN2K8R2-PSA-01\PSA Data\Client"
则可以正确将目录安装为驱动器。如果我输入,START "" "Setup.exe" "/q"
安装程序将完全按照预期启动,并实际安装应用程序。
更新 3
在通过语句进行一些调试时ECHO
,我开始将TXT
文件输出到C:\
客户端计算机上的驱动器。调用PUSHD
I ECHO
ed后%CD%
,查看当前目录是什么。如果它成功挂载了远程目录,它最终会输出C:\Windows
不{?}:\Client
正确的内容。
我认为这与我在屏幕最顶部收到的消息有关,即不支持 UNC 路径等等,即使脚本的其余部分实际上已经执行。
仍在寻找使其发挥作用的建议。
答案1
可能对您有帮助的建议。
1)
您可以使用 sysinternal 的 psexec 以 SYSTEM 身份打开 cmd 窗口来调试“psexec \127.0.0.1 /s cmd”从那里,您可以“逐行”浏览脚本以查看它在哪里失败
2)
您可以修改脚本,使其在当前目录中以“%〜dp0”前缀运行
您是否尝试过跳过 START 命令?
PUSHD \WIN2K8R2-PSA-01\PSA 数据\客户端
%~dp0Setup.exe“ /q”
答案2
将共享路径放在引号内。共享名称中有一个空格,我猜这就是导致问题的原因。
答案3
听起来像是权限问题。如果您在启动脚本中执行此操作,它将作为运行SYSTEM
。您需要授予Domain Computers
对文件存储位置的读取权限。
答案4
问题是您在安装完成之前就弹出了。这是因为 cmd 启动了安装,然后立即执行了 popd 命令。
Use start "" Setup.exe /wait /q
您也可以使用 UNC 路径。也许您需要引号。
start "Setup title" "\\server\share\folder\setup.exe" /q