2016-06-24 17 views
1

私はVBscriptを使用しようとしています。 (私はVBScriptにうまくいかず、実際には数年間使用していませんが、現在取り組んでいる環境で動作する数少ないツールの1つです。 Powershellは利用できる他のツールですが、Powershellでの経験はあまりありません。また、カップルポイントのタスクにしか使用していません)。VBScript:重複したノード名を持つXMLファイルの更新/修正 - 入力:TXTおよびXML - 出力:XML

問題点: 私は2つの入力ファイルTEXTとXML 新しい出力ファイルが1つあります。 テキストファイルのデータがXMLファイルの更新に使用されます。

ファイル1:テキスト

! uninteresting text 
    ! uninteresting text 
    ! uninteresting text 
    ! V-1: This text discusses this vulnerability number. 
    All of this text is important, but it only applies to #1. 
    It does not apply to #2, or #3. 
    ! 
    ! V-2: This text discusses vulnerability #2. 
    It should be noted that it is multiple lines. 
    ! V-3: This text discusses the 3rd vulnerability. 
    ! 
    ! 
    ! __ ??? 
    ! V-4: This text discusses the 4th vulnerability 
    There is other text here, that goes on and on, 
    talking about this 4th vulnerability. 
    It may or may not be important to you. 
    EOF 

がファイル2:

ファイル3:XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <LIST> 
     <ASSET> 
      <ASSET_TYPE></ASSET_TYPE> 
      <HOST_NAME></HOST_NAME> 
      <HOST_IP></HOST_IP> 
     </ASSET> 
     <AUDIT> 
      <iAUDIT> 
       <AUDIT_INFO></AUDIT_INFO> 
       <VULN> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Vuln_Num</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>V-1</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Severity</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA></ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Vuln_Explanation</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>This is a vulnerability.</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Documentable</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>false</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <FINDING_DETAILS>: This text discusses this vulnerability number. 
        All of this text is important, but it only applies to #1. 
        It does not apply to #2, or #3. 
        ! 
        ! </FINDING_DETAILS> 
        <COMMENT /> 
       </VULN> 
       <VULN> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Vuln_Num</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>V-2</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Severity</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA></ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Vuln_Explanation</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>This is a vulnerability.</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Documentable</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>false</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <FINDING_DETAILS>: This text discusses vulnerability #2. 
        It should be noted that it is multiple lines. 
        ! </FINDING_DETAILS> 
        <COMMENT /> 
       </VULN> 
       <VULN> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Vuln_Num</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>V-3</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Severity</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA></ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Vuln_Explanation</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>This is a vulnerability.</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Documentable</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>false</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <FINDING_DETAILS>: This text discusses the 3rd vulnerability. 
        ! 
        ! 
        ! __ ??? 
        ! </FINDING_DETAILS> 
        <COMMENT /> 
       </VULN> 
       <VULN> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Vuln_Num</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>V-4</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Severity</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA></ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Vuln_Explanation</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>This is a vulnerability.</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Documentable</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>false</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <FINDING_DETAILS>: This text discusses the 4th vulnerability 
        There is other text here, that goes on and on, 
        talking about this 4th vulnerability. 
        It may or may not be important to you.</FINDING_DETAILS> 
        <COMMENT /> 
       </VULN>  
      </iAUDIT> 
     </AUDIT> 
    </LIST> 

