3

get-help about_datahttp://technet.microsoft.com/en-us/library/hh848302の両方によると[xml]、データセクションではリテラルが許可されています

ただし、ドキュメントのxmlブロックを使用してデータセクションを作成しようとすると

data{
[XML] @'
    <p> Hello, World </p>
'@
}

Poweshellがエラーメッセージで文句を言う

The '[XML]' operator is not allowed in restricted language mode or a Data section.
At C:\Users\Alex\AppData\Local\Temp\150a9138-ebc3-4af1-8aec-73bf724fdcf5.ps1:2 char:6
+ [XML] <<<<  @'
       + CategoryInfo          : ParserError: (XML:Token) [], ParseException
        + FullyQualifiedErrorId : OperatorNotSupportedInDataSection

私は愚かなことをしているのですか、ドキュメントを読み間違えているのですか、それともドキュメントにエラーがありますか?

4

1 に答える 1

3

これはドキュメントのエラーではありませんが、意味的には髪の毛を分割しています。キャストのすべての副作用が発生する可能性があるため、データ言語でキャストすることはできません(正しく思い出せば、キャストできずに実際に殺されたのは、特定の文字列をファイルストリームにキャストするとディスクへのアクセスが許可されることです。 )。

XMLをデータセクション内の文字列として保持し(これは、「XMLリテラル」(XMLデータ型ではなくxml文字列)の意味です)、外部のキャストを含めることができます。

$info = @(data {
@'
        <p> Hello, World </p>
'@
}) -as [xml]

ちなみに、私はデータ言語(および全体的な言語モード)がPowerShellの最も優れた点の1つであると信じがちです(テストしたからというだけではありません)。データ言語/言語なしモードでは、PowerShell環境を有限のコマンドセットに保護できます。これにより、PowerShellの小さな部分を他の世界に公開できます。言語モードは、Exchange(主要な機能ドライバーでした)とPowerShell Pipeworks(私の会社がPowerShell上に構築した無料のWeb言語)の両方で頻繁に使用されます。

データ言語の別の機能である-SupportedCommandについて知っていると、これを機能させるための別の道が開かれます。

小さな関数を作成して、それをNew-XmlDocumentと呼び、それをデータ言語で使用して「サポート」することができます。

function New-XmlDocument([Parameter(Mandatory=$true,Position=0)][string]$xml) {
    $xml -as [xml]
}

data -SupportedCommand New-XmlDocument {
    New-XmlDocument @'
<p>Hello World</p>
'@

}

データ言語は強力なPowerShellです。賢く使用してください。

お役に立てれば

于 2012-07-21T19:30:26.090 に答える