我有一部分脚本调用主机属性的API。如果API失败,它会检查是否存在包含属性的文本文件(来自之前的运行)。如果该文件不存在,我需要将UNKNOWN添加到属性节点。请参阅下面的XML中的预期结果。 XML将以没有属性的方式开始,因为脚本是用于填充此信息的。
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <netprobe compatibility="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://schema.itrsgroup.com/GA2011.2-110303/netprobe.xsd">
- <selfAnnounce>
<enabled>true</enabled>
<retryInterval>60</retryInterval>
<requireReverseConnection>false</requireReverseConnection>
- <probeName>
<hostname />
<data>_</data>
<port />
<data>-SA</data>
</probeName>
- <managedEntity>
<name>TestBox</name>
- <attributes>
<attribute name="Business Unit">UNKNOWN</attribute>
<attribute name="Department">UNKNOWN</attribute>
<attribute name="Team">UNKNOWN</attribute>
<attribute name="Environment">UNKNOWN</attribute>
<attribute name="ServerModel">UNKNOWN</attribute>
<attribute name="datacentre">UNKNOWN</attribute>
<attribute name="Application">UNKNOWN</attribute>
<attribute name="Description"UNKNOWN</attribute>
</attributes>
<types>
</types>
</managedEntity>
<gateways>
</gateway>
</gateways>
</selfAnnounce>
</netprobe>
如何添加数据?我认为这将是我将为每个属性名称
运行的类似内容[xml]$XML = Get-Content C:\selfannounce.xml
$tempchild = $xml.CreateElement("attribute")
$tempchild.InnerText = "Unknown"
$a = $XML.SelectSingleNode("//attributes")
$a.AppendChild($tempchild)
[xml]$XML.Save("C:\selfannouncetest.xml")
但这给了我以下的信息。
<attributes>
<attribute>Unknown</attribute>
</attributes>
我不知道如何获得“attribute name =”部分。
<attribute name="Business Unit">UNKNOWN</attribute>
任何人都知道实现这一目标的最佳方法吗?它将被添加到以下代码
Try {
$API = New-Object System.Net.WebClient
$APIData = $API.DownloadString($FullURL)
Set-Content -Value $APIdata -Path $APIDataFile -Force
#$Newdata = Get-Content C:\API.txt
}
catch [Net.WebException] {
$CheckAPIFile = Test-Path $APIDataFile
If ($CheckAPiFile -eq $true){
$APIdata = Get-Content $APIDataFile
}
Else {
#Create attributes and add UNKNOWN
}
}
另外,如果API调用成功或文本文件存在,如何将以下内容添加到逻辑中?不知道在上面的脚本中将其插入的位置
[xml]$XML = Get-Content $SelfannounceXMLEdit
($APIData -split "`n") | Where-Object { $_.Trim() } | ForEach-Object {
$tempchild = [xml]$_.Trim()
$attribute = $xml.ImportNode($tempchild.attribute, $true)
$newType = $XML.netprobe.selfAnnounce.managedEntity.selectsinglenode("attributes").AppendChild($attribute)
}
$XML.Save($SelfannounceXMLEdit)
请注意,必须使用PowerShell 2.0。
答案 0 :(得分:1)
$tempchild = $xml.CreateElement("attribute")
$tempchild.InnerText = "Unknown"
$tempchild.SetAttribute("name","Name value goes here")
$a = $XML.SelectSingleNode("//attributes")
$a.AppendChild($tempchild)