Powershell 自定义对象小技巧

豆子之前在脚本里面自定义对象的时候一般是这么考虑的,我需要创建一个数组,每次循环的时候把一个自定义的对象放进去,对于这个自定义的对象的结构,我需要创建一个哈希表,然后转换成自定义对象。这个思路是没错,不过具体写的时候有些小技巧。


比如说最近看的一个小挑战,其中需要把下面这个$list的值自定义一个对象保存出来。

$list = @"
1 Partridge in a pear tree
2 Turtle Doves
3 French Hens
4 Calling Birds
5 Golden Rings
6 Geese a laying
7 Swans a swimming
8 Maids a milking
9 Ladies dancing
10 Lords a leaping
11 Pipers piping
12 Drummers drumming
"@


我写的第一个版本是最啰嗦的:

$pp=$null
$pp=[ordered]@{"Count"=$null;"Gift"=$null}
$obj=New-Object -TypeName psobject -property $pp
$result=@()
$list.Split("`n") |ForEach-Object{
$temp=$obj | select *
$temp.Count=$_.Split("")[0] 
$temp.Gift=$_.Substring($_.Split("")[0].Length)
$result+=$temp
}
$result

wKioL1ahWrXR61RLAAAaQ1CO79g963.png


后来改进了一下,不需要在循环外定义,直接在循环里面就可以创建哈希表并强制转换了

$result2=@()
$list -split "`n" | foreach {
$split =  $_ -split " ",2
$temp=[pscustomobject]@{Count=$split[0];Item = $split[1].trim()}
$result2+=$temp
}
$result2

wKiom1ahWn-y1lSbAAAaeA1kPXY289.png


再后来,发现还可以更精简一下

$gifts = $list -split "`n" | foreach {
$split =  $_ -split " ",2
[pscustomobject]@{Count=$split[0];Item = $split[1].trim()}
}
$gifts

wKioL1ahWsaiJfSjAAAb4zb9nuc672.png


注意第一个方式是PS 2.0时代的写法,进入3.0以后就可以使用后面两张简单的写法了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值