【发布时间】:2015-11-05 01:51:37
【问题描述】:
我是一个 nub 脚本编写者,我正在尝试编写一个非常简单的脚本来 taskkill 2 个程序,然后卸载其中的 1 个。
我在 Powershell 中编写它并将其卡在 SCCM 中进行部署......但是每次我部署它时,它都没有运行最后一行来卸载程序。
代码如下:
# Closing Outlook instance
#
taskkill /IM outlook.exe /F
#
# Closing Linkpoint instance
#
taskkill /IM LinkPointAssist.exe /F
#
# Uninstalling Linkpoint via uninstall string if in Program Files
#
MsiExec.exe /X {DECDCD14-DEF6-49ED-9440-CC5E562FDC41} /qn
#
# Uninstalling Linkpoint via WmiObject if installed manually in AppData
Get-WmiObject -class win32_product -Filter "Name like '%Linkpoint%'" | ForEach-Object { $_.Uninstall()}
#
Exit
有人可以帮忙吗? SCCM 说脚本完成没有错误,我知道它能够执行它,因为 taskkills 工作......但它没有卸载程序。
提前感谢您的任何意见。
【问题讨论】:
-
您需要等待
MsiExec完成吗? (默认情况下,当启动 GUI 应用程序时——比如MsiExec——命令行工具不会等待。) -
我没有。 msiexec 实际上是在尝试卸载相同的软件,但以不同的方式安装(编程文件而不是 appdata)并且通常会立即卸载。你认为我需要在某处添加暂停吗?我忘了补充一件事,这个脚本在本地运行良好。
-
instantaneously对您来说可能是这样,但对于一台永恒的计算机......就像 PSH 试图在MsiExec进程完全启动之前执行以下行一样。使用Start-Process获取您可以等待的进程的引用。 -
理查德,感谢您到目前为止的帮助。我在link 之后在系统下本地运行脚本,看看我是否可以使用 Get-WmiObject win32_product 找到 Linkpoint,但它甚至没有出现......我怀疑这是因为它已安装到用户的 %appdata %...但是由于我正在推动 SCCM,我认为除了在 System 下运行之外没有其他方法...您是否知道解决方法或其他方法?
-
我所知道的唯一可以作为系统运行的工具是 SysInternal 的
psexec。但是,我会首先包含完整的日志记录(或者可能使用脚本运行):在应用解决方法之前确定您遇到了正确的问题。
标签: powershell scripting sccm