質問

特定のユーザーが自分の TS セッションにどのプリンターをマップしているかを確認する方法を探しています。

WMI (PowerShell 経由) または VB-Script を使用してこれを実現するにはどうすればよいですか?私が気づいていない組み込みの方法はありますか?

編集:この構成では、RDP クライアントによるローカル プリンターのマッピングは無効になっています。ユーザーはログイン中に 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 /ガイド/ sas_prn_tart.mspx?メーカ=真

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

あなたはCUPSベースTECNOLOGYを必要とすることができますか?これは、任意のUNIX上のコップのための簡単な作業ですが、私は、Windowsについてはよく分からない。

これは私のためにローカルプリンタは、このスクリプトは、ネットワークは、に接続しているユーザーをプリンタターミナルサーバー\ Citrixセッションで正常に動作リターンを返すunlick seanyboyの答えをトリックをしました。

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

私の知る限り、レジストリにいくつかのフィールドを読み取ることができます理解します。

PS:私はターミナルサービス用のLinuxを使用することを好む;)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top