Énumérer les imprimantes pour une session Terminal Server spécifique
-
21-08-2019 - |
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.
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 ;)