2009-11-02 14 views
27

Tengo varios volúmenes (como casi todo el mundo hoy en día): en Windows terminan especificados como C :, D: y así sucesivamente. ¿Cómo enumero todo esto como en una máquina Unix con "ls/mnt /" con Powershell?Enumerar todos los dispositivos, particiones y volúmenes en Powershell

+0

get-psdrive volverá este nombre raíz Proveedor CurrentLocation ---- -------- ---- ---- ----------- A FileSystem A: Alias ​​Alias ​​ C FileSystem C: \ scripts – streetparade

Respuesta

46

Para obtener todas las unidades del sistema de archivos, puede utilizar el siguiente comando:

gdr -PSProvider 'FileSystem' 

gdr es un alias para Get-PSDrive, que incluye todas las unidades "virtuales" para el registro, etc.

+0

maldito eres más rápido que yo :-) – streetparade

+1

Ten en cuenta que esto podría acortarse a 'Get-PSDrive -PSProvider ' FileSystem''. Me parece que '| Where-Object' es extremadamente lento en muchos casos. –

+1

@BaconBits He actualizado mi respuesta para reflejar su mejor opción. Para la posteridad, originalmente tenía 'gdr | donde {$ _. Provider.Name -eq "FileSystem"} ' – bdukes

4

En primer lugar, en Unix utiliza mount, no ls /mnt: muchas cosas no están montadas en /mnt.

De todos modos, está el comando mountvol DOS, que continúa funcionando en Powershell, y está el específico de Powershell Get-PSDrive. Función

0

alt text

PD:>get-psdrive

+0

Esa es una configuración ingeniosa para el aviso. ¿Te importaría compartir los detalles de eso? – wishi

7

En Windows PowerShell:

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

También el dskwipe utilidad: http://smithii.com/dskwipe

dskwipe.exe -l 
+0

Para etiquetar, también puede incluir un indicador de otra respuesta '-PSProvider: 'FileSystem'' para mostrar solo los sistemas de archivos. – Pred

1

Ésta es pr etty de edad, pero me encontré siguiendo la pena señalar:

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 

sin filtrar propiedades, en mi sistema de prueba, 4319.4196ms a 1777.7237ms. A menos que necesite un objeto PS-Drive devuelto, me quedaré con WMI.

EDIT: Creo que tenemos un ganador: PS N:> (medida de comando {. [System.IO.DriveInfo] :: getdrives() |% {_ $ nombre} |} Out-Host) .para talmilliseconds 110,9819

5

Get-volumen

obtendrá: letraDeUnidad, FileSystemLabel, sistema de archivos, DriveType, HealthStatus, SizeRemaining y tamaño

+0

Get-Volume parece estar disponible solo en Windows-Server 2012 y Windows-Server 2016. – Bram

+0

Get-Volume funcionó para mí ejecutando PowerShell 5.1. Tal vez hicieron este estándar en los últimos años/actualizaciones recientes. Esta respuesta debería recibir más atención. –

1

Aunque esto no es 'PowerShell' específica .. . Puede enumerar fácilmente las unidades y las particiones utilizando diskpart, list volume

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

¿es posible obtener el Volumen ## usando powershell? (Para Windows 7) – Chand

0

Tenemos varios volúmenes por unidad (algunos están montados en subdirectorios en la unidad). Este código muestra una lista de los puntos de montaje y las etiquetas de volumen. Obviamente también se puede extraer el espacio libre y así sucesivamente:

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