zhendeaini123 发表于 2018-9-2 09:36:52

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=@{"Count"=$null;"Gift"=$null}
  
$obj=New-Object -TypeName psobject -property $pp
  
$result=@()
  
$list.Split("`n") |ForEach-Object{
  
$temp=$obj | select *
  
$temp.Count=$_.Split("")
  
$temp.Gift=$_.Substring($_.Split("").Length)
  
$result+=$temp
  
}
  
$result

  后来改进了一下,不需要在循环外定义,直接在循环里面就可以创建哈希表并强制转换了
$result2=@()  
$list -split "`n" | foreach {
  
$split =$_ -split " ",2
  
$temp=@{Count=$split;Item = $split.trim()}
  
$result2+=$temp
  
}
  
$result2

  再后来,发现还可以更精简一下
$gifts = $list -split "`n" | foreach {  
$split =$_ -split " ",2
  
@{Count=$split;Item = $split.trim()}
  
}
  
$gifts

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


页: [1]
查看完整版本: Powershell 自定义对象小技巧