2016-10-12 30 views
0

wsussncn2.cabからMicrosoftのパッチ/ホットフィックスの一覧を含むpackage.xmlファイルの内容を読み込もうとしています。 Windows 2008R2および2012 R2製品用のファイル。 ファイルをwsusscn2.cabから抽出します。ファイルPackage.xmlはかなり大きいですが、私はPowerShellで読むことができるようです。エディタのような他のプログラムは失敗するのに使います。wsusscn2.cabからpackage.xmlファイルのXMLコンテンツを読み取る

私はいくつかの検索を実行するために、このようなコードを使用使用のPowerShellから:

[xml]$xdoc = gc .\package.xml 
$xdoc | Select-Xml "//OfflineSyncPackage" 

または

$xdoc | Select-Xml "//Updates" 

やその他のカテゴリを、それは何も返しません。

しかし、ときに私が使用します。

$xdoc.SelectNodes("/*/*/*") 

はその後、私はそれから情報を取得することができた、それがオブジェクトだった場合、私は次のようにアクセスする場合にも:

$xdoc.OfflineSyncPackage.Updates.update.Categories.Category 

なぜあなたは知っていますかSelect-Xmlを使用できないか、SelectNodes()の '*'をすべて選択する必要がありますか?

このファイルに対してXML検索を実行するにはどうすればよいですか? XMLは、名前空間を使用しています

答えて

0

<?xml version="1.0" encoding="utf-8"?> 
<OfflineSyncPackage MinimumClientVersion="5.8.0.2678" 
    ProtocolVersion="1.0" 
    PackageId="f27201b9-eca7-43ee-aed8-f7a2cddfec8b" 
    SourceId="cc56dcba-9026-4399-8535-7a3c9bed7086" 
    CreationDate="2016-10-10T22:40:27Z" 
    PackageVersion="1.1" 
    xmlns="http://schemas.microsoft.com/msus/2004/02/OfflineSync"> 
    <Updates> 
    ... 
    </Updates> 
</OfflineSyncPackage>

ので、あなたはこのように、それらを処理するための名前空間の管理が必要になります。

[xml]$xdoc = gc .\package.xml 

$nsm = New-Object Xml.XmlNamespaceManager($xdoc.NameTable) 
$nsm.AddNamespace('ns', $xdoc.DocumentElement.NamespaceURI) 

$xdoc.SelectNodes('//ns:Updates', $nsm) 

またはこのような:

[xml]$xdoc = gc .\package.xml 
$ns = @{ns='http://schemas.microsoft.com/msus/2004/02/OfflineSync'} 

Select-Xml -Xml $xdoc -Namespace $ns -XPath '//ns:Updates' 
+0

こんにちは、ありがとう。 XML名前空間を使用する必要があるのは初めてのことです。 –

関連する問題