ConvertFrom-String

从字符串内容中提取和分析结构化属性。

语法

PowerShell
ConvertFrom-String
                [-Delimiter <String>]
                [-PropertyNames <String[]>]
                [-InputObject] <String>
                [<CommonParameters>]
PowerShell
ConvertFrom-String
                [-TemplateFile <String[]>]
                [-TemplateContent <String[]>]
                [-IncludeExtent]
                [-UpdateTemplate]
                [-InputObject] <String>
                [<CommonParameters>]

说明

ConvertFrom-String cmdlet 从字符串内容中提取和分析结构化属性。 此 cmdlet 通过分析传统文本流中的文本来生成对象。 对于管道中的每个字符串,该 cmdlet 通过分隔符或分析表达式拆分输入,然后将属性名称分配给每个生成的拆分元素。 可以提供这些属性名称;如果不这样做,系统会为你自动生成它们。

cmdlet 的默认参数集(ByDelimiter)完全拆分正则表达式分隔符。 它不执行引号匹配或分隔符转义,就像 Import-Csv cmdlet 一样。

cmdlet 的备用参数集(TemplateParsing)从正则表达式捕获的组中生成元素。 有关正则表达式的详细信息,请参阅 about_Regular_Expressions

此 cmdlet 支持两种模式:基本分隔分析,以及自动生成的示例驱动分析。

默认情况下,分隔分析将拆分空白处的输入,并将属性名称分配给生成的组。

可以通过将 ConvertFrom-String 结果管道到其中一个 Format-* cmdlet 来自定义分隔符,也可以使用 分隔符 参数。

该 cmdlet 还支持基于 FlashExtract 自动生成的示例驱动分析,Microsoft Research的研究工作。

示例

示例 1:生成具有默认属性名称的对象

PowerShell
"Hello World" | ConvertFrom-String

P1    P2
--    --
Hello World

此命令生成一个具有默认属性名称、P1P2的对象。

示例 1A:了解生成的对象

此命令生成一个属性 P1的对象,P2;默认情况下,这两个属性 字符串 类型。

PowerShell
"Hello World" | ConvertFrom-String | Get-Member

TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
P1          NoteProperty string P1=Hello
P2          NoteProperty string P2=World

示例 2:使用分隔符生成具有默认属性名称的对象

此命令使用反斜杠(\)作为分隔符生成具有域和用户名的对象。 使用正则表达式时,必须使用另一个反斜杠转义反斜杠字符。

PowerShell
"Contoso\Administrator" | ConvertFrom-String -Delimiter "\\"

P1      P2
--      --
Contoso Administrator

示例 3:生成包含两个命名属性的对象

以下示例从 Windows 主机文件条目创建对象。

PowerShell
$content = Get-Content C:\Windows\System32\drivers\etc\hosts
$content = $content -match "^[^#]"
$content | ConvertFrom-String -PropertyNames IP, Server

IP             Server
--             ------
192.168.7.10   W2012R2
192.168.7.20   W2016
192.168.7.101  WIN8
192.168.7.102  WIN10

