Как в PowerShell определить, является ли текущий диск сетевым или нет?
-
03-07-2019 - |
Вопрос
Мне нужно знать изнутри 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 — эквивалент $M$P$_$+$G CMD?)
Решение
Используйте платформу .NET:
PS H:\> $x = new-object system.io.driveinfo("h:\")
PS H:\> $x.drivetype
Network
Другие советы
Попробуйте WMI:
Get-WMI -query "Select ProviderName From Win32_LogicalDisk Where DeviceID='H:'"
Альтернативный способ использования WMI:
get-wmiobject Win32_LogicalDisk | ? {$_.deviceid -eq "s:"} | % {$_.providername}
Получите все сетевые диски с помощью:
get-wmiobject Win32_LogicalDisk | ? {$_.drivetype -eq 4} | % {$_.providername}
Немного более компактный вариант принятого ответа:
[System.IO.DriveInfo]("C")
Сделайте еще один шаг, как показано ниже:
([System.IO.DriveInfo]("C")).Drivetype
Обратите внимание, что это работает только для локальной системы.Используйте WMI для удаленных компьютеров.
Самый надежный способ — использовать WMI.
get-wmiobject win32_volume | ? { $_.DriveType -eq 4 } | % { get-psdrive $_.DriveLetter[0] }
DriveType представляет собой перечисление со следующими значениями
0 - Неизвестно 1 - Нет корневого каталога 2 - съемный диск 3 - локальный диск 4 - сетевой диск 5 - Компактный диск 6 - ОЗУ диск
Вот ссылка на сообщение в блоге, которое я сделал на предмет