На терминальном сервере 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