0

我有一个批处理文件,它使用 gpresult /v 并将输出保存在文本文件中并将该文本文件复制到共享文件夹。当我在本地机器上运行时,这批工作非常好,但是一旦我通过 SCCM 部署它,它就会说无法打开带有错误代码 4 的文件。我不知道文件中有什么问题。

代码是这样的:

@echo 关闭

gpresult /v >%计算机名%.txt

xcopy %computername%.txt \一些路径

4

2 回答 2

1

错误4是“系统无法打开文件。”,好像路径无效或由于open()其他原因失败。

  • 你知道程序运行在哪个目录(CWD)吗?
    这就是 gpresult 的结果(如果输出重定向成功)。
  • gpresult不会为 SYSTEM 用户生成有意义的用户级数据。
    也许你应该使用gpresult /v scope computer.
  • 为什么xcopy只复制一个文件时使用?如果您正在复制目录,xcopy实际上只有附加值(超过)。的行为取决于您指定目标的方式。如果目标以目录分隔符(反斜杠)结尾,xcopy 会将其视为目录。如果不存在并且目标不存在,xcopy 会询问您要做什么,这会导致自动化进程无限期地暂停等待用户输入。copy
    xcopy

SCCM 程序以“NT Authority\SYSTEM”身份运行

当 SCCM (2007) 运行程序时,该程序不会以普通用户身份运行。它以最高特权用户(某种)SYSTEM 身份运行。

此帐户不是普通帐户,对于普通用户来说存在和可预测的许多设置和环境变量对于 SYSTEM 来说是不同的或不存在的。SYSTEM 帐户配置文件的一个特别令人沮丧的“功能”是它位于 下%WINDIR%\System32,因此每当您引用与配置文件相关的任何内容时,它都会受到文件系统重定向的影响。

试试这个:使用psexec -ssysinternals)以 SYSTEM 帐户获得 shell 访问权限,并在该环境中运行命令以查看其行为方式。这是我们可以接近的环境,例如运行 SCCM 程序的环境。

当 SCCM 运行该命令时,CWD 可能位于下面的某个位置,%WINDIR%\SysWOW64\CCM\并且可以使用 32 位版本的 CMD.EXE 调用。

于 2014-01-15T13:52:12.223 回答
0

我有一个与此类似的问题。所以我有一个运行的卸载蝙蝠。由于供应商卸载它会导致 Windows 资源管理器 UI 的强制关闭。因此,为了解决这个问题,我匆忙添加了一个打开 explorer.exe 的调用。正如有人向我指出的那样,这是一个问题。实际上,只要他一说,我就知道他在说什么,以及他的陈述将走向何方。调用 explorer.exe 会很好,除了 bat 在系统上下文而不是用户下运行,因此当资源管理器重新启动时,它将以系统桌面配置文件而不是用户的名义启动。我知道有办法仍然在系统的幌子下运行,但在当前登录的用户配置文件下重新启动资源管理器。

于 2016-03-01T22:19:38.393 回答