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.

War es hilfreich?

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;)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top