What is the Linq.First equivalent in PowerShell?

as Robert Groves said, Select-Object -First Occurence do the tricks, you can also use -Last Occurence.

by the way, like any other static .Net method you can use linq in powershell.

[Linq.Enumerable]::First($list)

[Linq.Enumerable]::Distinct($list)

[Linq.Enumerable]::Where($list, [Func[int,bool]]{ param($item) $item -gt 1 })

Something like this...

$files = @("App_Data", "bin", "Content")
$line = "drwxr-xr-x 1 ftp ftp              0 Mar 18 22:41 App_Data"
$dir = $files | Where { $line.EndsWith($_) } | Select -First 1

These versions of the last line would all accomplish the same:

$dir = @($files | Where { $line.EndsWith($_) })[0]

$dir = $files | Where { $line.EndsWith($_) } | Select -index 0

$dir = $files | Where { $line.EndsWith($_) } | Select -First 1

It was pointed out that the above is not exactly equivalent in behavior to Linq.First because Linq.First throws exceptions in two cases:

  • Throws ArgumentNullException when source or predicate is null.
  • Throws InvalidOperationException when source sequence is empty or no element satisfies the condition in predicate.

If you wanted that behavior exactly, you'd need some extra guard code.