2008-10-01 15 views
6

Necesito saber, desde dentro de Powershell, si la unidad actual es una unidad mapeada o no.En PowerShell, ¿cómo puedo determinar si la unidad actual es una unidad en red o no?

Desafortunadamente, Get-PSDrive no está funcionando "como se esperaba":

PS:24 H:\temp 
>get-psdrive h 

Name  Provider  Root  CurrentLocation 
----  --------  ----  --------------- 
H   FileSystem H:\   temp 

pero en MS-DOS "net use" muestra que H: es realmente una unidad de red asignada:

New connections will be remembered. 

Status  Local  Remote     Network 
------------------------------------------------------------------------------- 
OK   H:  \\spma1fp1\JARAVJ$  Microsoft Windows Network 

The command completed successfully. 

lo que quiero hacer es conseguir la raíz de la unidad y mostrarla en el símbolo (ver: Customizing PowerShell Prompt - Equivalent to CMD's $M$P$_$+$G?)

Respuesta

9

utilizan .NET Framework:

PS H:\> $x = new-object system.io.driveinfo("h:\") 
PS H:\> $x.drivetype 
Network 
+0

¡Buen consejo! Y luego, ¿cómo obtengo el Rootdirectory = Desafortunadamente RootDirectory apunta a H: \ again ... – JJarava

+0

@jjarava - Me di cuenta tardíamente de que aunque la clase DriveInfo le dirá el tipo de unidad, no devolverá la red camino. Tal vez una de las otras respuestas puede proporcionar eso. –

1

Trate de WMI:

Get-WMI -query "Select ProviderName From Win32_LogicalDisk Where DeviceID='H:'" 
1

Una forma alternativa de utilizar WMI:

get-wmiobject Win32_LogicalDisk | ? {$_.deviceid -eq "s:"} | % {$_.providername}

Obtener todas las unidades de red con:

get-wmiobject Win32_LogicalDisk | ? {$_.drivetype -eq 4} | % {$_.providername}

1

El más reliab Le manera es utilizar WMI

get-wmiobject win32_volume | ? { $_.DriveType -eq 4 } | % { get-psdrive $_.DriveLetter[0] } 

El DriveType es un hthe ingenio enumeración siguientes valores

0 - Desconocido 1 - n directorio raíz 2 - Disco extraíble 3 - Disco local 4 - unidad de red 5 - disco compacto 6 - disco RAM

Aquí hay un enlace a un post que hice on the subject

+0

El único "error" con este enfoque (que parece mucho más limpio) es que estoy ejecutando WINXP, ¡así que la clase win32_volume no está disponible! Gracias por la propina de todos modos. – JJarava

1

Una variación ligeramente más compacto en la respuesta aceptada:

[System.IO.DriveInfo]("C") 
1

llevar esto un paso más allá, como se muestra a continuación:

([System.IO.DriveInfo]("C")).Drivetype 

Nota esto sólo funciona para el sistema local. Use WMI para computadoras remotas.

Cuestiones relacionadas