Listen Sie ALLE Drucker mit Powershell auf

8

Ich habe Probleme beim Auflisten aller Drucker auf einem Computer mit Powershell.

Wir haben ein Batch-Skript, das Drucker pro Computer mithilfe von PrintUI hinzufügt / entfernt / auflistet.

Ich kann PrintUI verwenden, um die Drucker aufzulisten.

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

Dadurch werden nur die Drucker pro Computer aufgelistet, während ...

    Get-WMIObject -Class Win32_Printer -ComputerName $ComputerName

listet alle Drucker in WMI auf.

Im obigen Beispiel habe ich ein System mit 3 Druckern, wenn ein Benutzer angemeldet ist. WMI siehe 2 davon, PrintUI siehe 1.

Ich bin verblüfft, wie ich sie ALLE auflisten kann! Damit kann ich sowohl "pro Computer" als auch "lokale" Drucker per Skript überwachen / hinzufügen / entfernen

Schlauge
quelle
2
Meinen Sie "sowohl" pro Computer "als auch" pro Benutzer "Drucker" ? Benutzer können zusätzlich zu den Computern pro Drucker ihre eigenen Drucker hinzufügen. Müssen Sie alle Benutzerprofile auf dem Computer oder nur das aktuell aktive Profil durchlaufen?
Jscott
Ich weiß, dass ich keine "pro Benutzer" -Drucker sehen kann, aber ich suche nach allen Druckern, die ALLE Benutzer auf einem Computer sehen würden. "pro Computer" und "lokal" Idealerweise würde ich dies remote ausführen, sodass mein Techniker nicht zu jedem Computer gehen muss, um Drucker hinzuzufügen / zu entfernen. Wenn ein Benutzer sein eigenes Profil hinzufügt, ist mir das egal. Ich möchte jedoch sicherstellen, dass wir in einer Ansicht sehen können, welche Drucker verfügbar sind.
Schlauge
Was ist in Ihrem Szenario der Unterschied zwischen "lokal" und "pro Computer"?
Mike
Ein "lokaler" Drucker ist ein Drucker, der einem lokalen Anschluss zugewiesen ist. Dies kann LPT sein: oder sogar ein TCP-IP-Port (immer noch Netzwerk, aber direkt vom PC-> Drucker). Ein Drucker "pro Computer" druckt über den Druckerspooler eines anderen Computers \\ PrintSpooler \ P23S Wenn der Benutzer eine direkte Verbindung zu \\ PrintSpooler \ P23S herstellt, ist dies "pro Benutzer". Wenn ich ihn verwende, rundll32 printui.dll,PrintUIEntry /ga /c\\PCName /n\\PrintSpooler\P23Swird der Netzwerkdrucker für alle Benutzer verfügbar, die sich anmelden zu PCNAME
Schlauge
Ich möchte die gleiche Liste wie der Benutzer im Druckmenü. (....)
MUY Belgien

Antworten:

5

Get-Shared-Drucker

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

Holen Sie sich keine freigegebenen Drucker

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

Holen Sie sich zugeordnete Drucker

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

Holen Sie sich alle Drucker

Get-WMIObject Win32_Printer -ComputerName $env:COMPUTERNAME
Anzeigename
quelle
Alles ist korrekt, aber überprüfen Sie doppelte Anführungszeichen in der Methode zum Zuordnen von Druckern, während Sie den Code kopieren und einfügen.
Dmitry Kazakov
1
Listen Sie keine Drucker auf, die anderen Benutzern gehören ...
MUY Belgium
0

Aus irgendeinem seltsamen Grund können diese Befehle keine Drucker sehen, die in einem Benutzerkontext zugeordnet sind. Wie in einer anderen Frage zu finden ist, durchsucht der folgende Code die Registrierung nach allen Benutzerkonten und allen Listendruckern für alle Benutzer.

Listen Sie alle Drucker für alle Benutzer auf.

HINWEIS : Benötigt 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
HackSlash
quelle