3

根据http://technet.microsoft.com/en-us/library/hh848302get-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 中最酷的东西之一(不仅仅是因为我测试过它)。数据语言/无语言模式允许您将 PowerShell 环境保护为有限的命令集,这使您可以向世界其他地方开放 PowerShell 的一小部分。语言模式在 Exchange(这是它们的主要功能驱动程序)和PowerShell Pipeworks(我的公司在 PowerShell 上构建的一种免费网络语言)中都大量使用。

了解数据语言的另一个特性 -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 回答