Select-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 クエリを入力し、Content、Path、または Xml パラメーターを使用して、検索する XML を指定します。
例
例 1: AliasProperty ノードの選択
この例では、Types.ps1xml
のエイリアス プロパティを取得します。 このファイルの詳細については、about_Types.ps1xmlを参照してください。
最初のコマンドは、$Path
変数に Types.ps1xml
ファイルへのパスを保存します。
2 番目のコマンドは、AliasProperty ノードへの XML パスを $XPath
変数に保存します。
Select-Xml
コマンドレットは、Types.ps1xml
ファイルから XPath ステートメントによって識別される AliasProperty ノードを取得します。 このコマンドでは、パイプライン演算子 (|
) を使用して、AliasProperty ノードを Select-Object
コマンドレットに送信します。
$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
ファイル内の各エイリアス プロパティの名前と 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 番目のコマンドは 2 番目と同じですが、tt はパイプライン演算子 (|
) を使用して、$Xml
変数の XML を Select-Xml
コマンドレットに送信します。
$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 です。 ハッシュ テーブルのキー名 切り取りは任意です。 予約されていない任意の名前を使用できますが、xmlns
Select-Xml
コマンドレットは、各スニペットの Title 要素の内容を取得します。
Path パラメーターを使用して、Snippets ディレクトリと Namespace パラメーターを指定し、$SnippetNamespace
変数に名前空間を指定します。
XPath パラメーターの値は、snip:Title
です。 結果は ForEach-Object
コマンドレットにパイプ処理され、ノードの InnerXml プロパティの値からタイトルが取得されます。
$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 ノードをこのコマンドレットにパイプできます。
出力
メモ
XPath は、XML ドキュメントの一部を識別するように設計された標準言語です。 XPath 言語の詳細については、「XPath リファレンス」および「イベント選択の選択フィルター」セクションを参照してください。