对于喜欢拿来主义的我们,看到这样的文章自然会汗颜,这与牛不牛无关,而关乎的是一个人对待技术的热情以及对待实践的态度。作为普通的脚本入门者,我达到目的即可罢休,很少会去关注性能问题,优化问题。
我们知道在PowerShell 中有好几种方式可以自定义对象:
- 借助Add-Member
$Object = New-Object PSObject $Object | Add-Member -MemberType NoteProperty -Name Name -Value Boe -PassThru | Add-Member -MemberType NoteProperty -Name Number -Value 1 -PassThru | Add-Member -MemberType NoteProperty -Name ID -Value 007 -PassThru
- 使用Select-Object
$Object = '' | Select-Object Name, Number, ID $Object.Name = 'Boe' $Object.Number = 1 $Object.ID = 007
- 初始化PSObject
New-Object PSObject -Property @{ Name = 'Boe' Number = 1 ID = 007 }
- 初始化OrderedPSObject
New-Object pscustomobject -Property([ordered]@{ Name= 'Boe' Number = 1 ID = 007 })
- 使用[pscustomobject]强制类型转换
[pscustomobject]@{ Name= 'Boe' Number = 1 ID = 007 }
- 使用[pscustomobject][ordered]强制类型转换
[pscustomobject][ordered]@{ Name= 'Boe' Number = 1 ID = 007 }
为了比较这几种方法的性能,Boe Prox可谓是绞尽脑汁,劳苦功高。它专门写了一个脚本Start-CustomObjectPerformanceTest.ps1。我们先看看一张脚本执行效果图:
同时非常辛苦地在Excel表格中给对数据手动处理,并绘制出了几张图表。
问题已经很明显了,为了更加明显,这一次,我们把时间纵坐标固定住,再看一次:
尽管在测试过程中,可能会有有网络,机器性能等方面的误差。但是至此为止,PowerShell自定义对象用哪个方法好,相信你我已了然于胸。
最后再次感谢Boe Prox!
本文引用自:Custom PowerShell Objects and Performance Revisited
本文链接: https://www.pstips.net/performance-of-custom-psobject.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
广播: PowerShell 使用New-Module命令动态创建对象 | PowerShell 中文博客
[pscustomobject] 最好是吧?
是的,不过,除了add-member太慢以外,其它的都差不多吧。