Назад | Перейти на главную страницу

Win32_LogicalDisk не извлекает сетевые диски с удаленных машин

Я хотел бы использовать WMI для получения всех логических дисков с удаленного хоста. По неизвестной причине бег get-wmiobject Win32_LogicalDisk -computername remoteHost не может включить сетевые диски, расположенные на удаленном хосте Windows. Однако бег get-wmiobject Win32_LogicalDisk локально на remoteHost успешно извлекает все логические диски, включая сетевые диски.

Например, запуск команды локально извлекает все логические диски (вывод отформатирован для ясности):

>get-wmiobject Win32_LogicalDisk

DeviceID     : A:
DriveType    : 2

DeviceID     : C:
DriveType    : 3

DeviceID     : D:
DriveType    : 5

DeviceID     : S:   // this is a network drive
DriveType    : 4
ProviderName : \\path\Share

Однако удаленное выполнение той же команды не может получить сетевой диск S:

>get-wmiobject Win32_LogicalDisk -computername remoteHost -credential DOMAIN\Admin

DeviceID     : A:
DriveType    : 2

DeviceID     : C:
DriveType    : 3

DeviceID     : D:
DriveType    : 5

То же самое происходит, если я использую WinRM. На удаленном хосте работает Win Server 2012 R2. Результат будет одинаковым, независимо от того, в какой ОС я запускаю команду (Win7, Win Server 2008 R2, Win Server 2012 R2).

Есть идеи, что может привести к тому, что сетевой диск (-ы) не будет включен в набор результатов?

Насколько я понял, есть 2 места, где Windows хранит сетевые диски (подключать диски, если исключить PS-диски).

  • Один из них - WMI, как упоминалось здесь, вы можете получить эту информацию в классе WMI Win32_MappedLogicalDisk.

  • Два - это реестр, в разделе HKEY_Current_User: \ Network. Все ключи здесь - это буквы сети и информация о диске.

Экс. на ключе находится:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Network\x]
"RemotePath"="\\\\Server1\\ShareName"
"UserName"=dword:00000000
"ProviderName"="Microsoft Windows Network"
"ProviderType"=dword:00020000
"ConnectionType"=dword:00000001
"DeferFlags"=dword:00000004

Код Powershell

Чтобы получить информацию о Mapdrive:Get-ItemProperty -Path "HKCU:\Network\*"

Вы не можете получить эту информацию в контексте входа в систему. Эта информация хранится в контексте другого пользователя и недоступна вам. Я не могу вдаваться в подробности здесь, так как это БОЛЬШАЯ тема в Powershell или в этом отношении .Net.

Чтобы получить эту информацию из реестра и WMI, вам нужно будет запустить код в контексте пользователя. Вы можете получить учетные данные для пользователя, вы можете создать объект групповой политики, который запускается в контексте пользователей, вошедших в систему, или вы можете использовать System Center для запуска кода в контексте «Вход в систему пользователей».

Надеюсь, это полезная информация. Мне потребовалось время, чтобы научиться и откопать.

Оказывается, используя Win32_MappedLogicalDisk будет специально получать сетевые диски даже с удаленных хостов.

Отказ от ответственности: я не гарантирую, что это решение является лучшим (или даже точным) способом решения этой проблемы, и я не знаю, есть ли какие-либо дополнительные соображения; это просто решает мою конкретную проблему.

даже это работает

Get-WmiObject -Class Win32_logicaldisk  -Filter DriveType=4

Согласно этой информации enmimaquinafunciona: Ver todas las unidades mapeadas (просмотр сетевых дисков) команда Power Shell: Get-WmiObject "Win32_MappedLogicalDisk" а также cmd > net use должны работать для этой цели, однако они не доступны и не возвращают никакой информации, начиная с Windows Vista.

  1. Существует обходной путь, считывающий непосредственно ключ реестра из Power Shell:

Get-ChildItem Registry::HKEY_CURRENT_USER\Network\*

  1. Если вы можете редактировать реестр, есть возможное решение: в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System Создать DWORD названный EnableLinkedConnections и установите его значение на 1. Вам придется перезагрузить компьютер.

Создав этот ключ, можно использовать обе команды Get-WmiObject и net use в Power Shell и командной строке Windows соответственно.

У меня это сработало на машине с Windows 10.