2015-05-21 35 views
1

我需要在遠程會話上獲得真正的映射驅動器,我讀取遠程註冊表中的路徑和名稱,但標籤(驅動器號)在\ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ MountPoints2如何在遠程用戶會話上映射驅動器會話

如果我閱讀HKCU \網絡我只有持久驅動器(具有狀態替換的GPP驅動器丟失)。

我如何找到路徑,名稱和標籤?

function get-Drives { 
     param ([ValidateNotNullOrEmpty()] $Computername, [ValidateNotNullOrEmpty()] $SID) 
     try { 
      $Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('USERS', $computerName) 
      $RegKey = $Reg.OpenSubKey("$SID\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MountPoints2") 
      $lecteurs = $RegKey.GetSubKeyNames() 
      $lecteurs | ?{$_ -notlike '{*}'} | %{ 
       $RegKey = $Reg.OpenSubKey("$SID\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MountPoints2\\$_") 
       $_LabelFromReg = $regKey.GetValue('_LabelFromReg') 
       if ($_LabelFromReg) { 
        [pscustomobject]@{ 
         Name = $_LabelFromReg 
         Label = '' 
         Path = $_ -replace('#','\') 
        } 
       } 
      } 
     } catch { 
     } 
    } 
+0

您還沒有說*爲什麼*您需要獲得用戶遠程會話的真實映射驅動器。 –

+0

我爲幫助臺創建了一個工具軟件(4000 RDC會話) – Alban

+0

這並沒有回答這個問題。映射驅動器通常是按用戶設置或在GPO中定義的。爲幫助臺創建工具軟件與爲遠程用戶會話獲取映射驅動器有什麼關係? –

回答

1

遠程獲取映射驅動器容易出錯。從用戶那裏獲取列表要簡單得多而且麻煩少。這裏是一個簡短的WSH JScript腳本,你可以給用戶。用戶可以運行它來獲取映射驅動器和位置的快速對話框:

// mappedDrives.js 

var wshNetwork = new ActiveXObject("WScript.Network"); 
var networkDrives = wshNetwork.EnumNetworkDrives(); 
var results = ""; 
for (var i = 0; i < networkDrives.length; i += 2) { 
    var resultLine = networkDrives.Item(i) + " -> " + networkDrives.Item(i + 1); 
    if (results != "") { 
    results += "\r\n" + resultLine; 
    } 
    else { 
    results = resultLine; 
    } 
} 

var wshShell = new ActiveXObject("WScript.Shell"); 
if (results != "") { 
    wshShell.Popup(results, 0, "Mapped Drives"); 
} 
else { 
    wshShell.Popup("No mapped drives detected", 0, "Mapped Drives"); 
} 
0

編輯:正如@Alban指出,這並沒有得到登陸用戶的映射驅動器的電流,只計算機映射的驅動器。我會在這裏留下答案,因爲它可能對未來需要的人有用,但顯然不是OP需要的。

假設您的服務檯可以訪問遠程WMI調用,您可以使用Win32_LogicalDiskWMI類來完成此操作。映射的驅動器爲DriveType 4,因此請對此進行過濾,並返回DeviceID,ProviderNameVolumeName。或者將它們重新命名爲便於閱讀,例如:

gwmi -class win32_logicaldisk -Computer $ComputerName | Where{$_.DriveType -eq 4} | select @{n='DriveLetter';e={$_.DeviceID}},VolumeName,@{n='NetworkPath';e={$_.ProviderName}} 

簡單夠吧?下面是我得到的運行它對着我的本地計算機:

DriveLetter  VolumeName   NetworkPath 
-----------  ----------   ----------- 
X:     OSDisk    \\localhost\c$\temp 

我相當肯定,應該工作對遠程電腦的當前映射驅動器。

+0

此命令獲取計算機映射驅動器,而不是用戶會話映射驅動器 – Alban

+0

這不適用於遠程計算機。 – NetMage