Pregunta

Estoy buscando una manera de ver qué impresoras ha asignado un usuario específico a su sesión de TS.

¿Cómo puedo lograr esto con WMI (a través de PowerShell) o VB-Script?¿Existe alguna forma integrada que no conozco?

EDITAR:En nuestra construcción, el mapeo de impresoras locales por parte del cliente RDP está deshabilitado.Los usuarios crean sus impresoras durante el inicio de sesión a través de VBS-Script y las eliminan al cerrar sesión.

Por lo tanto, no hay impresoras instaladas directamente en nuestro servidor TS y al consultar la clase WMI Win32_Printers no se devuelve nada.Las impresoras están instaladas en un servidor de impresión dedicado.Al consultar las impresoras en ese servidor, se devuelve TODAS las impresoras y no la asignada para un solo usuario.

¿Fue útil?

Solución

Gracias al comentario de Remko Me pusieron en la dirección correcta y finalmente hice un script que hice lo que necesitaba.

Básicamente, el script determina el SID del usuario y se ve en la sección del Registro del usuario ( HKEY_USERS \ $ sid \ Printers \ Connections ) para las impresoras creadas.

Aquí está el script de PowerShell rápida y sucia:

$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
        }
    }
}

Otros consejos

No puedo comprobar en una sesión de TS en este momento, pero esto lo hace normalmente en PowerShell:

Get-WMIObject Win32_Printer

A partir de aquí: http://www.microsoft. com / TechNet / scriptcenter / guía / 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

Puede ser Necesita tecnología basada en tazas? Es tarea sencilla para tazas en cualquier Unix, pero no estoy seguro acerca de Windows.

Esto hizo el truco para mí respuesta seanyboy unlick que devuelve las impresoras locales este script devolver el impresoras de red está conectado a un usuarios, funciona bien en una sesión de Terminal Server \ Citrix

http://www.geekshangout.com/vbs-script-to-list-the-network-printers-a-user-is-connected-to/

Según tengo entendido, puede leer algún campo en el Registro.

PD:Prefiero usar Linux para el servicio de terminal;)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top