The snippet below detects from a list of files which of them is a Directory on Ftp
as C# it will be like below
var files = new List<string>(){"App_Data", "bin", "Content"}; var line = "drwxr-xr-x 1 ftp ftp 0 Mar 18 22:41 App_Data" var dir = files.First(x => line.EndsWith(x));
How I can transalte the last line in PowerShell ?
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:
If you wanted that behavior exactly, you'd need some extra guard code.
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 })
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With