Win32_LogicalDisk 不从远程计算机检索网络驱动器

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),结果都是相同的。

有什么想法可能导致网络驱动器从结果集中被省略?

答案1

事实证明,使用Win32_MappedLogicalDisk甚至会从远程主机专门检索网络驱动器。

免责声明:我不保证该解决方案是解决此问题的最佳(甚至是准确)方法,也不知道是否涉及任何其他考虑因素;它仅解决了我的特定问题。

答案2

据我研究,Windows 有 2 个地方存储网络驱动器(如果排除 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 获取此信息,您需要在用户上下文中运行代码。您可以获取用户的凭据,可以创建一个在登录用户上下文中运行的 GPO,或者可以使用 System Center 在“登录用户”上下文中运行代码。

希望这些信息有用。我花了一些时间来学习和挖掘。

答案3

即使这有效

Get-WmiObject -Class Win32_logicaldisk  -Filter DriveType=4

答案4

根据此信息启用此功能:查看所有网络驱动器 (查看网络驱动器)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。您必须重新启动计算机。

创建该密钥后,就可以分别在 Power Shell 和 Windows 命令提示符中使用命令Get-WmiObject和。net use

它在我使用的 Windows 10 机器上起作用了。

相关内容