Auflisten von Druckern für eine bestimmte Terminalserver-Sitzung
-
21-08-2019 - |
Frage
Ich bin auf der Suche nach einem Weg, um zu sehen, welcher Drucker ein bestimmte Benutzer in seiner TS-Sitzung zugeordnet hat.
Wie kann ich dies mit WMI (via Powershell) oder VB-Script erreichen? Gibt es eine eingebaute Möglichkeit, ich bin mir nicht bewusst?
Bearbeiten : In unserem Konstrukt Mapping von lokalen Druckern durch das RDP-Client ist deaktiviert. Benutzer erhalten ihre Drucker bei der Anmeldung über VBS-Script und gelöscht während Abmelde erstellt.
Es gibt also keine Drucker, die direkt auf unserem TS-Server installiert und die Win32_Printers WMI-Klasse Abfrage gibt nichts zurück. Die Drucker sind auf einem dedizierten Druckserver installiert. Abfrage der Drucker auf dem Server gibt alle Drucker und nicht die einen für einen einzelnen Benutzer zugeordnet.
Lösung
Dank Remko Kommentar ich in die richtige Richtung gesetzt wurde und endlich ein Skript, das tat, was ich brauchte.
Im Grunde das Skript bestimmt die SID des Benutzers und sucht in der Registrierungsstruktur des Benutzers ( HKEY_USERS \ $ sid \ Printers \ Connections ) für die erstellten Drucker.
Hier ist der schnelle und schmutziger Powershell-Skript:
$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
}
}
}
Andere Tipps
Ich kann jetzt nicht in einer TS-Sitzung überprüfen, aber das tut es normalerweise in Powershell:
Get-WMIObject Win32_Printer
Von hier: 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
Auch Sie benötigen CUPS-basierte tecnology sein? Es ist einfache Aufgabe für Tassen auf jedem Unix, aber ich bin mir nicht sicher über Windows.
Dies hat den Trick für mich unlick seanyboy Antwort, die die lokalen Drucker dieses Skript gibt Rückkehr der Netzwerkdrucker ein Benutzer verbunden ist, funktioniert auf einem Terminalserver \ Citrix-Sitzung
http://www.geekshangout.com/vbs-script-to-list-the-network-printers-a-user-is-connected-to/
Soweit ich verstehe, Sie können einige Felder in Registry lesen.
PS: Ich ziehe Linux für Terminal-Dienst zu verwenden;)