2009-11-02 9 views
27

J'ai plusieurs volumes (comme presque tout le monde de nos jours): sur Windows, ils sont spécifiés comme C :, D: et ainsi de suite. Comment puis-je les lister tous sur une machine Unix avec "ls/mnt /" avec Powershell?Liste tous les périphériques, partitions et volumes dans Powershell

+0

get-psdrive retournera ce Nom fournisseur racine CurrentLocation ---- -------- ---- ---- ----------- Un FileSystem A: Alias ​​Alias ​​ C FileSystem C: \ scripts – streetparade

Répondre

46

Pour obtenir tous les lecteurs de système de fichiers, vous pouvez utiliser la commande suivante:

gdr -PSProvider 'FileSystem' 

gdr est un alias pour Get-PSDrive, qui inclut tous les « lecteurs virtuels » pour le registre, etc.

+0

damn vous étiez plus rapide que moi :-) – streetparade

+1

Notez que cela pourrait être raccourci à Get-PSDrive -PSProvider FileSystem''. Je trouve que '| Where-Object' est extrêmement lent dans de nombreux cas. –

+1

@BaconBits J'ai mis à jour ma réponse pour refléter votre meilleure option. Pour la postérité, j'avais à l'origine 'gdr | où {$ _. Provider.Name -eq "FileSystem"} ' – bdukes

4

Tout d'abord, sous Unix, vous utilisez mount, et non ls /mnt: beaucoup de choses ne sont pas montées dans /mnt.

De toute façon, il y a la commande DOS mountvol, qui continue de fonctionner dans Powershell, et il y a le Get-PSDrive spécifique à Powershell.

0

alt text

PS Fonction:>get-psdrive

+0

C'est une bonne configuration pour l'invite. Pourriez-vous partager les détails de cela? – wishi

7

Sous Windows Powershell:

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

également le dskwipe utilitaire: http://smithii.com/dskwipe

dskwipe.exe -l 
+0

Pour marquer, vous pouvez également inclure un indicateur provenant d'une autre réponse '-PSProvider: 'FileSystem'' pour n'afficher que les systèmes de fichiers. – Pred

1

C'est pr Etty vieux, mais je l'ai trouvé intéressant de noter suivante:

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 

Sans propriétés de filtrage, sur mon système de test, 4319.4196ms à 1777.7237ms. Sauf si j'ai besoin d'un objet PS-Drive retourné, je m'en tiendrai à WMI.

EDIT: Je pense que nous avons un gagnant: PS N:> (mesure-commande {. [System.IO.DriveInfo] :: getdrives() |% {$ _ name} | out-hôte}) .à talmilliseconds 110,9819

5

Get-Volume

vous obtiendrez: DriveLetter, FileSystemLabel, FileSystem, DriveType, HealthStatus, SizeRemaining et Taille

+0

Get-Volume semble être disponible uniquement sur Windows-Server 2012 et Windows-Server 2016. – Bram

+0

Get-Volume a fonctionné pour moi sous PowerShell 5.1. Peut-être qu'ils ont fait cette norme au cours des dernières années/mises à jour récentes. Cette réponse devrait attirer plus d'attention. –

1

Bien que ce n'est pas 'powershell' spécifique .. Vous pouvez facilement lister les disques et les partitions en utilisant diskpart, le volume de la liste

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

est-il possible d'obtenir Volume ## en utilisant powershell? (Pour Windows 7) – Chand

0

Nous avons plusieurs volumes par lecteur (certains sont montés dans des sous-répertoires sur le lecteur). Ce code affiche une liste des points de montage et des étiquettes de volume. De toute évidence, vous pouvez également extraire l'espace libre et ainsi de suite:

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