我对 SCCM 2007 脚本应用程序部署没有任何问题,但 SCCM 2012 让我大发雷霆,我所剩无几。我们倾向于进行大量脚本安装,并且大多数情况下在 SCCM 2012 中安装失败,最近的失败是 symantec Enterprise vault,我编写了一个脚本来检查主 DLL 插件版本并使用正确的卸载字符串删除以前的版本, 在安装最新版本之前。
我的脚本非常简单,在 SCCM 之外运行良好,但在 SCCM 内部却失败了。
如果我将应用程序重新创建为 MSI 部署并使用 MSI 文件,则它可以正常安装,因此 SCCM 对客户端正常工作。SCCM 从 MSI 进行的卸载失败,但在下面的示例中进行了介绍。我检查了所有客户端日志文件,但找不到任何问题。
我什至在脚本末尾返回成功安装返回代码 1707 和 0 以尝试获取 SCCM 以使其成功。我首先在 VB.net 中将脚本作为控制台服务应用程序编写,然后在 vb 脚本中重写。两个脚本都失败了。过去我曾经使用 AutoIT 编写脚本,但那也失败了,所以我想我会改用更微软的东西。
对于检测,我使用 Windows 安装程序选择并指向获取产品代码的 msi 文件。
部署类型是脚本。
我唯一能想到的是 SCCM 2012 不喜欢脚本中的睡眠。
或者它只是不喜欢脚本。:-(
MSI 卸载失败,因为它需要以管理员身份运行,正如您从下面的脚本中看到的那样,我以管理员身份运行,这在 SCCM 之外有效,但在 SCCM 中无效。安装使用几乎相同的代码,但更多的逻辑和更多的卸载字符串。
即使卸载失败,卸载脚本也很简单;
Set WshShell = WScript.CreateObject("WScript.Shell")
If WScript.Arguments.length = 0 Then
Set ObjShell = CreateObject("Shell.Application")
ObjShell.ShellExecute "wscript.exe", """" &
WScript.ScriptFullName & """" & "RunAsAdministrator", , "runas", 1
Else
end if
Set objShell = CreateObject("WScript.Shell")
Set objExec = objShell.Exec("MsiExec.exe /x{ADEBB592-4986-4FD1-868C-D59DB32F0BC2} /q")
WScript.Sleep 8000
returnValue = 1707
WScript.Quit(returnValue)