我想使用WMI从远程主机检索所有逻辑磁盘。 由于某些未知的原因,运行get-wmiobject Win32_LogicalDisk -computername remoteHost无法包含位于远程Windows主机上的networking驱动器。 但是,在remoteHost本地运行get-wmiobject Win32_LogicalDisk remoteHost成功检索所有逻辑磁盘,包括networking驱动器。
例如,在本地运行该命令将检索所有逻辑磁盘(输出格式为清晰起见):
>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
但是,远程运行相同的命令无法检索networking驱动器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)。
任何想法可能导致networking驱动器(S)从结果集中被省略?
结果使用Win32_MappedLogicalDisk将专门检索networking驱动器,甚至从远程主机。
免责声明:我不保证这个解决scheme是解决这个问题的最好的(甚至是准确的)方法,我也不知道是否还有其他的考虑因素。 它只是解决了我的具体问题。
据我研究,有2个地方Windows存储networking驱动器(地图驱动器,如果你排除PS驱动器)。
一个是WMI,如上所述,你可以在WMI Win32_MappedLogicalDisk类中获得这个信息。
二是registry,在HKEY_Current_User下:\networking这里所有的密钥都是networking字母和地图驱动器的信息。
一个前例。 关键是:
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\*"
您不能在login用户上下文中获取此信息。 此信息存储在其他用户上下文中,并且您无法访问。 在这里我不能再进一步了,因为这是Powershell或者.Net的一个大问题。
要从registry和WMI获取这些信息,您需要在用户上下文中运行代码。 您可以获取用户的凭证,您可以创buildGPO,该凭证在login的用户上下文中运行,也可以使用System Center在“login用户”上下文中运行代码。
希望这是有用的信息。 我花了一些时间来学习和挖掘。
即使这个工程
Get-WmiObject -Class Win32_logicaldisk -Filter DriveType=4