2013-08-02 6 views
2

Я пытаюсь сопоставить букву диска, используя эту строку кода, которая даст мне список дисков, доступных от d до z.Выберите последний элемент из списка в Powershell

ls function:[d-z]: -n|?{!(test-path $_)} 

Я бы хотел выбрать последнее письмо, а не случайное, из списка. Как мне это сделать? Новое в Powershell, спасибо за помощь.

ответ

6

Вы можете использовать Select-Object -Last 1 в конце этого трубопровода.

+0

Спасибо, что отлично работает! – Nimjox

2

Попробуйте это:

ls function:[d-z]: -n|?{!(test-path $_)} | Select-Object -Last 1 
2

Другой вариант, который не требует перебора всех путей от D-Z является для разбора Get-Psdrive. Вот пример:

$lettersInUse = Get-Psdrive | ? { $_.Name.Length -eq 1 } | % { $_.Name } 
$lastDriveLetter = [Char]'Z' 
while ($lettersInUse -contains $lastDriveLetter) { 
    $lastDriveLetter = [Char]($lastDriveLetter - 1) 
} 
$lastDriveLetter 
4

Если вы посмотрите на гораздо более многословен, но (на мой взгляд) читаемым улучшенная версия:

# Get all drives which are used (unavailable) 
# Filter for the "Name" property ==> Drive letter 
$Drives = (Get-PSDrive -PSProvider FileSystem).Name 

# Create an array of D to Z 
# Haven't found a more elegant version... 
$Letters = [char[]]([char]'D'..[char]'Z') 

# Filter out, which $Letters are not in $Drives (<=) 
# Again, filter for their letter 
$Available = (Compare-Object -ReferenceObject $Letters -DifferenceObject $Drives | Where {$_.SideIndicator -eq "<="}).InputObject 

# Get the last letter 
$LastLetter = $Available[-1] 
+2

Мне это нравится: '$ letters = 69..90 | % {[char] $ _} ' –

+2

@ C.B .: Это намного проще сделать с помощью' [char []] (69..90) '. Не нужно перетаскивать конвейер в простой состав. – Joey

+0

@ Јοеу Спасибо! Я нашел что-то, что мне больше нравится;) –

Смежные вопросы