В PowerShell как определить, является ли текущий диск сетевым или нет? - PullRequest
7 голосов
/ 01 октября 2008

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

К сожалению, Get-PSDrive не работает "как положено":

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

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

но в MS-Dos "net use" показывает, что 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? )

Ответы [ 6 ]

10 голосов
/ 01 октября 2008

Используйте .NET Framework:

PS H:\> $x = new-object system.io.driveinfo("h:\")
PS H:\> $x.drivetype
Network
1 голос
/ 06 октября 2008

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

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

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

1 голос
/ 02 октября 2008

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

[System.IO.DriveInfo]("C")
1 голос
/ 01 октября 2008

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

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

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

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

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

1 голос
/ 01 октября 2008

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

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

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

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

1 голос
/ 01 октября 2008

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

Get-WMI -query "Select ProviderName From Win32_LogicalDisk Where DeviceID='H:'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...