Как в PowerShell определить, является ли текущий диск сетевым или нет?

Мне нужно знать из Powershell, является ли текущий диск подключенным или нет.

К сожалению, Get-PSDrive не работает "должным образом":

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

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

но в MS-Dos «чистое использование» показывает, что H: действительно является подключенным сетевым диском:

New connections will be remembered.

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

The command completed successfully.

Я хочу получить корень диска и показать его в командной строке (см. Настройка приглашения PowerShell - эквивалент CMD $ M $ P $ _ $ + $ G?)


person JJarava    schedule 01.10.2008    source источник


Ответы (6)


Используйте платформу .NET:

PS H:\> $x = new-object system.io.driveinfo("h:\")
PS H:\> $x.drivetype
Network
person Jeff Stong    schedule 01.10.2008
comment
Хороший совет! И тогда как мне получить Rootdirectory = К сожалению, RootDirectory снова указывает на H: \ ... - person JJarava; 01.10.2008
comment
@jjarava - я с опозданием понял, что, хотя класс DriveInfo сообщит вам тип диска, он не вернет сетевой путь. Возможно, это даст один из других ответов. - person Jeff Stong; 01.10.2008

Попробуйте WMI:

Get-WMI -query "Select ProviderName From Win32_LogicalDisk Where DeviceID='H:'"
person EBGreen    schedule 01.10.2008

Альтернативный способ использования WMI:

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

Получите все сетевые диски с:

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

person Grant Wagner    schedule 01.10.2008

Чуть более компактный вариант принятого ответа:

[System.IO.DriveInfo]("C")
person Goyuix    schedule 02.10.2008

Сделайте еще один шаг, как показано ниже:

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

Обратите внимание, что это работает только для локальной системы. Используйте WMI для удаленных компьютеров.

person Jeffery Hicks    schedule 06.10.2008

Самый надежный способ - использовать WMI.

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

DriveType - это перечисление со следующими значениями

0 - Неизвестно 1 - Нет корневого каталога 2 - Съемный диск 3 - Локальный диск 4 - Сетевой диск 5 - Компакт-диск 6 - RAM-диск

Вот ссылка на мое сообщение в блоге по теме

person JaredPar    schedule 01.10.2008
comment
Единственная проблема с этим подходом (который кажется намного чище) заключается в том, что я использую WINXP, поэтому класс win32_volume недоступен! В любом случае спасибо за совет. - person JJarava; 07.10.2008