Get-Content cmdlet 将 Windows 主机文件的内容存储在 $content中。 第二个命令使用与不以 (#) 开头的任何行匹配的正则表达式删除主机文件开头的任何注释。 最后一个命令使用 服务器IP 属性将其余文本转换为对象。

示例 4:使用表达式作为 TemplateContent 参数的值,将结果保存在变量中。

此命令使用表达式作为 TemplateContent 参数的值。 为了简单起见,表达式保存在变量中。 Windows PowerShell 现在了解管道上使用的字符串 ConvertFrom-String 具有三个属性:

  • 名称
  • 手机
  • 年龄
PowerShell
$template = @'
{Name*:Phoebe Cat}, {phone:425-123-6789}, {age:6}
{Name*:Lucky Shot}, {phone:(206) 987-4321}, {age:12}
'@

$testText = @'
Phoebe Cat, 425-123-6789, 6
Lucky Shot, (206) 987-4321, 12
Elephant Wise, 425-888-7766, 87
Wild Shrimp, (111)  222-3333, 1
'@

$PersonalData = $testText | ConvertFrom-String -TemplateContent $template
Write-output ("Pet items found: " + ($PersonalData.Count))
$PersonalData

Pet items found: 4

Name          phone           age
----          -----           ---
Phoebe Cat    425-123-6789    6
Lucky Shot    (206) 987-4321  12
Elephant Wise 425-888-7766    87
Wild Shrimp   (111)  222-3333 1

输入中的每个行都由示例匹配项计算。 如果行与模式中给出的示例匹配,则提取值并将其传递给输出变量。

示例数据 $template提供两种不同的手机格式:

  • 425-123-6789
  • (206) 987-4321

示例数据还提供两种不同的年龄格式:

  • 6
  • 12

这意味着无法识别像 (206) 987 4321 这样的手机,因为没有匹配该模式的示例数据,因为没有连字符。

示例 5:指定生成的属性的数据类型

此示例与上面的示例 4 相同。 区别在于模式字符串包含每个所需属性的数据类型。

PowerShell
$template = @'
{[string]Name*:Phoebe Cat}, {[string]phone:425-123-6789}, {[int]age:6}
{[string]Name*:Lucky Shot}, {[string]phone:(206) 987-4321}, {[int]age:12}
'@

$testText = @'
Phoebe Cat, 425-123-6789, 6
Lucky Shot, (206) 987-4321, 12
Elephant Wise, 425-888-7766, 87
Wild Shrimp, (111)  222-3333, 1
'@

$PersonalData = $testText | ConvertFrom-String -TemplateContent $template
Write-output ("Pet items found: " + ($PersonalData.Count))
$PersonalData

Pet items found: 4

Name          phone           age
----          -----           ---
Phoebe Cat    425-123-6789      6
Lucky Shot    (206) 987-4321   12
Elephant Wise 425-888-7766     87
Wild Shrimp   (111)  222-3333   1

$PersonalData | Get-Member

TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
age         NoteProperty int age=6
Name        NoteProperty string Name=Phoebe Cat
phone       NoteProperty string phone=425-123-6789

Get-Member cmdlet 用于显示 年龄 属性为整数。

参数

-Delimiter

指定标识元素之间的边界的正则表达式。 拆分创建的元素将成为生成的对象中的属性。 分隔符最终用于调用类型 [System.Text.RegularExpressions.RegularExpression]Split 方法。

类型:String
别名:DEL
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-IncludeExtent

指示此 cmdlet 包含默认删除的盘区文本属性。

类型:SwitchParameter
别名:IE
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-InputObject

指定从管道接收的字符串,或包含字符串对象的变量。

类型:String
Position:0
默认值:None
必需:True
接受管道输入:True
接受通配符:False

-PropertyNames

指定要在生成的对象中分配拆分值的属性名称数组。 拆分或分析的每一行文本都会生成表示属性值的元素。 如果元素是捕获组的结果,并且该捕获组命名(例如,(?<name>)(?'name')),则将该捕获组的名称分配给该属性。

如果提供 PropertyName 数组中的任何元素,则这些名称将分配给尚未命名的属性。

如果提供的属性名称多于字段,PowerShell 将忽略额外的属性名称。 如果未指定足够的属性名称来命名所有字段,PowerShell 会自动将数值属性名称分配给未命名的任何属性:P1P2等。

类型:String[]
别名:PN
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-TemplateContent

指定一个表达式或一个保存为变量的表达式,该表达式描述此 cmdlet 向其分配字符串的属性。 模板字段规范的语法如下:{[optional-typecast]<name>:<example-value>}

类型:String[]
别名:TC
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-TemplateFile

将文件指定为数组,其中包含字符串所需分析的模板。 在模板文件中,属性及其值括在括号中,如下所示。 如果属性(如 Name 属性及其关联的其他属性)显示多次,则可以添加星号(*)以指示这会导致多个记录。 这可以避免将多个属性提取到单个记录中。

{Name*:D avid Chew}{City:Redmond}, {State:WA} {Name*:Evan Narvaez} {Name*:Antonio Moreno} {City:Issaquah}, {State:WA}

类型:String[]
别名:TF
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-UpdateTemplate

指示此 cmdlet 将学习算法的结果保存到模板文件中的注释中。 这使得算法学习过程更快。 若要使用此参数,还必须使用 TemplateFile 参数指定模板文件。

类型:SwitchParameter
别名:UT
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

输入

String

输出

PSCustomObject

备注

Windows PowerShell 包含以下 ConvertFrom-String别名:

  • CFS