2017-04-24 33 views
0

Hy, 我有興趣找到一種方法(也許vbs腳本?)來隱藏幾個(超過10,無論如何)的Windows 7更新,所以他們永遠不會被安裝。 我認爲最好的方法是,如果我可以解析一個.txt文件,其中列出了每個KB號碼(每個都在新行中)。但是,當然,如果它使代碼更簡單,那麼在腳本內硬編碼的數組也可以工作。唯一的要求是按KB編號而不是按描述編號。如何根據KB編號批量隱藏Windows 7更新?

問題是我不知道我該怎麼做,所以我向你們求助。

非常感謝!

回答

1

你絕對可以用VBS腳本來做到這一點。在其他一些StackExchange站點上已經回答了類似問題(請參閱How to disable the 「Get Windows 10」 icon shown in the notification area (tray)?Block specific Windows update hotfix

與您的問題相關的部分將在下面複製。原始問題值得一讀,而且他們還有其他注意事項,可能也會有所幫助。

這些是專門爲處理GWX更新而編寫的,但您可以使用任何KB編號。

「BlockWindows10.bat」

ECHO OFF 
REM --- remember to invoke from ELEVATED command prompt! 
REM --- or start the batch with context menu "run as admin". 
SETLOCAL 

REM --- (as of 2015-09-07): 
REM KB3035583 - GWX Update installs Get Windows 10 app in Windows 8.1 and Windows 7 SP1 
REM KB3021917 - Update to Windows 7 SP1 for performance improvements 
REM KB3012973 - Upgrade to Windows 10 Pro 

REM --- no longer blocking: 
REM KB2952664 - Compatibility update for upgrading Windows 7 
REM KB2976978 - Compatibility update for Windows 8.1 and Windows 8 
REM KB3022345 - Telemetry [Replaced by KB3068708] 
REM KB3068708 - Update for customer experience and diagnostic telemetry 

REM --- uninstall updates 
echo uninstalling updates ... 
start "title" /b /wait wusa.exe /kb:3021917 /uninstall /quiet /norestart 
echo - next 
start "title" /b /wait wusa.exe /kb:3035583 /uninstall /quiet /norestart 
echo - done. 
timeout 10 

REM --- hide updates 
echo hiding updates ... 
start "title" /b /wait cscript.exe "%~dp0HideWindowsUpdates.vbs" 3021917 3035583 3012973 
echo - done. 

echo ... COMPLETED (please remember to REBOOT windows, now) 
pause 
REM --- EOF 

「HideWindowsUpdates.vbs」(工藤https://serverfault.com/a/341318):

'// Inspired by Colin Bowern: https://serverfault.com/a/341318 
If Wscript.Arguments.Count < 1 Then 
    WScript.Echo "Syntax: HideWindowsUpdates.vbs [KB1] [KB2] ..." & vbCRLF & _ 
     " - Example1: HideWindowsUpdates.vbs 3035583" & vbCRLF & _ 
     " - Example2: HideWindowsUpdates.vbs 3035583 3012973" 
    WScript.Quit 1 
End If 

Dim objArgs 
Set objArgs = Wscript.Arguments 
Dim updateSession, updateSearcher 
Set updateSession = CreateObject("Microsoft.Update.Session") 
Set updateSearcher = updateSession.CreateUpdateSearcher() 

Wscript.Stdout.Write "Searching for pending updates..." 
Dim searchResult 
Set searchResult = updateSearcher.Search("IsInstalled=0") 

Dim update, kbArticleId, index, index2 
WScript.Echo CStr(searchResult.Updates.Count) & " found." 
For index = 0 To searchResult.Updates.Count - 1 
    Set update = searchResult.Updates.Item(index) 
    For index2 = 0 To update.KBArticleIDs.Count - 1 
     kbArticleId = update.KBArticleIDs(index2) 

     For Each hotfixId in objArgs 
      If kbArticleId = hotfixId Then 
       If update.IsHidden = False Then 
        WScript.Echo "Hiding update: " & update.Title 
        update.IsHidden = True 
       Else 
        WScript.Echo "Already hiddn: " & update.Title 
       End If   
      End If 
     Next 

    Next 
Next 
'// EOF 
0

謝謝你的幫助。與此同時,我能夠整理我的劇本。是不完美的,它可能有錯誤,但我在Windows 7 Pro x64上運行它,它的行爲如預期。

對於任何有興趣的人,請隨時在這裏查看:https://github.com/dereius/WindowsUpdateHider