我想使用 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 以来它们不可用也不返回任何信息。
- 有一种解决方法,直接从 Power Shell 读取注册表项:
Get-ChildItem Registry::HKEY_CURRENT_USER\Network\*
- 如果您可以编辑注册表,则有一个可能的解决方案:在 中
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
创建一个DWORD
名为EnableLinkedConnections
并将其值设置为1
。您必须重新启动计算机。
创建该密钥后,就可以分别在 Power Shell 和 Windows 命令提示符中使用命令Get-WmiObject
和。net use
它在我使用的 Windows 10 机器上起作用了。