Question

Je cherche un moyen de voir quelles imprimantes un utilisateur spécifique a mappées dans sa session TS.

Comment puis-je y parvenir avec WMI (via PowerShell) ou VB-Script ?Existe-t-il une méthode intégrée dont je ne suis pas au courant ?

MODIFIER:Dans notre construction, le mappage des imprimantes locales par le client RDP est désactivé.Les utilisateurs voient leurs imprimantes créées lors de la connexion via VBS-Script et supprimées lors de la déconnexion.

Il n'y a donc aucune imprimante installée directement sur notre serveur TS et l'interrogation de la classe WMI Win32_Printers ne renvoie rien.Les imprimantes sont installées sur un serveur d'impression dédié.L'interrogation des imprimantes sur ce serveur renvoie TOUTES les imprimantes et non celle mappée pour un seul utilisateur.

Était-ce utile?

La solution

Merci au commentaire de Remko je mis dans la bonne direction et a finalement fait un script qui fait ce que je avais besoin.

Fondamentalement, le script détermine le SID de l'utilisateur et regarde dans la ruche de Registre de l'utilisateur ( HKEY_USERS $ \ sid \ Printers \ Connections ) pour les imprimantes créées.

Voici le script Powershell rapide et sale:

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

Autres conseils

Je ne peux pas vérifier dans une session de TS en ce moment, mais cela ne normalement en Powershell:

Get-WMIObject Win32_Printer

A partir de là: 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

Peut être que vous avez besoin CUPS technologie basée? Il est une tâche simple pour les tasses sur tout unix mais je ne suis pas sûr de Windows.

a fait l'affaire pour moi de répondre à unlick de seanyboy qui renvoie les imprimantes locales ce script renvoient les imprimantes réseau un utilisateur est connecté, fonctionne très bien sur une session Terminal Server \ Citrix

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

Autant que je sache, vous pouvez lire certains champs du registre.

PS :Je préfère utiliser Linux pour le service terminal ;)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top