Я хотел бы использовать 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. Удаленный хост выполняет Сервер Победы 2 012 R2. Результатом является то же независимо от того, что ОС я работаю на команде (Win7, Сервер Победы 2 008 R2, Сервер Победы 2 012 R2).
Какие-либо идеи, что может заставлять сетевой диск (диски) быть опущенным от набора результатов?
Оказывается, использование Win32_MappedLogicalDisk
специально извлекает сетевые диски даже с удаленных хостов.
Отказ от ответственности: Я не гарантирую, что это решение является лучшим (или даже точным) способом решения этой проблемы, и не знаю, есть ли какие-то дополнительные соображения; оно просто решает мою конкретную проблему.
.Насколько я выяснил, есть 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 для запуска кода в контексте «Вход в систему пользователей».
Надеюсь, это полезная информация . Мне потребовалось время, чтобы научиться и откопать.
Согласно этой информации enmimaquinafunciona: Ver todas las unidades mapeadas (просмотр сетевых дисков) команда Power Shell: Get-WmiObject "Win32_MappedLogicalDisk"
, а также команда > net use
должны работать для этой цели, однако они недоступны и не возвращают никакой информации со времен Windows Vista.
Get-ChildItem Реестр::HKEY_CURRENT_USER\Network\*
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
Создайте DWORD
с именем EnableLinkedConnections
и установите его значение на 1
. Вам нужно будет перезагрузить компьютер. После создания этого ключа можно использовать обе команды Get-WmiObject
и net use
в Power Shell и Windows Command Prompt соответственно.
Это работало на компьютере с Windows 10.
.