2008-10-01 11 views
6

J'ai besoin de savoir, à partir de Powershell, si le lecteur actuel est un lecteur mappé ou non.Dans PowerShell, comment puis-je déterminer si le lecteur actuel est un lecteur réseau ou non?

Malheureusement, Get-PSDrive ne fonctionne pas "comme prévu":

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

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

mais dans MS-Dos "net use" montre que H: est vraiment un lecteur réseau mappé:

New connections will be remembered. 

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

The command completed successfully. 

ce que je veux faire est d'obtenir la racine du lecteur et l'afficher dans l'invite (voir: Customizing PowerShell Prompt - Equivalent to CMD's $M$P$_$+$G?)

Répondre

9

Utilisez le framework .NET:

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

Bon conseil! Et puis comment puis-je obtenir le Rootdirectory = Malheureusement RootDirectory pointe à H: \ encore ... – JJarava

+0

@jjarava - J'ai tardivement réalisé que bien que la classe DriveInfo vous dira le type de lecteur, il ne retournera pas le réseau chemin. Peut-être que l'une des autres réponses peut fournir cela. –

1

Essayez WMI:

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

Une autre façon d'utiliser WMI:

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

Obtenez tous les lecteurs réseau avec:

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

1

Le plus Reliab le moyen est d'utiliser WMI

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

Le DriveType est un esprit ENUM hthe les valeurs suivantes

0 - Unknown 1 - Pas de répertoire racine 2 - Disque amovible 3 - Disque local 4 - lecteur réseau 5 - Compact Disk 6 - RAM Disk

Voici un lien vers un blog je l'ai fait on the subject

+0

Le seul "gotcha" avec cette approche (qui semble beaucoup plus propre) est que je cours WINXP, donc la classe win32_volume n'est pas disponible! Merci pour le pourboire de toute façon. – JJarava

1

Une variante un peu plus compact sur la réponse acceptée:

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

Prenez un peu plus loin, comme indiqué ci-dessous:

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

Notez que ce ne fonctionne que pour le système local. Utilisez WMI pour les ordinateurs distants.

Questions connexes