這個程序和所有需要安裝的補丁文件放在同一目錄,程序檢查系統目前已經安裝了哪些補丁,自動安裝還沒有安裝的補丁。
# -*- coding: cp936 -*-
import glob
import subprocess
patched_kb = []
patch_file_kb = []
# 得到系統已經安裝的補丁的KB號
patch1 = subprocess.check_output("wmic qfe get hotfixid")
for i in patch1.split('\r\n'):
if (cmp(i.strip(), "HotFixID") != 0) and (cmp(i, "") != 0):
i = i.lstrip("KB")
patched_kb.append(i.strip())
#print patched_kb
#print "---------------"
# 得到補丁文件的KB號
kb_list = glob.glob(r"WindowsServer2003-KB*.exe")
for line in kb_list:
res = filter(str.isdigit, line.split("-")[1])
patch_file_kb.append(res)
#print patch_file_kb
#print "---------------"
# 輸出所有未安裝的補丁到must_patch
must_patch = set(patch_file_kb).difference(patched_kb)
#print must_patch
#print "---------------"
for patch_file in must_patch:
# 根據KB號搜索補丁文件名
patch_file = glob.glob(r"WindowsServer2003-KB%s*.exe" % patch_file)
# 安裝補丁的命令
patch_cmd = "%s /quiet /norestart" % patch_file[0]
# 執行命令
if subprocess.call(patch_cmd) == 0:
print patch_file, "安裝成功"
else:
print patch_file, "安裝失敗"
用subprocess.check_output()代替了os.system()和read()。