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