【发布时间】:2020-10-09 11:11:35
【问题描述】:
除了基本的命令行经验之外,我还没有使用 PowerShell,并且对基本批处理文件之外的实际脚本编写经验很少。
我无法弄清楚如何使用某种“循环”将值添加到 XML 文件中。
使用 YouTube 视频(阅读和更新 XML 文件)中的指导,我终于能够使用 PowerShell 将应用程序 GUID 添加到 XML 文件中。这是有效的:
$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 行只是设置了我需要添加 GUID 的 xml 文件路径 使用 PowerShell xml 工具需要第 2 行 第 3 行是 xml 文件中我需要添加 GUID 的路径 第 4 行将更改保存回同一个 xml 文件。
我的问题
我试图弄清楚如何在“WHAT WORKS”上方循环我的四行代码,以便我可以读取 CSV 文件中的“TS_ID”,然后将“GUID”添加到相应的 ts.xml 文件中.需要注意的一点是,TS_ID 是包含我要添加 GUID 的 ts.xml 文件的文件夹的名称。
我的 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 中有它们。
【问题讨论】:
标签: xml powershell