Я хотел бы использовать 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.
Get-ChildItem Registry::HKEY_CURRENT_USER\Network\*
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
Создать DWORD
названный EnableLinkedConnections
и установите его значение на 1
. Вам придется перезагрузить компьютер.Создав этот ключ, можно использовать обе команды Get-WmiObject
и net use
в Power Shell и командной строке Windows соответственно.
У меня это сработало на машине с Windows 10.