我在 OSD 任务序列中有一个“运行 PowerShell 脚本”步骤。
此脚本将一些文件复制到某个位置,然后运行可执行文件。
如果我使用 ROBOCOPY 复制文件,我会得到一个退出代码 1(文件复制正常)并且可执行文件被触发,执行它需要的操作并愉快地退出。
如果我使用 XCOPY(外部调用)或 Copy-Item(PS Cmdlet) - 文件仍然复制并放置在正确的位置,使用代码 0 退出,但可执行文件不会启动并且不会执行它的意思至。
有任何想法吗?
示例代码(不工作:)
if (!(Test-Path "C:\Installs\sx1install")){New-Item -ItemType Directory -Path "C:\Installs\sx1install" -Force}
Copy-Item . C:\Installs\sx1install -Recurse -Force
.\setup.exe /s /f1"c:\installs\sx1install\setup.iss"
在职的:
robocopy .\ C:\Installs\sx1install /E /R:0 /W:0
.\setup.exe /s /f1"c:\installs\sx1install\setup.iss"
在这两种情况下,C:\Installs\sx1install 文件夹都会创建,并完全填充所有必需的文件和文件夹(包括子文件夹等) - 但 setup.exe 在第一个示例中不起作用。
robocopy 是什么使这项工作/不工作?
通过对脚本包的位置设置位置然后执行,非工作脚本在 Windows 中完美运行。
我们需要尝试找到一种方法来执行它并返回 0 作为返回码 1 会破坏任务序列。如果可执行文件返回 1,我们需要停止 TS,因为这是我们构建的关键部分,因此仅将成功代码设置为 1 或继续或错误不是一个选择。
SCCM 2012 R2 CU3 // MDT 2012 // 通过 MDT OSD TS 部署 8.1 Pro
如果使用 Robocopy 可以正常工作,您为什么还要担心 Xcopy,为什么不直接使用可以工作的那个呢?
此外,您为什么要手动复制文件而不是创建包或应用程序,将这些文件的原始位置指定为源,然后让任务序列处理复制文件以准备安装?如果您担心指定 setup.iss 安装自动化文件的完整(非相对)路径,那么只需在 setup.exe 的命令行上指定“-s”,它就会告诉它查找“setup.iss” " 文件在同一个文件夹中,根本不需要指定路径或文件名(因为它们都被称为 "setup.[exe|iss]"。这将使它:
否则,您的 smsts.log、AppEnforce.log、execmgr.log 文件在失败时会说什么?