impressoras Enumerar para uma sessão específica Terminal Server
-
21-08-2019 - |
Pergunta
Eu estou procurando uma maneira de ver o que impressoras um usuário específico tenha mapeado em seu TS sessão.
Como posso conseguir isso com WMI (via PowerShell) ou VB-Script? Existe um built-in maneira que eu não estou ciente de?
Editar : Em nosso mapeamento construção de impressoras locais pela RDP-Client está desativado. Os usuários obtêm suas impressoras criado durante o login via VBS-Script e excluídos durante o logoff.
Portanto, não há impressoras instalada diretamente em nosso TS servidor e consultar o Win32_Printers WMI classe retorna nada. As impressoras são instalados em um servidor de impressão dedicado. Consultando as impressoras no servidor retorna todas as impressoras e não aquele mapeado para um único usuário.
Solução
Graças ao comentário de Remko I foi colocado na direção certa e finalmente fez um script que fez o que eu precisava.
Basicamente, o script determina o SID do usuário e aparência no ramo de registo do utilizador ( HKEY_USERS \ $ sid \ Printers \ Connections ) para as impressoras criadas.
Aqui está o script powershell rápido e sujo:
$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
}
}
}
Outras dicas
Não consigo verificar em uma sessão TS agora, mas isso não é normalmente em powershell:
Get-WMIObject Win32_Printer
A partir daqui: http://www.microsoft. com / TechNet / ScriptCenter / guia / 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
Pode ser que você precisa CUPS tecnology base? É tarefa simples para copos em qualquer Unix, mas não tenho certeza sobre o Windows.
Este fez o truque para mim resposta seanyboy unlick que retorna as impressoras locais este script retornar as impressoras de rede de usuários está conectado, bem funciona em uma sessão do Terminal Server \ Citrix
http://www.geekshangout.com/vbs-script-to-list-the-network-printers-a-user-is-connected-to/
Tanto quanto eu entendo Você pode ler algum campo no registro.
PS: Eu prefiro usar Linux para o serviço de terminal;) ??