次の方法で共有


Select-Xml

XML 文字列または XML ドキュメント内のテキストを検索します。

構文

Select-Xml
      [-XPath] <string>
      [-Xml] <XmlNode[]>
      [-Namespace <hashtable>]
      [<CommonParameters>]
Select-Xml
      [-XPath] <string>
      [-Path] <string[]>
      [-Namespace <hashtable>]
      [<CommonParameters>]
Select-Xml
      [-XPath] <string>
      -LiteralPath <string[]>
      [-Namespace <hashtable>]
      [<CommonParameters>]
Select-Xml
      [-XPath] <string>
      -Content <string[]>
      [-Namespace <hashtable>]
      [<CommonParameters>]

説明

Select-Xml コマンドレットを使用すると、XPath クエリを使用して XML 文字列とドキュメント内のテキストを検索できます。 XPath クエリを入力し、 ContentPath、または Xml パラメーターを使用して、検索する XML を指定します。

例 1: AliasProperty ノードの選択

この例では、 Types.ps1xmlのエイリアス プロパティを取得します。 このファイルの詳細については、 about_Types.ps1xml を参照してください。

最初のコマンドは、 Types.ps1xml ファイルへのパスを $Path 変数に保存します。

2 番目のコマンドは、$XPath変数の AliasProperty ノードへの XML パスを保存します。

Select-Xml コマンドレットは、Types.ps1xml ファイルから XPath ステートメントによって識別される AliasProperty ノードを取得します。 このコマンドでは、パイプライン演算子 (|) を使用して、 AliasProperty ノードを Select-Object コマンドレットに送信します。 ExpandProperty パラメーターは、Node オブジェクトを展開し、そのNameおよびReferencedMemberNameプロパティを返します。

$Path = "$Pshome\Types.ps1xml"
$XPath = "/Types/Type/Members/AliasProperty"
Select-Xml -Path $Path -XPath $Xpath | Select-Object -ExpandProperty Node

Name                 ReferencedMemberName
----                 --------------------
Count                Length
Name                 Key
Name                 ServiceName
RequiredServices     ServicesDependedOn
ProcessName          Name
Handles              Handlecount
VM                   VirtualSize
WS                   WorkingSetSize
Name                 ProcessName
Handles              Handlecount
VM                   VirtualMemorySize
WS                   WorkingSet
PM                   PagedMemorySize
NPM                  NonpagedSystemMemorySize
Name                 __Class
Namespace            ModuleName

結果は、Types.ps1xml ファイル内の各エイリアス プロパティの Name と ReferencedMemberName を示します。 たとえば、Length プロパティのエイリアスである Count プロパティがあります。

例 2: XML ドキュメントを入力する

この例では、 XML パラメーターを使用して、 Select-Xml コマンドレットに XML ドキュメントを指定する方法を示します。

Get-Content コマンドレットは、Types.ps1xml ファイルの内容を取得し、$Types変数に保存します。 [xml]は、変数を XML オブジェクトとしてキャストします。

Select-Xml コマンドレットは、Types.ps1xml ファイル内の MethodName ノードを取得します。 このコマンドでは、 Xml パラメーターを使用して、 $Types 変数の XML コンテンツを指定し、 XPath パラメーターを使用して、 MethodName ノードへのパスを指定します。

[xml]$Types = Get-Content $Pshome\Types.ps1xml
Select-Xml -Xml $Types -XPath "//MethodName"

例 3: PowerShell ヘルプ ファイルを検索する

この例では、 Select-Xml コマンドレットを使用して PowerShell XML ベースのコマンドレット ヘルプ ファイルを検索する方法を示します。 各ヘルプ ファイルのタイトルとなるコマンドレット名とヘルプ ファイルのパスを検索します。

$Namespace変数には、ヘルプ ファイルに使用される XML 名前空間を表すハッシュ テーブルが含まれています。

$Path変数には、PowerShell ヘルプ ファイルへのパスが含まれています。 コンピューター上のこのパスにヘルプ ファイルがない場合は、 Update-Help コマンドレットを使用してヘルプ ファイルをダウンロードします。 更新可能なヘルプの詳細については、「 about_Updatable_Help」を参照してください。

Select-Xml コマンドレットは、ファイル内の任意の場所で要素Command:Name検索することで、XML ファイルのコマンドレット名を検索します。 結果は $Xml 変数に格納されます。 Select-Xmlは、System.Xml.XmlElement オブジェクトである Node プロパティを持つSelectXmlInfo オブジェクトを返します。 Node プロパティには、取得される実際の XML を含む InnerXML プロパティがあります。

$Xml変数は、Format-Table コマンドレットにパイプ処理されます。 Format-Table コマンドは、計算プロパティを使用して、$Xml変数内の各オブジェクトのNode.InnerXML プロパティを取得し、テキストの前後の空白をトリミングし、Pathと共にソース ファイルに表示します。

$Namespace = @{
    command = "http://schemas.microsoft.com/maml/dev/command/2004/10"
    maml = "http://schemas.microsoft.com/maml/2004/10"
    dev = "http://schemas.microsoft.com/maml/dev/2004/10"
}

$Path = "$Pshome\en-us\*dll-Help.xml"
$Xml = Select-Xml -Path $Path -Namespace $Namespace -XPath "//command:name"
$Xml | Format-Table @{Label="Name"; Expression= {($_.node.innerxml).trim()}}, Path -AutoSize

