我可以投入Powershell数据部分吗?

时间:2012-07-20 22:03:53

标签: powershell powershell-v2.0

根据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

我做了一些愚蠢的事情,误读了文档还是文档中有错误?

1 个答案:

答案 0 :(得分: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。明智地使用。

希望这有助于