特定のターミナル サーバー セッションのプリンターを列挙する
-
21-08-2019 - |
質問
特定のユーザーが自分の 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を使用することを好む;)