30

首先,我是 .NET 开发人员,喜欢 C# 中的 LINQ 和扩展方法。但是当我编写脚本时,我需要类似于Enumerable 扩展方法的东西

任何人都可以给我任何建议/解释有关如何在 Powershell 中的这种情况下工作的最佳实践。例如,假设我想从数组中获取最大元素:

$arr = @(2, 1, 3)
$max = $arr.MAX() #?? what should i do in this case?
4

3 回答 3

43

使用Measure-Object命令:

C:\PS> 2,1,3 | Measure-Object -Maximum


Count    : 3
Average  :
Sum      :
Maximum  : 3
Minimum  :
Property :

或仅获得最大值:

C:\PS> (2,1,3 | Measure -Max).Maximum

从上面可以看到,还有可用的最小值、平均值和总和。但是您必须告诉 PowerShell 计算带有 Measure-Object 参数的参数,例如 -Sum -Average 等。

于 2013-10-03T23:27:32.227 回答
13

Keith 正确地提到了某些 LINQ 扩展方法的 PowerShell 等效项。请注意,您可以从 PowerShell 调用大多数扩展方法,只是不能像成员一样调用它们。

扩展方法实际上只是静态方法,在 C# 中有一些额外的规则,允许它们像成员一样被调用。

PowerShell 没有实现任何这些规则,但这并不能阻止您将它们作为静态方法调用,例如

[System.Linq.Enumerable]::Average([int[]](1..10))
于 2013-10-04T05:52:36.613 回答
1

$arr | foreach { if($max -lt $_ ) {$max = $_ }};$max

于 2017-03-13T13:22:25.540 回答