簡體   English   中英

從C#中的遠程計算機獲取映射的網絡驅動器

[英]Get Mapped Network drives from remote machine in C#

我想使用WMI C#列出遠程計算機中的映射網絡驅動器。

      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 

http://gallery.technet.microsoft.com/scriptcenter/3dd6af3e-edfa-4581-bc35-805314f26bb8

或者您可以使用C#版本:

http://bytes.com/topic/net/answers/170583-list-mapped-drives-remote-machine

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM