我有一个批处理文件,它使用gpresult/v并将输出保存在文本文件中,然后将该文本文件复制到共享文件夹中。当我在本地机器上运行时,这个批处理运行得很好,但一旦我通过SCCM部署它,它就会说无法打开文件,错误代码为4。我不知道文件里出了什么问题。
代码是这样的:
@回波关闭
gpresult/v>%computername%.txt
xcopy%computername%.txt\某个路径
错误4为"系统无法打开文件。",就好像路径无效或open()
由于其他原因失败一样。
- 您知道程序运行在哪个目录(CWD)中吗
这就是gpresult的结果所在(如果输出重定向成功) - CCD_ 2不会为SYSTEM用户产生有意义的用户级数据
也许您应该使用gpresult /v scope computer
- 当您只复制一个文件时,为什么要使用
xcopy
?如果您正在复制目录,xcopy
实际上只具有附加值(相对于copy
)xcopy
的行为会根据您指定目标的方式而变化。如果目标以目录分隔符(反斜杠)结尾,xcopy会将其视为目录。如果没有,并且目标也不存在,xcopy会询问您该做什么,这会导致自动化流程无限期暂停,等待用户输入
SCCM程序以"NT Authority\SYSTEM"运行
当SCCM(2007)运行程序时,该程序不会以常规用户身份运行。它以最高权限用户SYSTEM的身份运行。
此帐户不是常规帐户,并且对于常规用户而言,存在和可预测的许多设置和环境变量与SYSTEM不同或不存在。SYSTEM帐户配置文件的一个特别令人沮丧的"特性"是,它位于%WINDIR%System32
下,因此每当您引用与配置文件相关的任何内容时,它都会受到文件系统重定向的影响。
试试这个:使用psexec -s
(sysinternals)获得作为SYSTEM帐户的shell访问权限,并在该环境中运行该命令以查看其行为。这是我们所能接近的环境,比如SCCM程序运行的环境。
当SCCM运行该命令时,CWD可能位于%WINDIR%SysWOW64CCM
下的某个位置,并且可以用32位版本的CMD.EXE.调用
我有一个类似的问题。所以我有一个可以运行的卸载蝙蝠。由于供应商卸载,它会导致windows资源管理器UI强制关闭。因此,为了急于解决这个问题,我添加了一个打开explorer.exe的调用。正如有人向我指出的那样,这是有问题的。事实上,他一说,我就清楚地知道他在说什么,以及他的声明要去哪里。调用explorer.exe是可以的,只是bat是在系统上下文下运行的,而不是在用户的上下文下运行,所以当explorer重新启动时,它将以系统桌面配置文件而不是用户的配置文件的名义启动。我知道有一种方法仍然可以在系统的伪装下运行,但可以在当前登录的用户配置文件下重新启动资源管理器。