PSCustomObject和重载方法在哪里

时间:2016-04-03 23:35:44

标签: string powershell

我正在探索PSCustomObject并且PowerShell ISE自动完成向我展示了一些我似乎无法找到更多信息的有趣内容。

如果你有一个包含PSCustomObject的变量,似乎有一个不容易找到的过滤方法。

这种过滤方法是否比使用管道和Where-Object

更快
$CusomObject.Where({$_ -like '*hidden*'})

使用$CustomObject | Get-Member -Force不会列出此重载。我发现reference to this overload here但在我的搜索中似乎找不到多少用途。

enter image description here

1 个答案:

答案 0 :(得分:0)

这似乎只是执行一个脚本块并确认返回为True。从有限的测试中,PS对象上的Where更快(~1秒)。注意:Stopwatch可能不准确。 Where-Object具有文档并且比ForEach-Object执行得更快。 BeWhere PSv4中存在错误。

脚本块

write-host "Started at $(get-date)"
$j = $i.Where({$_ -like "*"})
write-host "Ended at $(get-date)"
write-host "Total Elapsed Time: $($elapsed.Elapsed.ToString())"

00:00:00.0309266

ForEach-Object

$elapsed = [System.Diagnostics.Stopwatch]::StartNew()
write-host "Started at $(get-date)"
$j = $i | %{$_ -like "*"}
write-host "Ended at $(get-date)"
write-host "Total Elapsed Time: $($elapsed.Elapsed.ToString())"

00:00:01.0555753

Where-Object

$elapsed = [System.Diagnostics.Stopwatch]::StartNew()
write-host "Started at $(get-date)"
$j = $i | ?{$_ -like "*"}
write-host "Ended at $(get-date)"
write-host "Total Elapsed Time: $($elapsed.Elapsed.ToString())"

00:00:00.0348174

相关问题