2016-09-30 63 views
0

我想通過SCCM 2012部署一個應用程序的Windows7(x86和x64),需要通知用戶,他的Microsoft Outlook應該關閉之前繼續繼續與安裝。它可以是定時器或(是/否)的選擇,然後如果用戶按是然後它將關閉Outlook並繼續安裝,否則它會發送一個日誌文件,說明用戶取消了安裝,但它可以隨時重試。腳本顯示一個彈出窗口,然後殺死一個Windows進程

到目前爲止,我只有安裝腳本只能用命令行腳本安裝應用程序。所以,它只會執行一些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 

所以我不知道是否有任何有用的例子,我可以從那裏使用和定製它。我無知,蒙着眼睛,我看不到光。那麼你明白我的沮喪。

任何想法,例子或鏈接將非常感謝! 謝謝&親切的問候。 Joel。

回答

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 /?列表屬性和方法。

+0

謝謝麪條,我也會驗證一下! – derspinne

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來代替。

+0

謝謝彼得,我會看看它! – derspinne

+0

不要感謝我,給我一個投票8 :)或更好接受答案,如果它的工作 – peter

0

我建議不要因爲警告而關閉Outlook,而應將廣告配置爲在沒有用戶登錄時運行。出現問題的機會減少或意外錯過點擊「哦,你沒有丟失我的電子郵件」的情況。

+0

感謝馬特您的建議,但它已經考慮到部署將在最糟糕的條件下進行測試,以避免任何失敗。告知用戶我的部署是避免任何失敗或問題的最佳機會,例如:「哦,我的應用程序尚未安裝,爲什麼我是部署中唯一缺少的應用程序?」答:分析日誌文件後,您沒有關閉Outlook應用程序,因此安裝失敗。 – derspinne