XMLファイル

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <LIST> 
     <ASSET> 
      <ASSET_TYPE></ASSET_TYPE> 
      <HOST_NAME></HOST_NAME> 
      <HOST_IP></HOST_IP> 
     </ASSET> 
     <AUDIT> 
      <iAUDIT> 
       <AUDIT_INFO></AUDIT_INFO> 
       <VULN> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Vuln_Num</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>V-1</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Severity</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA></ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Vuln_Explanation</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>This is a vulnerability.</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Documentable</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>false</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <FINDING_DETAILS /> 
        <COMMENT /> 
       </VULN> 
       <VULN> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Vuln_Num</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>V-2</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Severity</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA></ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Vuln_Explanation</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>This is a vulnerability.</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Documentable</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>false</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <FINDING_DETAILS /> 
        <COMMENT /> 
       </VULN> 
       <VULN> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Vuln_Num</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>V-3</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Severity</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA></ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Vuln_Explanation</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>This is a vulnerability.</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Documentable</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>false</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <FINDING_DETAILS /> 
        <COMMENT /> 
       </VULN> 
       <VULN> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Vuln_Num</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>V-4</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Severity</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA></ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Vuln_Explanation</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>This is a vulnerability.</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <AUDIT_DATA> 
         <VULN_ATTRIBUTE>Documentable</VULN_ATTRIBUTE> 
         <ATTRIBUTE_DATA>false</ATTRIBUTE_DATA> 
        </AUDIT_DATA> 
        <FINDING_DETAILS /> 
        <COMMENT /> 
       </VULN>  
      </iAUDIT> 
     </AUDIT> 
    </LIST> 

私は、この出力ファイルを作成したいですこれはどのようにVBScriptで行うことができますか?

私はいくつかの参考文献を見つけましたが、XMLでV-1、V-2、V-3、V-4を取得するにはどうすればよいですか。 AUDIT_DATAは複数回使用されており、私が望むものを取得する方法を理解することはできません。正しいものを掴むことなく、私はFINDING_DETAILを更新することができません。

脆弱性番号の第1番目または第n番目の発生を把握したくないため、V番号を特定できるようにしたいと考えています。この特定のケースでは、ファイル内のAUDIT_DATAの最初のインスタンスであり、V-番号はXMLファイル内で順番に並んでいます(任意の場合)。

他の誰かがこれまでに同様の問題を抱えていて、助けてくれることを望んでいます。

私はこれらの特定の参照リンクを見つけましたが、実際の解決策に同化するためにVBScriptで十分な経験はありません。

Microsoftのドキュメントには、何らかの理由でVisual Basicの例を提供するのが好き、私は、私は、Visual Studioなしでこれを実行することができますかわからない(私は持っていません。)

これらは類似しているが、そうではありません私が持っている同じ問題:

VBScript to modify an Element (of many, with same Element names but with different Attributes)?

Locate XML node with specific attribute and change it

reading xml file with vbscript

これは非常に似ていますが、VB.netがある、ないのVBScript:

Parsing XML file with nodes of same name with VB.NET

は、これは私の現在のコードですが、それは解決策の近くにどこにもいないので、私はそれがショー以外のものをしてわからないんだけどソリューションから何マイルも離れています。

Set xmlDoc = CreateObject("Microsoft.XMLDOM") 
    xmlDoc.Async = "False" 
    xmlDoc.Load("C:\scripts\audit\original.xml") 


    WScript.echo "ShowAllVULN_ATTRIBUTENodes" 

    set colVuln_Attribute = xmlDoc.selectNodes ("/LIST/AUDIT/iAUDIT/VULN/AUDIT_DATA/VULN_ATTRIBUTE") 

    For Each objNode in colVuln_Attribute 
     WScript.Echo objNode.Text 
    Next 

    WScript.echo "Show All Attribute Data" 

    set colAttribute_Data= xmlDoc.selectNodes ("/LIST/AUDIT/iAUDIT/VULN/AUDIT_DATA/ATTRIBUTE_DATA") 

    For Each objNode in colAttribute_Data 
     WScript.Echo objNode.Text 
    Next 

'これはXMLでできることの範囲です。

'私はこの問題に取り組んでいたと思っていましたが、私はそれが些細なことだと思っていたのですが、あなたの経験とスキルのレベルによって決まります。 '最終結果はこれです: ' XMLの各V番号について、FINDING_DETAILSを一致するV番号の複数行のテキストに置き換えます。 「 」私は、このXMLデータを参照したい:

' V-1, FINDING_DETAILS 
    ' V-2, FINDING_DETAILS 
    ' V-3, FINDING_DETAILS 
    ' V-4, FINDING_DETAILS 

