1

助けが必要です。私のスクリプトは

    Set objService = GetObject("winmgmts:\\.\Root\CIMV2") 
    Set colListOfServices = objService.ExecQuery _ 
    ("Select * from Win32_Service Where StartMode = 'Auto' 
    AND Started = false")

    For Each objService in colListOfServices 
    WScript.Echo Date & " " & Time & objService.Caption

    Set xmlDoc = _
      CreateObject("Microsoft.XMLDOM")  
    XMLDoc.async = False

    Set objRoot = _
      xmlDoc.createElement("ServerCheck")  
    xmlDoc.appendChild objRoot

    Set objRecord = _
      xmlDoc.createElement("Services") 
    objRoot.appendChild objRecord 

    For Each objName in colListOfServices 
    Set objName = _
      xmlDoc.createElement("Name")  
    objName.Text = objService.Caption
    objRecord.appendChild objName
    Next

    Set objDate = _
      xmlDoc.createElement("Date")  
    objDate.Text = Date & Time 
    objRecord.appendChild objDate  

    Set objIntro = _
      xmlDoc.createProcessingInstruction _
      ("xml","version='1.0'")  
    xmlDoc.insertBefore _
      objIntro,xmlDoc.childNodes(0)  

    xmlDoc.Save "C:\Users\111\Desktop\Audits.xml"
    Next

そして私のXML

Services><Name>Windows install</Name><Name>Windows install</Name>
<Name>Windows install</Name><Date>25.12.201215:51:19</Date>

WScript.Echo (テスト用) で 3 つの異なるサービスが停止しました。しかし、私の XML では、1 つのサービスのみを 3 つのコピーに保存します。停止したすべてのサービスを XML で正しく保存するにはどうすればよいですか?

4

1 に答える 1

1

自動開始モードで停止したすべてのサービスをスクリプトで XML に書き込む必要があります。

問題は、ループ内で新しい XML ファイルを作成して書き込むことです。For Each同じファイルを何度も上書きし続け、最後に停止したサービスのみを含むファイルになってしまいます。

ループの外で XML を作成して保存します。

Option Explicit

Dim objWmi, wql, objService, xmlDoc, objRoot, objRecord

Set objWmi = GetObject("winmgmts:\\.\Root\CIMV2")
wql = "SELECT * FROM Win32_Service WHERE StartMode = 'Auto' AND Started = false"

Set xmlDoc = CreateObject("MSXML2.DOMDocument")
xmlDoc.async = False

Set objRoot = NewElement(xmlDoc, "ServerCheck", "")

For Each objService in objWmi.ExecQuery(wql)
    WScript.Echo Date & " " & Time & objService.Caption

    Set objRecord = NewElement(objRoot, "Services", "")

    NewElement objRecord, "Name", objService.Caption
    NewElement objRecord, "Date", Date & " " & Time
Next

xmlDoc.Save "C:\Users\111\Desktop\Audits.xml"

' --------------------------------------------------------------------
Function NewElement(parent, name, text)
    Set NewElement = parent.ownerDocument.createElement(name)
    If text <> "" Then NewElement.Text = text
    parent.appendChild NewElement
End Function

他にもいくつかの改善を行いました。

于 2012-12-25T14:55:06.253 に答える