Name                    Path
----                    ----
Export-Counter          C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Diagnostics.dll-Help.xml
Get-Counter             C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Diagnostics.dll-Help.xml
Get-WinEvent            C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Diagnostics.dll-Help.xml
Import-Counter          C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Diagnostics.dll-Help.xml
Add-Computer            C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Management.dll-Help.xml
Add-Content             C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Management.dll-Help.xml
Checkpoint-Computer     C:\Windows\system32\WindowsPowerShell\v1.0\en-us\Microsoft.PowerShell.Commands.Management.dll-Help.xml
...

例 4: XML を入力するさまざまな方法

この例では、 Select-Xml コマンドレットに XML を送信する 2 つの異なる方法を示します。

最初のコマンドは、xml を含む here 文字列を $Xml 変数に保存します。 here-strings の詳細については、 about_Quoting_Rulesを参照してください。

Select-Xml では、 Content パラメーターを使用して、 $Xml 変数に XML を指定します。

3 番目のコマンドは、パイプライン演算子 (|) を使用して $Xml 変数内の XML を Select-Xml コマンドレットに送信することを除き、2 番目のコマンドと同じです。

$Xml = @"
<?xml version="1.0" encoding="utf-8"?>
<Book>
  <projects>
    <project name="Book1" date="2009-01-20">
      <editions>
        <edition language="English">En.Book1.com</edition>
        <edition language="German">Ge.Book1.Com</edition>
        <edition language="French">Fr.Book1.com</edition>
        <edition language="Polish">Pl.Book1.com</edition>
      </editions>
    </project>
  </projects>
</Book>
"@

Select-Xml -Content $Xml -XPath "//edition" | foreach {$_.node.InnerXML}

En.Book1.com
Ge.Book1.Com
Fr.Book1.com
Pl.Book1.com

$Xml | Select-Xml -XPath "//edition" | foreach {$_.node.InnerXML}

En.Book1.com
Ge.Book1.Com
Fr.Book1.com
Pl.Book1.com

例 5: 既定の xmlns 名前空間を使用する

この例では、既定の xmlns 名前空間を使用する XML ドキュメントで Select-Xml コマンドレットを使用する方法を示します。 例として、ユーザーが作成した Windows PowerShell ISE のスニペット ファイルのタイトルを取得します。 スニペットの詳細については、「 New-IseSnippetを参照してください。

$SnippetNamespace変数には、XML ファイルが使用する既定の名前空間のハッシュ テーブルが含まれています。 ハッシュ テーブルの値は、スニペット XML の XMLNS スキーマ URI です。 ハッシュ テーブルのキー名 ( snip は任意です。 予約されていない任意の名前を使用できますが、 xmlnsを使用することはできません。

Select-Xml コマンドレットは、各スニペットの Title 要素の内容を取得します。 Path パラメーターを使用して Snippets ディレクトリと Namespace パラメーターを指定し、$SnippetNamespace変数に名前空間を指定します。 XPath パラメーターの値はsnip:Titleです。 結果は、ノードの InnerXml プロパティの値からタイトルを取得するForEach-Object コマンドレットにパイプされます。

$SnippetNamespace = @{snip = "http://schemas.microsoft.com/PowerShell/Snippets"}

Select-Xml -Path $HOME\Documents\WindowsPowerShell\Snippets -Namespace $SnippetNamespace -XPath "//snip:Title" |
    ForEach-Object {$_.Node.Innerxml}

パラメーター

-Content

検索対象の XML を含む文字列を指定します。 文字列をパイプ処理して Select-Xmlすることもできます。

型:String[]
配置:Named
規定値:None
必須:True
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-LiteralPath

検索対象の XML ファイルのパスとファイル名を指定します。 Path とは異なり、LiteralPath パラメーターの値は、型指定されたとおりに使用されます。 ワイルドカードとして解釈される文字はありません。 パスにエスケープ文字が含まれている場合は、単一引用符で囲みます。 単一引用符は、エスケープ シーケンスとして文字を解釈しないように PowerShell に指示します。

型:String[]
Aliases:PSPath, LP
配置:Named
規定値:None
必須:True
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-Namespace

XML で使用されている名前空間のハッシュ テーブルを指定します。 @{<namespaceName> = <namespaceValue>} という形式を使用します。

XML が xmlns で始まる既定の名前空間を使用する場合は、名前空間名に任意のキーを使用します。 xmlns を使用することはできません。 XPath ステートメントで、各ノード名の前に名前空間名とコロン ( //namespaceName:Nodeなど) を付けます。

型:Hashtable
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Path

検索対象の XML ファイルのパスとファイル名を指定します。 ワイルドカード文字を使用できます。

型:String[]
配置:1
規定値:None
必須:True
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:True

-Xml

1 つ以上の XML ノードを指定します。

XML ドキュメントは、XML ノードのコレクションとして処理されます。 XML ドキュメントをパイプ処理して Select-Xmlすると、パイプラインを経由する各ドキュメント ノードが個別に検索されます。

型:XmlNode[]
Aliases:Node
配置:1
規定値:None
必須:True
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-XPath

XPath 検索クエリを指定します。 クエリ言語では、大文字と小文字が区別されます。 このパラメーターは必須です。

型:String
配置:0
規定値:None
必須:True
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

入力

System.String or System.Xml.XmlNode

パスまたは XML ノードをこのコマンドレットにパイプできます。

出力

SelectXmlInfo

メモ

XPath は、XML ドキュメントの一部分を特定するために設計された標準言語です。 XPath 言語の詳細については、「 XPath リファレンス および Event Selectionの選択フィルター」セクションを参照してください。