「私は、テキストファイルの入力を表すために、このようなテーブルを構築したい: 」(。私もこの部分には開始されていない)

次に、Vナンバーを主キーとして使用し、FINDING_DETAILSを更新する方法が考えられます。

ご注意: 私はそれが負荷に失敗する原因とXMLの2つの誤字修正:私はちょうどテキストの両方を扱うことをお勧め スタンドアロン= yesの

XML VBScriptの重複したノード名のXPath

+0

私は混乱しています。コーディングソリューション全体や、XMLを検索して更新する部分だけについて助言を求めていますか?すでに書いたコードを分かち合うことができますか? –

+0

コメント: 1.私はコーディングソリューション全体についてアドバイスが必要です。私はVBScriptをわざわざ私の目的地に近づけることはできません。 これは私がしたいことです: - テキストファイルをv-numbersと次の複数行のテキストを含む何らかの種類の配列や表にインポートします b - 一致するfinding_detailsノードを参照してください対応するV番号 c - 各V番号について、一致するfinding_detailsをテキストファイルの複数行テキストで更新します。私は質問を編集し、詳細を追加し、XMLに修正を加えました。 –

答えて

0

をドキュメントとXMLドキュメントをテキストファイルとして使用するのではなく、vbscriptが提供するXMLノードの細分化を利用しています。

テキストファイルを分割し、V- *を検索して文字列を収集し、End of Statementトリガを処理するまで次の文字列を収集するスクリプトです。このトリガーは、すべての脆弱性の説明の終わりにあります。

Dim a, text, Vulnerabilities(), eos: a = "C:\testenv\text.txt" : eos = false 
Redim Vulnerabilities(0) 
text = split(CreateObject("Scripting.FileSystemObject").OpenTextFile(a, 1).ReadAll, vbcrlf) 
for i=0 to ubound(text) 
    if instr(text(i), "V-") then 
     eos = false 
     Vulnerabilities(ubound(Vulnerabilities)) = text(i) 
     redim preserve Vulnerabilities(ubound(Vulnerabilities) + 1) 
    elseif not eos then 
     if instr(text(i), "END OF STATEMENT CHECK" then 
      eos = true 
      Vulnerabilities(ubound(Vulnerabilities)) = Vulnerabilities(ubound(Vulnerabilities)) & "ENDSTATEMENT" 
     else 
      Vulnerabilities(ubound(Vulnerabilities)) = text(i) 
      redim preserve Vulnerabilities(ubound(Vulnerabilities) + 1) 
     end if 
    end if 
next 
redim preserve Vulnerabilities(ubound(Vulnerabilities) - 1) 'trim off extra dynamic entry 

は今、あなたは隠しすべての脆弱性のデータを持っている、あなたは一度に特定のXMLセグメントラインを交換することができ、一度にXMLファイルを一行を移入、並行して、あなたの脆弱性データを反復します。 2つのドキュメントを見て、2つ目のドキュメントからデータを切り取り、最初のドキュメントのマーカーに貼り付けるようなものです。

Dim b, xml, counter : b = "C:\testenv\xml.xml" : counter = 0 
xml = split(CreateObject("Scripting.FileSystemObject").OpenTextFile(a, 1).ReadAll, vbcrlf) 
for i=0 to ubound(xml) 
    if instr(xml(i), "Vuln_Num") then 
      for j=counter to ubound(Vulnerabilities) 
       if instr(Vulnerabilities(j), "V-") then 
        replace(xml(i), "VulnNum", Vulnerabilities(j) 
        exit for 
       end if 

       'additional conditional statements can be placed here. 
       'such as detecting when the "ENDSTATEMENT" is in 
       'the vulnerability string and ending the string replacements. 
      next 
    end if 
next 

私はXMLのメソッドと生データファイルの読み出し方法の両方で、VBScriptでXMLを扱っている、と私はちょうどプログラムでテキストデータとしてそれを読むのではなくXMLノードのメソッドを使用することを好みます。それはもっと簡単です。あなたの努力に最高の運があります。

関連する問題