Em PowerShell, como posso determinar se a unidade atual é uma unidade de rede ou não?
-
03-07-2019 - |
Pergunta
Eu preciso saber, de dentro do PowerShell, se a unidade atual é uma unidade mapeada ou não.
Infelizmente, Get-PSDrive não está funcionando "como esperado":
PS:24 H:\temp
>get-psdrive h
Name Provider Root CurrentLocation
---- -------- ---- ---------------
H FileSystem H:\ temp
mas em MS-DOS mostra "uso" líquido que H: é realmente uma unidade de rede mapeada:
New connections will be remembered.
Status Local Remote Network
-------------------------------------------------------------------------------
OK H: \\spma1fp1\JARAVJ$ Microsoft Windows Network
The command completed successfully.
O que eu quero fazer é obter a raiz da unidade e mostrá-la no prompt (ver: Personalização PowerShell Prompt -? equivalente a do CMD $ M $ P $ _ $ + $ G )
Solução
Use o .NET framework:
PS H:\> $x = new-object system.io.driveinfo("h:\")
PS H:\> $x.drivetype
Network
Outras dicas
Tente WMI:
Get-WMI -query "Select ProviderName From Win32_LogicalDisk Where DeviceID='H:'"
Uma forma alternativa de usar WMI:
get-wmiobject Win32_LogicalDisk | ? {$_.deviceid -eq "s:"} | % {$_.providername}
Obter todas as unidades de rede com:
get-wmiobject Win32_LogicalDisk | ? {$_.drivetype -eq 4} | % {$_.providername}
Uma variação ligeiramente mais compacto na resposta aceita:
[System.IO.DriveInfo]("C")
Tome este mais um passo, como mostrado abaixo:
([System.IO.DriveInfo]("C")).Drivetype
Note que este só funciona para o sistema local. Use WMI para computadores remotos.
A maneira mais confiável é usar WMI
get-wmiobject win32_volume | ? { $_.DriveType -eq 4 } | % { get-psdrive $_.DriveLetter[0] }
O DriveType é um ENUM sagacidade hthe seguintes valores
0 - Desconhecido 1 - Diretório Raiz Não 2 - Disco Removível 3 - Disco Local 4 - Unidade de Rede 5 - Disco Compacto 6 - RAM Disk
Aqui está um link para um post que fiz sobre o assunto