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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top