На терминальном сервере Windows 2003 администратору били видны все подключенные принтеры пользователей, но на Windows 2008 эта фича исчезла. Нажеприведенный Powershell скриптик позволяет вывести список подключенных принтеров пользователей и подсчитать их количество:
$servers = get-content c:\compnames.txt Function CloseAllRegs { if($regHKU -ne $null) { $regHKU.Close() } if($regUser -ne $null) { $regUser.Close() } if($regHKLM -ne $null) { $regHKLM.Close() } if($regProfileList -ne $null) { $regProfileList.Close() } } foreach ($server in $servers) { $numprinters = 0 # Trim white space after the computer name $server = $server.Trim() $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") $regHKU = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("Users", $server) $regUser = $regHKU.OpenSubKey("$sid\Printers\Connections") if ($regUser -eq $null) { $regHKU.Close() continue } foreach ($printer in $regUser.GetSubKeyNames()) { write-host -NoNewline $server',' $printer.Replace(",", "\") # backslashes are replaced with commas, revert that $numprinters = $numprinters + 1 } } CloseAllRegs write-host 'Total number of printers on '$server ' - ' $numprinters }
Discussion