使用PowerShell 5轻松分析字符串

日期: 2016-01-14 作者:Adam Bertram翻译:邹雅玲 来源:TechTarget中国 英文

PowerShell与其他Shell语言相比,其优势在于处理对象的能力。在PowerShell中,任何一件事情都可视为一个对象。这种对象通过多种性能和方法、以机构形式呈现信息。 然而,并不是每一件事情都是结构化对象。

管理人员会遇到几次不得不处理非结构化数据的时候,例如遗留程序所输出的大字符串。管理人员不得不将这类数据转换成某种结构化形式。 管理人员会青睐于微软Powershell 5中所包含的许多新功能,尤其是喜欢处理非结构化数据的功能。最为人熟知的是ConvertFrom-String命令,明显地减少了非结构化字符串转为对象的转换时间。

最初,微软研究院为完成FlashExtract项目而开……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

PowerShell与其他Shell语言相比,其优势在于处理对象的能力。在PowerShell中,任何一件事情都可视为一个对象。这种对象通过多种性能和方法、以机构形式呈现信息。

然而,并不是每一件事情都是结构化对象。管理人员会遇到几次不得不处理非结构化数据的时候,例如遗留程序所输出的大字符串。管理人员不得不将这类数据转换成某种结构化形式。

管理人员会青睐于微软Powershell 5中所包含的许多新功能,尤其是喜欢处理非结构化数据的功能。最为人熟知的是ConvertFrom-String命令,明显地减少了非结构化字符串转为对象的转换时间。

最初,微软研究院为完成FlashExtract项目而开发了ConvertFrom-String命令,通过一种分隔符或者样板,而分析字符串并将其转换为非结构化字符串。接下来让我们首次谈谈 ConvertFrom-String是如何使用分隔符分析并将字符串转化成结构化对象的。

使用定界符参数

通过使用分隔符参数,我们可以选定一个正则表达式,将字符串分隔成多个元素。例如,有一串由不同字母所组成的字符串,被分隔在两个空间中。你可以使用双空间分隔符来检测工作群组,并使用字符串作为ConvertFrom-String命令的输入信息。

以上图片为例,使用分隔符参数分离非结构化字符

以上图片为例,使用分隔符参数分离非结构化字符

你可以看出,PowerShell输出了三个属性对象,分别为P1、P2 和P3。从这一点来看,必要时,你可以使用这些属性对象。然而,P1、P2 和P3并不能直观的展现其所表达的数据。为这些属性附加一些标签后,你便可以使用PropertyNames参数来更好地进行描述,如Group 1、Group 2和Group 3。

尽管这是一个不错的功能,但是PowerShell 5通过ConvertFrom-StringData也可以具备同样的功能。更有趣的是,ConvertFrom-String组件可以分析样本字符串。

ConvertFrom-String命令样本分隔符的工作原理是,供应字符串模板某些特定图案。通过这种模式,该命令可以解读字符串结构,可以更好地做出分析决策。例如,包含如下文本的文件:

Name: Craig Trudeau

Name: Merle Baldridge

Name: Adam Bertram

Name: George Lucas

你可以通过一个指定模板,告知ConvertFrom-String命令第一个名称和第二个名称的位置,例如:

Name:{FirstName*:Adam} {LastName:Bertram}

Name:{FirstName*:Merdfdfle} {LastName:Baldfdfd}

FirstName和LastName会产生四个属性。

以上图片为使用模板说明第一个名称和最后一个名称时,所输出的内容

以上图片为使用模板说明第一个名称和最后一个名称时,所输出的内容。


通过分析两个实例,该命令也可以决定如何分析其他实例。

每行都要以“Name:”为开始,但是,我却并不情愿使用这种形式,因此,我必须将其收藏到模板中。“Name:”可以表示为ConvertFrom-String命令的一串属性。接下来,你可以看到由花括号所区分的几个组别,这表明,无论花括号内被认为是哪种形式,终将是你期望输出的内容。这一次,我不必使用 PropertyNames参数就可以有序地输入所需内容。我可以详细说明样本内各属性名称。同时,如果字符串包含了与样本匹配的多种表达,那么我就必须使用星号加以区分。星号是新组别的开始标识。

我所使用的模板字符串与数据中的其他命名方式都不一样,你仅仅需要需要表达出字符串看起来是什么样子的即可。该命令将会自动计算出剩余的部门。想要测试效果,你可以发现下面的代码库,用之构建一个文本文件、读写到存储器中,然后用ConvertFrom-String进行分析。

上图为命令分析案例,这段代码编写了一个文本文件,之后用ConvertFrom-String进行了结构分析。

上图为命令分析案例,这段代码编写了一个文本文件,之后用ConvertFrom-String进行了结构分析

工作中与许多复杂的数据集合打交道,那么,你势必将需要做一些修补工作。而如果你可以正确地提供模板结构,那么,该命令便可分析任何类型的字符串。想要咨询其他实例,并期望了解如何使用该命令进行更深入分析,你可以搜索一下Stephen Owen所写的关于 ConvertFrom-String高级解析的博客。

作者

Adam Bertram
Adam Bertram

自由撰稿人

相关推荐