枚举打印机特定终端服务器会话
-
21-08-2019 - |
题
我要寻找一种方式来看看打印机特定用户映射到他或她的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的终端服务)