C# 在C中从远程计算机获取映射的网络驱动器
我想使用WMI C列出远程计算机中的映射网络驱动器。。我正在使用以下代码C# 在C中从远程计算机获取映射的网络驱动器,c#,vbscript,network-programming,wmi-query,C#,Vbscript,Network Programming,Wmi Query,我想使用WMI C列出远程计算机中的映射网络驱动器。。我正在使用以下代码 ConnectionOptions connectionOptions = new ConnectionOptions(); connectionOptions.Username = "myAdminUser"; connectionOptions.Password = "Password"; connectionOptions.Imper
ConnectionOptions connectionOptions = new ConnectionOptions();
connectionOptions.Username = "myAdminUser";
connectionOptions.Password = "Password";
connectionOptions.Impersonation = ImpersonationLevel.Impersonate;
ManagementScope Scope = new ManagementScope(@"\\" + "myClientMachine" + @"\root\cimv2", connectionOptions);
Scope.Connect();
ManagementObjectSearcher win32Drives = new ManagementObjectSearcher(Scope,
new ObjectQuery(@"SELECT Name,UserName FROM Win32_NetworkConnection'"));
foreach (ManagementObject DriveData in win32Drives.Get())
{
string drivePath = (string)DriveData["Name"];
string userName = (string)DriveData["UserName"];
}
我使用管理员凭据在服务器计算机中运行此代码,以从中获取映射驱动器
我的客户机。。。当我使用管理员凭据时,此代码返回0个结果。。但在使用客户端用户凭据的同时,它会为客户端用户返回映射驱动器
在这里,我的问题是,有没有办法为所有用户获取客户端计算机中的所有映射驱动器?是的,您可以利用winmgmts查询并通过vbscript从计算机的脚本扫描中检索它们
'Define variables, constants and objects
strComputer="<remote machine here>"
Const HKEY_USERS = &H80000003
Set objWbem = GetObject("winmgmts:")
Set objRegistry = GetObject("winmgmts://" & strComputer & "/root/default:StdRegProv")
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
'Go and get the currently logged on user by checking the owner of the Explorer.exe process.
Set colProc = objWmiService.ExecQuery("Select Name from Win32_Process" & " Where Name='explorer.exe' and SessionID=0")
If colProc.Count > 0 Then
For Each oProcess In colProc
oProcess.GetOwner sUser, sDomain
Next
End If
'Loop through the HKEY_USERS hive until (ignoring the .DEFAULT and _CLASSES trees) until we find the tree that
'corresponds to the currently logged on user.
lngRtn = objRegistry.EnumKey(HKEY_USERS, "", arrRegKeys)
For Each strKey In arrRegKeys
If UCase(strKey) = ".DEFAULT" Or UCase(Right(strKey, 8)) = "_CLASSES" Then
Else
Set objSID = objWbem.Get("Win32_SID.SID='" & strKey & "'")
'If the account name of the current sid we're checking matches the accountname we're looking for Then
'enumerate the Network subtree
If objSID.accountname = sUser Then
regpath2enumerate = strkey & "\Network" 'strkey is the SID
objRegistry.enumkey hkey_users, regpath2enumerate, arrkeynames
'If the array has elements, go and get the drives info from the registry
If Not (IsEmpty(arrkeynames)) Then
For Each subkey In arrkeynames
regpath = strkey & "\Network\" & subkey
regentry = "RemotePath"
objRegistry.getstringvalue hkey_users, regpath, regentry, dapath
wscript.echo subkey & ":" & vbTab & dapath
Next
End If
End If
End If
Next
也可以使用C版本: