VBScript

Windows Updateの更新履歴をCSV(UTF-8)で保存するVBScript

以前書いたスクリプトが出てきました。
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ページに詳しくまとめられているので、興味がある方はそちらをご参照ください。

映画『夜は短し歩けよ乙女』感想前のページ

大英自然史博物館展に行ってきたよ。次のページ

関連記事

  1. Office関連

    ドラッグ&ドロップでExcelファイルをアドイン形式(xlam)に一括変換するVBScript

    複数のExcelファイルをアドイン形式(xlam)に変換する必要があっ…

  2. Windows 10

    Microsoft Update カタログから累積更新プログラムをダウンロードするVBScript

    「累積更新プログラム」とは、その名の通りOSを最新の状態に保つための更…

  3. VBScript

    WordPressのバックアップを取ってローカル環境で動かす方法(3)

    「WordPressのバックアップを取ってローカル環境で動かす方法(1…

  4. VBScript

    GUIDを作成するVBScript

    Office アドインを作成するのに必要(マニフェストのId要素)なG…

  5. VBScript

    Internet Explorerのお気に入りを列挙するVBScript

    Internet Explorerのお気に入りにどの位のインターネット…

  6. VBScript

    動画回転用簡易FFmpegフロントエンド

    アーケードゲームのプレイを録画した際、機器によっては録画した動画の向き…

コメント

  • コメント (0)

  • トラックバックは利用できません。

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP