用于显示弹出窗口然后终止Windows进程的脚本

时间:2016-09-30 20:09:39

标签: windows vbscript powershell-v3.0 packaging sccm

我尝试通过SCCM 2012 for Windows7(x86和x64)部署应用程序,该应用程序需要在继续安装之前通知用户应关闭其Microsoft Outlook。它可以是定时器或(是/否)选择,然后如果用户按是然后它将关闭Outlook并将继续安装,否则它将发送一个日志文件说用户取消了安装,但它可以随时重试。

到目前为止,我只有安装脚本,它只能用于使用命令行脚本安装应用程序。因此,它只会执行一些MSI的安装和Windows更新,然后退出。

我创建弹出窗口并且可以由我的CMD文件调用的脚本是以下VBScript,它来自TechNet文章。

Const TIMEOUT = 7
Set objShell = WScript.CreateObject("WScript.Shell")
Set objFS = WScript.CreateObject("Scripting.FileSystemObject")

strPath = Wscript.FullName
strFileVersion = objFS.GetFileVersion(strPath)

iRetVal = objShell.Popup(Wscript.FullName & vbCrLf & _
 "File Version: " & _
 strFileVersion & vbCrLf & _
 "Would you like to close Outlook application and continue with the installation?" _
 ,TIMEOUT,"Outlook Validation",vbYesNo + vbQuestion)

Select Case iRetVal
 Case vbYes
 Set objFile = objFS.GetFile(strPath)
 objShell.Popup WScript.FullName & vbCrLf & vbCrLf & _
 "File Version: " & strFileVersion & vbCrLf & _
 "File Size: " & Round((objFile.Size/1024),2) & _
 " KB" & vbCrLf & _
 "Date Created: " & objFile.DateCreated & vbCrLf & _
 "Date Last Modified: " & objFile.DateLastModified & _
 vbCrLf,TIMEOUT
 Wscript.Quit
 Case vbNo
 Wscript.Quit
 Case -1 
 WScript.StdOut.WriteLine "Popup timed out."
 Wscript.Quit
End Select

所以我不知道是否有任何有用的例子我可以使用并从那里进行自定义。我一无所知,被蒙住眼睛,我看不到光明。那么你理解我的沮丧。

任何想法,示例或链接都将非常感激!! 谢谢&亲切的问候。 乔尔。

3 个答案:

答案 0 :(得分:0)

这是一种方式。

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_Process")

For Each objItem in colItems
    'msgbox objItem.name & " " & objItem.CommandLine
    If LCase(objItem.name) = "outlook.exe" then 
        If Msgbox("Close Outlook", 33, "Install") = 1 then
            objItem.terminate
        End If
    End If
Next

VBScript的帮助文件 - https://www.microsoft.com/en-au/download/details.aspx?id=2764

有关WMI对象的帮助,请在命令提示符下使用wmic。

wmic process get /?(与wmic path win32_process get /?相同)和wmic process call /?列出属性和方法。

答案 1 :(得分:0)

这里我的程序在修改配置文件之前关闭了outlook。 是登录脚本的一部分。该节目是一个记录和通知程序。

sub CloseOutlook
  on error resume next 'to be able to log and continue
  dim objWMIService, colProcessList, objProcess, sResult, oShell
  set oShell         = WScript.CreateObject("WScript.Shell")
  set objWMIService  = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
  set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = 'OUTLOOK.EXE'")

  for Each objProcess in colProcessList
    show "outlook is being closed"
    objProcess.Terminate()
    if Err <> 0 then
      show "Error while closing outlook: " & err.Description
    end if
    sResult = oShell.Popup("Outlook is being closed, profile is configured")
  next

end sub

如果您想要用户确认,则必须使用MsgBox。

答案 2 :(得分:0)

我建议不要关注警告并关闭Outlook,而是将广告配置为在没有用户登录时运行。更少出现问题或意外错过点击的机会&#34;哦,不,你丢了我的电子邮件&#34;的情况。