关于数据部分

简短说明

介绍数据部分,这些节将文本字符串和其他只读数据与脚本逻辑隔离开来。

详细说明

专为 PowerShell 设计的脚本可以包含一个或多个仅包含数据的 Data 节。 可以在任何脚本、函数或高级函数中包含一个或多个数据部分。 “数据”部分的内容仅限于 PowerShell 脚本语言的指定子集。

将数据与代码逻辑分离可以更轻松地识别和管理逻辑和数据。 它允许为文本提供单独的字符串资源文件,例如错误消息和帮助字符串。 它还隔离代码逻辑,从而促进安全性和验证测试。

在 PowerShell 中,Data 部分用于支持脚本国际化。 可以使用“数据”部分更轻松地隔离、定位和处理将转换为许多用户界面的字符串, (UI) 语言。

Data 部分是 PowerShell 2.0 功能。 在 PowerShell 1.0 中,没有修订,包含数据部分的脚本将不会运行。

语法

Data 部分的语法如下所示:

DATA [<variable-name>] [-supportedCommand <cmdlet-name>] {
    <Permitted content>
}

需要 Data 关键字。 此名称不区分大小写。 允许的内容仅限于以下元素:

  • -match

  • IfElseElseIf 语句

  • 以下自动变量:$PsCulture、、$PsUICulture$True$False$Null

  • 注释

  • 管道

  • 用分号 (;) 分隔的语句

  • 文本,例如:

    a
    1
    1,2,3
    "PowerShell 2.0"
    @( "red", "green", "blue" )
    @{ a = 0x1; b = "great"; c ="script" }
    [XML] @'
    <p> Hello, World </p>
    '@
    
  • Data 节中允许的 Cmdlet。 默认情况下,仅 ConvertFrom-StringData 允许 cmdlet。

  • 使用参数允许在 Data 节中允许的 -SupportedCommand Cmdlet。

在 Data 节中使用 ConvertFrom-StringData cmdlet 时,可以将键值对括在单引号或双引号字符串中,或用单引号或双引号的此处字符串括起来。 但是,包含变量和子表达式的字符串必须括在单引号字符串或单引号的此处字符串中,以便不会展开变量,并且子表达式不是可执行的。

-SupportedCommand

通过此参数 -SupportedCommand ,可以指示 cmdlet 或函数仅生成数据。 它旨在允许用户在已编写或测试的数据部分中包括 cmdlet 和函数。

值为 -SupportedCommand 一个或多个 cmdlet 或函数名称的逗号分隔列表。

例如,以下数据部分包括用户编写的 cmdlet, Format-XML用于格式化 XML 文件中的数据:

DATA -supportedCommand Format-Xml
{
    Format-Xml -Strings string1, string2, string3
}

使用数据部分

若要使用 Data 节的内容,请将其分配给变量,并使用变量表示法访问内容。

例如,以下数据部分包含将 ConvertFrom-StringData 此处字符串转换为哈希表的命令。 哈希表分配给 $TextMsgs 变量。

变量 $TextMsgs 不是数据部分的一部分。

$TextMsgs = DATA {
    ConvertFrom-StringData -StringData @'
Text001 = Windows 7
Text002 = Windows Server 2008 R2
'@
}

若要访问哈希表中 $TextMsgs的键和值,请使用以下命令。

$TextMsgs.Text001
$TextMsgs.Text002

或者,可以将变量名称放入 Data 节的定义中。 例如:

DATA TextMsgs {
    ConvertFrom-StringData -StringData @'
Text001 = Windows 7
Text002 = Windows Server 2008 R2
'@
}

$TextMsgs

结果与前面的示例相同。

Name                           Value
----                           -----
Text001                        Windows 7
Text002                        Windows Server 2008 R2

示例

简单数据字符串。

DATA {
    "Thank you for using my PowerShell Organize.pst script."
    "It is provided free of charge to the community."
    "I appreciate your comments and feedback."
}

包含允许变量的字符串。

DATA {
    if ($null) {
        "To get help for this cmdlet, type get-help new-dictionary."
    }
}

使用 ConvertFrom-StringData cmdlet 的单引号字符串:

DATA {
    ConvertFrom-StringData -stringdata @'
Text001 = Windows 7
Text002 = Windows Server 2008 R2
'@
}

使用 ConvertFrom-StringData cmdlet 的双引号此处字符串:

DATA  {
    ConvertFrom-StringData -stringdata @"
Msg1 = To start, press any key.
Msg2 = To exit, type "quit".
"@
}

包含生成数据的用户写入 cmdlet 的数据部分:

DATA -supportedCommand Format-XML {
    Format-Xml -strings string1, string2, string3
}

另请参阅

about_Automatic_Variables

about_Comparison_Operators

about_Hash_Tables

about_If

about_Operators

about_Quoting_Rules

about_Script_Internationalization

ConvertFrom-StringData

Import-LocalizedData