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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top