【问题标题】:How to get mapped drives on remote users session如何在远程用户会话中获取映射驱动器
【发布时间】:2015-08-03 09:42:16
【问题描述】:

我需要在远程会话中获取真实映射的驱动器,我读取了路径和名称的远程注册表,但 \Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2 中缺少标签(驱动器号)

如果我阅读 HKCU\Network,我只有永久驱动器(状态为 Replace 的 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 {
        }
    }

【问题讨论】:

  • 你还没有说为什么你需要为用户的远程会话获取真正的映射驱动器。
  • 我为帮助台创建了一个工具软件(4000 RDC Sessions)
  • 这不能回答问题。映射驱动器通常是每个用户的设置或在 GPO 中定义。为帮助台创建工具软件与为远程用户会话获取映射驱动器有什么关系?
  • GPP挂载的用户驱动器,用户只知道每个驱动器的标签或名称,但技术人员需要真正的路径来了解用户,这个工具是用户和技术人员之间的链接。因为 gpedit.msc 很难快速阅读
  • 让用户启动cmd.exe 并运行命令net use。此输出告诉您映射的驱动器。尝试远程确定容易出错。

标签: windows powershell registry remote-access


【解决方案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");
}

【讨论】:

    【解决方案2】:

    编辑:正如@Alban 所指出的,这不会获取当前登录用户的映射驱动器,而只会获取计算机映射的驱动器。我会在这里留下答案,因为它可能对将来需要它的人有用,但这显然不是 OP 所需要的。

    假设您的帮助台可以访问远程 WMI 调用,您可以使用 Win32_LogicalDisk WMI 类来执行此操作。映射的驱动器为DriveType 4,因此对其进行过滤,并返回DeviceIDProviderNameVolumeName。或重命名它们以便于阅读,例如:

    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
    

    我相当肯定,对于任何当前映射的驱动器,它应该适用于远程计算机。

    【讨论】:

    • 此命令获取计算机映射驱动器,而不是用户会话映射驱动器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 2022-09-26
    相关资源
    最近更新 更多