• 1000 использовать какой-то «l oop» для добавления значения в файл XML.
Используя руководство из видео YouTube (чтение и обновление файлов XML), я наконец смог добавить GUID приложения в файл XML с помощью PowerShell. Вот что работает:
$xmlFilePath = 'C:\Users\Timetriad\Desktop\1PASSWORD-7\ts.xml'
$tsXML = [xml] (Get-Content $xmlFilePath)
$tsXML.sequence.step.defaultVarList.variable[1].'#text' = '{f98806dd-02a4-4863-9b3e-fc83afd9d1e0}'
$tsXML.Save($xmlFilePath)
Строка 1 просто устанавливает xml путь к файлу, который мне нужен, чтобы добавить GUID в Строку 2, необходимую для использования инструментов PowerShell xml Строка 3 - это путь в файл xml, в который мне нужно добавить строку GUID 4, сохраняет изменения обратно в тот же файл xml.
Моя проблема
Я пытаюсь понять, как я могу l oop мои четыре строки кода выше «ЧТО РАБОТАЕТ», поэтому я могу прочитать «TS_ID» в файле CSV, а затем добавить «GUID» в соответствующий файл ts. xml. Следует отметить, что TS_ID - это имя папки, в которой хранится файл ts. xml, в который я хотел бы добавить GUID.
В моем CSV-файле есть только два двух фрагмента данных: TS_ID , GUID
Я очень рад, что наконец-то могу добавить GUID в ts. xml, но отсутствие цикла делает это сложнее, чем использование GUI для выполнения той же задачи в самом приложении.
Обновление
Я добавил комментарий, который показывает данные XML. Это выглядит некрасиво, поэтому я добавляю его сюда в свой исходный пост:
<?xml version="1.0"?>
<sequence version="3.00" name="Custom Task Sequence" description="Sample Custom Task Sequence">
<step type="BDD_InstallApplication" name="Install Application" description="" disable="false" continueOnError="false" runIn="WinPEandFullOS" successCodeList="0 3010">
<defaultVarList>
<variable name="ApplicationGUID" property="ApplicationGUID"></variable>
<variable name="ApplicationSuccessCodes" property="ApplicationSuccessCodes">0 3010</variable>
</defaultVarList>
<action>cscript.exe "%SCRIPTROOT%\ZTIApplications.wsf"</action>
</step>
</sequence>
Тест предоставлен Cbsch с моими изменениями:
$csvData = Import-Csv -Path "C:\Users\Administrator\Desktop\Control\TaskSequence-AppGUID-MDT.csv" -Encoding UTF8 -Delimiter ","
$csvData | ForEach-Object {
$tsId = $_.TS_ID
$guid = $_.GUID
$xmlFilePath = "C:\Users\Administrator\Desktop\Control\$tsId\ts.xml"
$tsXML = [xml] (Get-Content $xmlFilePath)
$tsXML.sequence.step.defaultVarList.variable[1].'#text' = "{$guid}"
$tsXML.Save($xmlFilePath)
}
Окончательное обновление с использованием экспертной помощи " Cbsch ".
Вот окончательные результаты, которые сработали для моих нужд:
$csvData = Import-Csv -Path "C:\Users\Administrator\Desktop\Control\TaskSequence-AppGUID-MDT.csv"
$csvData | ForEach-Object {
$tsId = $_.TS_ID
$guid = $_.GUID
$xmlPath = "C:\Users\Administrator\Desktop\Control\$tsId\ts.xml"
$tsXML = [xml] (Get-Content $xmlPath)
$tsXML.sequence.step.defaultVarList.variable[0].InnerText='#text';
$tsXML.sequence.step.defaultVarList.variable[0]."#text" = "$guid"
$tsXML.Save($xmlPath)
}
Примечание. Я не использую {} для своей переменной GUID, потому что они есть в моем CSV.