I want to select the second/third/forth object of a Get-ChildItem
statement in my PowerShell script. This gives me the first:
$first = Get-ChildItem -Path $dir |
Sort-Object CreationTime -Descending |
Select-Object -First 1
This gives me the first three:
$latest = Get-ChildItem -Path $dir |
Sort-Object CreationTime -Descending |
Select-Object -First 3
I would like to get the second, or the third, or the fourth. (NOT the first two and so on).
Is there a way?
For selecting the n-th element skip over the first n-1 elements:
$third = Get-ChildItem -Path $dir |
Sort-Object CreationTime -Descending |
Select-Object -Skip 2 |
Select-Object -First 1
or select the first n and then of those the last element:
$third = Get-ChildItem -Path $dir |
Sort-Object CreationTime -Descending |
Select-Object -First 3 |
Select-Object -Last 1
Beware, though, that the two approaches will yield different results if the input has less than n elements. The first approach would return $null
in that scenario, whereas the second approach would return the last available element. Depending on your requirements you may need to choose one or the other.
The second approach suggested by @AnsgarWiechers can easily be turned into a simple reusable funtion, like so:
function Select-Nth {
param([int]$N)
$Input | Select-Object -First $N | Select-Object -Last 1
}
And then
PS C:\> 1,2,3,4,5 |Select-Nth 3
3
You could also access the element as an array item, using the index n-1. This seems more succinct than chaining pipes.
$third = (Get-ChildItem -Path $dir | Sort-Object CreationTime -Descending)[2]
First Item
gci > out.txt
Get-Content out.txt | Select -Index 7 | Format-list
Second Item
gci > out.txt
Get-Content out.txt | Select -Index 8 | Format-list
The item between n and p
$n=3
$p=7
$count = 0
$index = $n+7
$p=7+7
while($true){
$index = $index + $count
Get-Content out.txt | Select -Index $index | Format-list
if($index -eq $p)
{
break;
}
$count = $count + 1
}
Note : The first seven lines are empty and the description lines.
来源:https://stackoverflow.com/questions/31831470/select-second-or-third-object-element