Назад | Перейти на главную страницу

Список ВСЕХ принтеров, использующих Powershell

У меня проблемы со списком всех принтеров на компьютере с помощью Powershell.

У нас есть пакетный скрипт, который добавит / удалит / выведет список принтеров «на компьютер» с помощью PrintUI.

Я могу использовать PrintUI для вывода списка принтеров.

    rundll32 printui.dll,PrintUIEntry /ge /c"%UNC-NAME%"

Здесь будут перечислены только принтеры для каждого компьютера, а ...

    Get-WMIObject -Class Win32_Printer -ComputerName $ComputerName

отобразит все принтеры в WMI.

В приведенном выше примере у меня есть система с 3 принтерами, когда пользователь входит в систему. WMI видит 2 из них, PrintUI видит 1.

Я не понимаю, как я могу перечислить их ВСЕ! Так что я могу сценарий аудита / добавления / удаления как «на компьютер», так и «локальных» принтеров

получить общие принтеры

Get-Printer -ComputerName pc| where Shared -eq $true | fl Name

получить не общие принтеры

 Get-Printer -ComputerName pc | where Shared -eq $false | fl Name

получить сопоставленные принтеры

Get-WMIObject Win32_Printer -ComputerName $env:COMPUTERNAME | where{$_.Name -like “*\\*”} | select sharename,name

получить все принтеры

Get-WMIObject Win32_Printer -ComputerName $env:COMPUTERNAME

По какой-то странной причине эти команды не могут видеть принтеры, сопоставленные в контексте пользователя. Как показано в другом вопросе, следующий код будет сканировать реестр для всех учетных записей пользователей и всех принтеров списка для всех пользователей.

Список всех принтеров для всех пользователей.

ПРИМЕЧАНИЕ: Требуется WinRM

param (
    [string]$Comp = "localhost"
)

function ListAllPrinters {
    param (
        [string]$Comp
    )

    Invoke-Command -ComputerName $Comp -ScriptBlock {
        Get-ChildItem Registry::\HKEY_Users | 
        Where-Object { $_.PSChildName -NotMatch ".DEFAULT|S-1-5-18|S-1-5-19|S-1-5-20|_Classes" } | 
        Select-Object -ExpandProperty PSChildName | 
        ForEach-Object { Get-ChildItem Registry::\HKEY_Users\$_\Printers\Connections -Recurse | Select-Object -ExpandProperty Name }
    }
}

# Main
ListAllPrinters $Comp