2009-11-02 7 views
27

Mam wiele woluminów (jak prawie każdy dzisiaj): w systemie Windows są one określone jako C :, D: i tak dalej. Jak mogę wyświetlić te wszystkie listy na komputerze Unix z "ls/mnt /" z Powershell?Lista wszystkich urządzeń, partycji i woluminów w Powershell

+0

get-psdrive powróci ten nazwie głównej Dostawcy CurrentLocation ---- -------- ---- ---- ----------- A System plików A: Alias ​​Alias ​​ C System plików C: \ scripts – streetparade

Odpowiedz

46

Aby uzyskać wszystkie dyski systemu plików, można użyć następującego polecenia:

gdr -PSProvider 'FileSystem' 

gdr jest aliasem dla Get-PSDrive, która obejmuje wszystkie „wirtualnych napędów” dla rejestru itp

+0

Cholera, jesteś szybszy ode mnie :-) – streetparade

+1

Pamiętaj, że można to skrócić do 'Get-PSDrive -PSProvider ' FileSystem''. Uważam, że '| Where-Object' jest bardzo powolny w wielu przypadkach. –

+1

@ BakonBits Zaktualizowałem swoją odpowiedź, aby odzwierciedlić Twoją lepszą opcję. Dla potomności początkowo miałem 'gdr | where {$ _. Provider.Name -eq "FileSystem"} ' – bdukes

4

Po pierwsze, na Uniksie używasz mount, a nie ls /mnt: wiele rzeczy nie jest zamontowanych w /mnt.

W każdym razie istnieje polecenie DOS mountvol, które nadal działa w trybie Powershell, a ponadto jest to specyfikacja Powershell Get-PSDrive. Funkcja

0

alt text

PS:>get-psdrive

+0

To fajna konfiguracja podpowiedzi. Czy mógłbyś podzielić się z tym szczegółami? – wishi

7

W Windows PowerShell:

Get-PSDrive 
[System.IO.DriveInfo]::getdrives() 
wmic diskdrive 
wmic volume 

Również dskwipe użyteczność: http://smithii.com/dskwipe

dskwipe.exe -l 
+0

Aby dodać tag, można również dołączyć flagę z innej odpowiedzi '-PSProvider: 'FileSystem'', która wyświetla tylko systemy plików. – Pred

1

To jest pr Etty stary, ale uważam, że warto zauważyć następujące:

PS N:\> (measure-command {Get-WmiObject -Class Win32_LogicalDisk|select -property deviceid|%{$_.deviceid}|out-host}).totalmilliseconds 
... 
928.7403 
PS N:\> (measure-command {gdr -psprovider 'filesystem'|%{$_.name}|out-host}).totalmilliseconds 
... 
169.474 

Bez właściwości filtrowania, w moim systemie testowym 4319.4196ms do 1777.7237ms. Jeśli nie potrzebuję zwrócenia obiektu PS-Drive, pozostanę przy WMI.

EDIT: Myślę, że mamy zwycięzcę: PS N:> (środek-komendę {. [System.IO.DriveInfo] :: getdrives() |% {$ _ name} |} out-gospodarz) .Aby talmilliseconds 110,9819

5

Get-Volume

dostaniesz: LiteraDysku, FileSystemLabel, FileSystem, DriveType, HealthStatus, SizeRemaining i rozmiar

+0

Get-Volume wydaje się być dostępny tylko na Windows-Server 2012 i Windows-Server 2016. – Bram

+0

Get-Tom pracował dla mnie z systemem Power Shell 5.1. Być może stworzyli ten standard w ostatnich latach/najnowsze aktualizacje. Ta odpowiedź powinna zwrócić większą uwagę. –

1

Choć nie jest to 'PowerShell' specyficzny .. możesz łatwo wymienić dyski i partycje używając diskpart, lista woluminów

PS C:\Dev> diskpart 

Microsoft DiskPart version 6.1.7601 
Copyright (C) 1999-2008 Microsoft Corporation. 
On computer: Box 

DISKPART> list volume 

Volume ### Ltr Label  Fs  Type  Size  Status  Info 
---------- --- ----------- ----- ---------- ------- --------- -------- 
Volume 0  D      DVD-ROM   0 B No Media 
Volume 1   C = System NTFS Partition 100 MB Healthy System 
Volume 2  G C = Box  NTFS Partition 244 GB Healthy Boot 
Volume 3  H D = Data  NTFS Partition 687 GB Healthy 
Volume 4  E System Rese NTFS Partition 100 MB Healthy 
+1

czy możliwe jest uzyskanie Volume ## za pomocą powershell? (Dla Windows 7) – Chand

0

Mamy wiele woluminów na dysk (niektóre są zamontowane na podkatalogach na dysku). Ten kod pokazuje listę punktów podłączenia i etykiet woluminów. Oczywiście można także wyodrębnić wolnego miejsca i tak dalej:

gwmi win32_volume|where-object {$_.filesystem -match "ntfs"}|sort {$_.name} |foreach-object { 
    echo "$(echo $_.name) [$(echo $_.label)]" 
}