Я новичок в powershell и пытаюсь написать свой первый скрипт. Я использую PowerShell v2.0. У меня есть следующий скрипт, который вызывает вызов API и получает данные в переменную $data
.PowerShell - данные API в XML
$FullURL = $url1+$url2+$Url3
$client = New-Object System.Net.WebClient
$data = $client.DownloadString($FullURL)
Set-Content -Value $data -Path 'c:\API.txt'
$data
выводит ниже (пример). Примечание. Результаты gettype() - это строка. -
<attribute name="Business Unit">Platform</attribute>
<attribute name="Department">Channels Technology</attribute>
<attribute name="Team">Stackexchange</attribute>
<attribute name="Environment">World</attribute>
<attribute name="ServerModel">Synology</attribute>
<attribute name="datacentre">New York</attribute>
<attribute name="Application">PowerShell Teacher</attribute>
<attribute name="Description">Learn How To Use PowerShell</attribute>
Мне нужно, чтобы получить указанное в поле ниже образец файла XML, между тегами атрибутов -
<selfAnnounce>
<enabled>true</enabled>
<retryInterval>60</retryInterval>
<requireReverseConnection>false</requireReverseConnection>
<probeName>
<hostname/>
<data>_</data>
<port/>
<data>-SA</data>
</probeName>
<managedEntity>
<name></name>
<attributes>
</attributes>
Я не уверен, где начать с этого. Я думал, что это будет что-то вроде ниже, но результаты все в одном теге, возможно, потому, что они не являются pscustom объекты -
[xml]$XML = Get-Content $SelfannounceXMLEdit
$data | ForEach-Object {
$tempchild = $XML.CreateElement("Attributename")
$tempchild.set_InnerText($_)
$newType = $XML.netprobe.selfAnnounce.managedEntity.attributes.AppendChild($tempchild)
}
$XML.Save($SelfannounceXMLEdit)
Это дает следующие результаты, которые, очевидно, неправильно для XML файл-
<attributes>
<Attributename><attribute name="Business Unit">Platform</attribute> <attribute name="Department">Channels Technology</attribute> <attribute name="Team">Stackexchange</attribute> <attribute name="Environment">World</attribute> <attribute name="ServerModel">Synology</attribute> <attribute name="datacentre">New York</attribute> <attribute name="Application">PowerShell Teacher</attribute> <attribute name="Description">Learn How To User PowerShell</attribute></Attributename>
</attributes>
Результаты должны выглядеть следующим образом -
<?xml version="1.0" encoding="ISO-8859-1"?>
<netprobe compatibility="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://google.com/netprobe.xsd">
<selfAnnounce>
<enabled>true</enabled>
<retryInterval>10</retryInterval>
<requireReverseConnection>false</requireReverseConnection>
<probeName>
<hostname />
<data>_</data>
<port />
<data>-SA</data>
</probeName>
<managedEntity>
<name></name>
<attributes>
<attribute name="Business Unit">Platform</attribute>
<attribute name="Department">Channels Technology</attribute>
<attribute name="Team">Stackexchange</attribute>
</attributes>
<types>
<type>Core</type>
<type>Core Windows</type>
<!--Autogenerated types-->
<!--End of Autogenerated types-->
</types>
</managedEntity>
<gateways>
<gateway>
<hostname>MFT556</hostname>
<port>1234</port>
</gateway>
</gateways>
</selfAnnounce>
</netprobe>
Пожалуйста, помогите мне решить эту проблему. Я попытался преобразовать $ data в xml, но продолжаю получать ошибки. Я попытался экспортировать API как XML, но получить ошибки. любая помощь приветствуется.
В следующий раз включите действительные образцы xml. Здесь отсутствует множество элементов. –
Hi Frode F, извинения, я обновил сообщение, чтобы показать полный XML-файл. Спасибо –
Они просто показывают и пример того, как будет выглядеть результат. XML является шаблоном и не имеет никаких атрибутов. Вызов API получает атрибуты хоста, которые затем мне нужно импортировать в XML. –