我在 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
答案1
如果 Robocopy 可以正常运行,为什么还要担心 Xcopy,为什么不直接使用可以正常运行的那个呢?
另外,为什么要手动复制文件,而不是仅仅创建一个包或应用程序,指定这些文件的原始位置作为源,然后让任务序列处理复制文件以准备安装?如果您担心为 setup.iss 安装自动化文件指定完整(非相对)路径,那么只需在 setup.exe 的命令行上指定“-s”,它就会告诉它在同一文件夹中查找“setup.iss”文件,而无需指定路径或文件名(因为它们都被称为“setup。[exe|iss]”。这将使它:
.\setup.exe -s
否则,发生故障时您的 smsts.log、AppEnforce.log、execmgr.log 文件会显示什么内容?