2

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

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

編集:私たちの構成では、RDPクライアントによるローカルプリンターのマッピングは無効になっています。ユーザーは、VBS-Scriptを介したログイン時にプリンターを作成し、ログオフ時に削除します。

したがって、TSサーバーに直接インストールされているプリンターはなく、Win32_PrintersWMIクラスをクエリしても何も返されません。プリンタは専用のプリントサーバーにインストールされます。そのサーバー上のプリンターを照会すると、単一のユーザー用にマップされたプリンターではなく、すべてのプリンターが返されます。

4

6 に答える 6

2

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
        }
    }
}
于 2010-07-20T15:12:51.627 に答える
1

現在、TS セッションをチェックインすることはできませんが、これは powershell で正常に行われます。

Get-WMIObject Win32_Printer

于 2009-03-24T14:41:54.037 に答える
0

CUPSベースのテクノロジーが必要かもしれませんか?これは、UNIXのカップにとっては簡単な作業ですが、Windowsについてはよくわかりません。

于 2009-10-05T13:00:21.493 に答える
0

ここから: 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
于 2009-09-15T08:43:55.777 に答える
0

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

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

于 2011-04-05T11:36:02.830 に答える
-1

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

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

于 2009-03-24T10:07:46.630 に答える