Enumerare le stampanti per una specifica sessione di Terminal Server
-
21-08-2019 - |
Domanda
Sto cercando un modo per vedere cosa stampanti uno specifico utente ha mappato nel proprio sessione TS.
Come posso raggiungere questo obiettivo con WMI (via PowerShell) o VB-Script? C'è un modo built-in che non sono a conoscenza?
Modifica : Nella nostra mappatura costrutto di stampanti locali dal PSR-Client è disabilitato. Gli utenti ottengono le loro stampanti creati durante l'accesso tramite VBS-Script ed eliminati durante la disconnessione.
Quindi c'è installati direttamente sul nostro server TS e l'interrogazione della classe Win32_Printers WMI restituisce nulla non stampanti. Le stampanti sono installati su un server di stampa dedicato. Interrogare le stampanti su quel server restituisce tutte le stampanti e non quello mappato per un singolo utente.
Soluzione
Grazie al commento di Remko sono stato messo nella giusta direzione e, infine, ha fatto uno script che ha fatto quello che mi serviva.
In sostanza lo script determina il SID dell'utente e guarda in hive del Registro dell'utente ( HKEY_USERS \ $ sid \ Printers \ Connections ) per le stampanti creati.
Ecco lo script rapido e sporco 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
}
}
}
Altri suggerimenti
Non riesco a check-in una sessione TS in questo momento, ma questo lo fa normalmente in PowerShell:
Get-WMIObject Win32_Printer
Da qui: 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
Può essere, è necessario CUPS tecnologia basata? E 'semplice compito per tazze su qualsiasi Unix, ma non sono sicuro su Windows.
Questo ha fatto il trucco per me risposta seanyboy unlick che restituisce le stampanti locali questo script restituiscono la rete di stampanti è collegato ad un'utenti, funziona bene su una sessione di Terminal Server \ Citrix
http://www.geekshangout.com/vbs-script-to-list-the-network-printers-a-user-is-connected-to/
Per quanto ho capito Si può leggere un po 'di campo in Registro di sistema.
PS: Io preferisco usare Linux per il servizio terminale;)