2

我正在寻找一种方法来查看特定用户已将哪些打印机映射到他或她的 TS 会话中。

如何使用 WMI(通过 PowerShell)或 VB-Script 实现这一点?有没有我不知道的内置方式?

编辑:在我们的 RDP 客户端对本地打印机的构造映射中被禁用。用户通过 VBS 脚本在登录期间创建他们的打印机,并在注销期间删除。

因此,我们的 TS 服务器上没有直接安装打印机,查询 Win32_Printers WMI 类不会返回任何内容。打印机安装在专用的打印服务器上。查询该服务器上的打印机会返回所有打印机,而不是为单个用户映射的打印机。

4

6 回答 6

2

感谢 Remko 的评论,我被引导到了正确的方向,并最终制作了一个满足我需要的脚本。

基本上,该脚本确定用户的 SID 并在用户的注册表配置单元 ( HKEY_USERS\$sid\Printers\Connections ) 中查找已创建的打印机。

这是快速而肮脏的powershell脚本:

$server = 'servername'
$userName = 'username'

$regHKLM = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine", $server)
$regProfileList = $regHKLM.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList")

foreach ($sid in $regProfileList.GetSubKeyNames())
{
    $profileImagePath = $regProfileList.OpenSubKey($sid).GetValue("ProfileImagePath")
    if ($profileImagePath.EndsWith("\$userName"))
    {
        $regHKU = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("Users", $server)
        $regUser = $regHKU.OpenSubKey("$sid\Printers\Connections")
        foreach ($printer in $regUser.GetSubKeyNames())
        {
            $printer.Replace(",", "\")  # backslashes are replaced with commas, revert that
        }
    }
}
于 2010-07-20T15:12:51.627 回答
1

我现在无法签入 TS 会话,但这通常在 powershell 中执行:

获取 WMIObject Win32_Printer

于 2009-03-24T14:41:54.037 回答
0

从这里:http ://www.microsoft.com/technet/scriptcenter/guide/sas_prn_tart.mspx?mfr=true

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
 ("SELECT * FROM Win32_Printer")
For Each objPrinter in colInstalledPrinters
 Wscript.Echo "Name: " & objPrinter.Name
 Wscript.Echo "Location: " & objPrinter.Location
Next
于 2009-09-15T08:43:55.777 回答
0

您可能需要基于 CUPS 的技术吗?对于任何 unix 上的杯子来说,这都是简单的任务,但我不确定 Windows。

于 2009-10-05T13:00:21.493 回答
0

这对我起到了作用

http://www.geekshangout.com/vbs-script-to-list-the-network-printers-a-user-is-connected-to/

于 2011-04-05T11:36:02.830 回答
-1

据我了解,您可以阅读注册表中的某些字段。

PS:我更喜欢用Linux做终端服务;)

于 2009-03-24T10:07:46.630 回答