我正在尝试使用VBscript。(实际上,我对VBScript不太熟悉,已经有几年没有使用它了,但它是我目前正在工作的环境中为数不多的工具之一,至少我以前使用过它。Powershell是另一个可以使用的工具,但我在Powershell方面的经验更少,并且只用于几个点任务。)
关于这个问题:我有两个输入文件: TEXT和XML,将有一个新的输出文件:来自文本文件的XML数据将用于更新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: 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>我想让这个输出文件:
file3: 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>如何在VBScript中做到这一点?
我已经找到了几个引用,但是如何在XML中获取V-1、V-2、V-3、V-4。AUDIT_DATA被多次使用,我不知道如何抓住我想要的那个。如果没有正确的抓取,我将无法更新FINDING_DETAIL。
我不想获取第一或第九次出现的漏洞号码,我希望能够具体定位V-数字。在这个特殊的例子中,它是AUDIT_DATA在文件中的第一个实例,并且V-数字在XML文件中是有序的,如果它有帮助的话。
我希望其他人以前也有过类似的问题,并能提供帮助。
我已经找到了这些特殊的参考链接,但是在VBScript方面还没有足够的经验来将它同化到一个工作的解决方案中。
Microsoft文档出于某种原因喜欢提供Visual示例,但我不确定没有Visual (我没有)是否能运行它。
这些都是类似的,但与我所面对的问题不同:
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号,用匹配V号的多行文本替换FINDING_DETAILS。‘‘我想引用这个XML数据:
' V-1, FINDING_DETAILS
' V-2, FINDING_DETAILS
' V-3, FINDING_DETAILS
' V-4, FINDING_DETAILS“我想构建一个这样的表,以表示文本文件输入:”(我甚至还没有开始讨论这个部分)。
' V-1, multi-line text
' V-2, multi-line text
' V-3, multi-line text
' V-4, multi-line text然后,使用V-数字作为主键,并更新FINDING_DETAILS。
请注意:我修复了XML中导致其无法加载的两个输入: standalone=yes。
XML VBScript重复节点名XPath
发布于 2016-06-27 03:35:45
我建议只将文本文档和XML文档作为文本文件处理,而不是使用vbscript提供的XML节点分解。
下面是一个脚本,它拆分文本文件,搜索V-*并收集字符串,然后收集下一个字符串,直到处理语句结束触发器get为止。此触发器将位于每个漏洞描述的末尾。
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文件。有点像看两个文档,然后从第二个文档中删除数据,然后粘贴到第一个文档上的标记上。
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我在vbscript中使用XML方法和原始数据文件读取方法来处理XML,我只是喜欢以编程方式将它作为文本数据来读取,而不是使用XML节点方法。只是比较简单而已。祝你一切顺利。
https://stackoverflow.com/questions/38004901
复制相似问题