以前書いたスクリプトが出てきました。
Windows Updateの更新履歴を
“更新日時”,”コンピューター名”,”ユーザー名”,”タイトル”,”KB番号”,”結果”
といった形式のCSVファイルとして出力するスクリプトです。
Option Explicit
Dim dir_path, cn, ymd
dir_path = "" 'CSVファイルの出力先指定
If Len(Trim(dir_path)) < 1 Then _
dir_path = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)
dir_path = AddPathSeparator(dir_path)
cn = CreateObject("WScript.Network").ComputerName
ymd = Year(Now()) & Right("0" & Month(Now()), 2) & Right("0" & Day(Now()), 2)
OutputMSUpdateInfo dir_path & ymd & "_MSUP_" & cn & ".csv"
Public Sub OutputMSUpdateInfo(ByVal TxtFilePath)
'Windows Updateの更新履歴をCSV(UTF-8)で保存
Dim str
Const adTypeText = 2
Const adSaveCreateOverWrite = 2
str = GetMSUpdateInfo
If Len(Trim(str)) > 0 Then
With CreateObject("ADODB.Stream")
.Type = adTypeText
.Charset = "UTF-8"
.Open
.WriteText str
.SaveToFile TxtFilePath, adSaveCreateOverWrite
.Close
End With
End If
End Sub
Private Function GetMSUpdateInfo()
'Windows Updateの更新履歴取得
Dim us 'WUApiLib.UpdateSession
Dim sr 'WUApiLib.UpdateSearcher
Dim uhec 'WUApiLib.IUpdateHistoryEntryCollection
Dim uhe 'WUApiLib.IUpdateHistoryEntry
Dim rs
Dim kb, rc
Dim cn, un
Dim cnt
Dim ret
Const adVarChar = 200
Const adDBTimeStamp = 135
Set us = CreateObject("Microsoft.Update.Session")
Set sr = us.CreateUpdateSearcher
cnt = sr.GetTotalHistoryCount
If cnt < 1 Then Exit Function
'コンピューター名とユーザー名取得
With CreateObject("WScript.Network")
cn = .ComputerName
un = .UserName
End With
'レコードセット設定
Set rs = CreateObject("ADODB.Recordset")
rs.Fields.Append "Date", adDBTimeStamp, 255
rs.Fields.Append "ComputerName", adVarChar, 255
rs.Fields.Append "UserName", adVarChar, 255
rs.Fields.Append "Title", adVarChar, 255
rs.Fields.Append "KB", adVarChar, 255
rs.Fields.Append "Result", adVarChar, 255
rs.Open
Set uhec = sr.QueryHistory(0, cnt)
For Each uhe In uhec
kb = UCase(uhe.Title)
If InStr(kb, "KB") Then
kb = Mid(kb, InStr(kb, "KB"))
kb = Left(kb, InStr(kb, ")") - 1)
Else
kb = ""
End If
'OperationResultCode enumeration
'https://msdn.microsoft.com/en-us/library/windows/desktop/aa387095.aspx
Select Case uhe.ResultCode
Case 0: rc = "NotStarted"
Case 1: rc = "InProgress"
Case 2: rc = "Succeeded"
Case 3: rc = "SucceededWithErrors"
Case 4: rc = "Failed"
Case 5: rc = "Aborted"
Case Else: rc = ""
End Select
rs.AddNew
rs.Fields("Date").Value = uhe.Date
rs.Fields("ComputerName").Value = cn
rs.Fields("UserName").Value = un
rs.Fields("Title").Value = uhe.Title
rs.Fields("KB").Value = kb
rs.Fields("Result").Value = rc
rs.Update
Next
rs.Sort = "Date DESC" '日付で降順ソート
rs.MoveFirst
Do Until rs.EOF
ret = ret & _
ChrW(34) & rs.Fields("Date").Value & ChrW(34) & ChrW(44) & _
ChrW(34) & rs.Fields("ComputerName").Value & ChrW(34) & ChrW(44) & _
ChrW(34) & rs.Fields("UserName").Value & ChrW(34) & ChrW(44) & _
ChrW(34) & rs.Fields("Title").Value & ChrW(34) & ChrW(44) & _
ChrW(34) & rs.Fields("KB").Value & ChrW(34) & ChrW(44) & _
ChrW(34) & rs.Fields("Result").Value & ChrW(34) & vbNewLine
rs.MoveNext
Loop
rs.Close
ret = Left(ret, InStrRev(ret, vbNewLine) - 1) '最後の改行削除
GetMSUpdateInfo = ret
End Function
Private Function AddPathSeparator(ByVal s)
If Right(s, 1) <> ChrW(92) Then s = s & ChrW(92)
AddPathSeparator = s
End Function
多数の端末のWindows Update履歴を、一台一台確認するのが面倒くさかったので書いたような記憶があります。
VBScriptからのWindows Updateの取り扱いについては下記Webページに詳しくまとめられているので、興味がある方はそちらをご参照ください。
- おまえとその犬の命はないからね…Windows Update も管理しましょう
- https://technet.microsoft.com/ja-jp/scriptcenter/ff595215.aspx

















この記事へのコメントはありません。