我要寻找一种方式来看看打印机特定用户映射到他或她的TS会话。

我怎样才能使用WMI(通过PowerShell的)或VB脚本实现这一目标?是否有一个内置的方式,我不知道的?

修改:在由RDP客户机的本地打印机的我们的构建体的映射被禁用。用户就可以通过VBS脚本登录过程中创建和注销过程中删除他们的打印机。

所以没有直接提供TS服务器和查询Win32_Printers WMI类没有返回上安装打印机。该打印机安装在专用的打印服务器上。查询该服务器上的打印机返回所有的打印机,而不是一个映射为单个用户。

有帮助吗?

解决方案

感谢的Remko的评论我投入了正确的方向,终于做出了一个脚本,做了我所需要的。

基本上脚本确定用户的SID,并期待在用户的注册表配置单元(的 HKEY_USERS \ $ SID \打印机\连接),用于创建的打印机。

这里的快速和肮脏的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
        }
    }
}

其他提示

我不能在TS会话检查的权利,但本一般不会在它的powershell:

GET-WmiObject可以Win32_Printer

从这里: http://www.microsoft。 COM /的TechNet /脚本中心/导向/ sas_prn_tart.mspx?MFR =真

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

可能是你需要CUPS基础的技术?它是在任何Unix杯简单的任务,但我不知道有关Windows。

这奏效了,我unlick seanyboy答案,返回本地打印机此脚本返回网络打印机的用户连接,在终端服务器\ Citrix会话正常工作

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

据我了解,您可以在注册表中读取一些领域。

PS:我更喜欢使用Linux的终端服务)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top