我甚至不知道从哪里开始,但是我可以使用的powershell cmdlet可以使用以下格式读取MDT xml(OperatingSystem.xml),并只获取GUID值(或值)$ captureGUID =" {1a65f870-2247-410a-be71-75b6b975b3d5}"
<oss>
<os guid="{1a65f870-2247-410a-be71-75b6b975b3d5}" enable="True">
<Name>Windows 7 ENTERPRISE in Windows 7 Ent x64 install.wim</Name>
<CreatedTime>7/21/2014 8:51:10 PM</CreatedTime>
<CreatedBy>W2K8R2\Administrator</CreatedBy>
<LastModifiedTime>7/21/2014 8:51:10 PM</LastModifiedTime>
<LastModifiedBy>W2K8R2\Administrator</LastModifiedBy>
<Description>Windows 7 ENTERPRISE</Description>
<Platform>x64</Platform>
<Build>6.1.7601.17514</Build>
<OSType>Windows IBS</OSType>
<Source>.\Operating Systems\Windows 7 Ent x64</Source>
<IncludesSetup>True</IncludesSetup>
<SMSImage>False</SMSImage>
<ImageFile>.\Operating Systems\Windows 7 Ent x64\Sources\install.wim</ImageFile>
<ImageIndex>1</ImageIndex>
<ImageName>Windows 7 ENTERPRISE</ImageName>
<Flags>Enterprise</Flags>
<HAL>acpiapic</HAL>
<Size>11566</Size>
<Language>en-US</Language>
</os>
<os guid="{67ee1204-ba8f-47d4-9e6c-34a7bb24dd4d}" enable="True">
从前面获取捕获的值并将其替换为另一种格式的另一个xml文件(例如,在此处更新OSGUID)
<?xml version="1.0" encoding="utf-8" ?>
<sequence version="3.00" name="Standard Client Task Sequence" description="A complete task sequence for deploying a client operating system">
<globalVarList>
<variable name="OSGUID" property="OSGUID">{bc8e6992-5890-4be2-88af-29208f9ab0d5}</variable>
<variable name="DestinationDisk" property="DestinationDisk">0</variable>
<variable name="DestinationPartition" property="DestinationPartition">1</variable>
<variable name="DestinationOSVariable" property="DestinationOSVariable" />
答案 0 :(得分:0)
PowerShell是这项工作的错误工具。您应该创建一个XSLT转换。使用XSLT,您可以找到一个特定的节点,并轻松将其写入另一个XML表单---或任何其他类型的文档。
以下是您可以在StackOverflow上找到的几个示例之一:
XSLT or XPath: how to find a node with a specific tag and text then extract it into a new xml file?
答案 1 :(得分:0)
你可以在Powershell中做到这一点,你只需要第一个guid吗?因为你的第一个和第二个guid是不同的。您需要使用正则表达式。这样的事情应该有效。
$OSXML = Get-Content OperatingSystem.xml
$regex = 'guid=\"(\{\w+\-\w+\-\w+\-\w+\-\w+\})\"'
ForEach ($Line in $OSXML)
{ $Line -match $regex
}
$captureGUID = $Matches[1]
$ReplacementXML = [xml](Get-Content "NewXML.xml")
($ReplacementXML.sequence.globalVarList.variable | Where-Object { $_.Name -eq "OSGUID" }).'#text' = $captureGUID
$ReplacementXML.Save("C:\Test\NewXML2.xml")
您需要将$ ReplacementXML的Get-Content部分更改为要将GUID导入到的第二个xml文件的名称。然后对于最后一行,将保存位置的名称更改为同一文件的名称,我使用2个单独的名称来验证输出的导入。