문제

특정 사용자가 자신의 TS 세션에 매핑 한 프린터를 볼 수있는 방법을 찾고 있습니다.

WMI (PowerShell을 통해) 또는 VB 스크립트로 어떻게이를 달성 할 수 있습니까? 내가 알지 못하는 내장 방법이 있습니까?

편집하다: RDP-Client의 로컬 프린터의 구조 매핑에서 비활성화됩니다. 사용자는 VBS 스크립트를 통해 로그인하는 동안 프린터를 생성하고 로그 오프 중에 삭제됩니다.

따라서 TS 서버에 직접 설치된 프린터는 없으며 Win32_Printers WMI 클래스를 쿼리하는 것은 아무것도 반환하지 않습니다. 프린터는 전용 인쇄 서버에 설치됩니다. 해당 서버의 프린터를 쿼리하면 모든 프린터가 단일 사용자를 위해 맵핑되지 않은 모든 프린터를 반환합니다.

도움이 되었습니까?

해결책

Remko의 의견 덕분에 나는 올바른 방향으로 올라 갔고 마침내 내가 필요한 것을 한 대본을 만들었습니다.

기본적으로 스크립트는 사용자의 SID를 결정하고 사용자의 레지스트리 하이브를 봅니다 (hkey_users $ sid printers connections) 생성 된 프린터의 경우.

빠르고 더러운 PowerShell 스크립트는 다음과 같습니다.

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

다른 팁

지금 TS 세션을 확인할 수는 없지만 PowerShell에서 일반적으로 수행합니다.

get-wmiobject win32_printer

여기에서: 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

컵 기반 Tecnology가 필요할 수 있습니까? Unix에서 컵에 대한 간단한 작업이지만 Windows에 대해서는 잘 모르겠습니다.

이것은 로컬 프린터를 반환하는 Seanyboy 답변에 대한 트릭을 수행했습니다.이 스크립트는 사용자가 연결된 네트워크 프린터를 반환하고 터미널 서버에서 잘 작동합니다.

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

내가 이해하는 한 레지스트리에서 일부 필드를 읽을 수 있습니다.

추신 : 터미널 서비스에 Linux를 사용하는 것을 선호합니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top