Powershell 自定义对象小技巧
豆子之前在脚本里面自定义对象的时候一般是这么考虑的,我需要创建一个数组,每次循环的时候把一个自定义的对象放进去,对于这个自定义的对象的结构,我需要创建一个哈希表,然后转换成自定义对象。这个思路是没错,不过具体写的时候有些小技巧。
比如说最近看的一个小挑战,其中需要把下面这个$list的值自定义一个对象保存出来。
$list=@"1Partridgeinapeartree2TurtleDoves3FrenchHens4CallingBirds5GoldenRings6Geesealaying7Swansaswimming8Maidsamilking9Ladiesdancing10Lordsaleaping11Piperspiping12Drummersdrumming"@
我写的第一个版本是最啰嗦的:
$pp=$null$pp=[ordered]@{"Count"=$null;"Gift"=$null}$obj=New-Object-TypeNamepsobject-property$pp$result=@()$list.Split("`n")|ForEach-Object{$temp=$obj|select*$temp.Count=$_.Split("")[0]$temp.Gift=$_.Substring($_.Split("")[0].Length)$result+=$temp}$result
后来改进了一下,不需要在循环外定义,直接在循环里面就可以创建哈希表并强制转换了
$result2=@()$list-split"`n"|foreach{$split=$_-split"",2$temp=[pscustomobject]@{Count=$split[0];Item=$split[1].trim()}$result2+=$temp}$result2
再后来,发现还可以更精简一下
$gifts=$list-split"`n"|foreach{$split=$_-split"",2[pscustomobject]@{Count=$split[0];Item=$split[1].trim()}}$gifts
注意第一个方式是PS 2.0时代的写法,进入3.0以后就可以使用后面两张简单的写法了。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。