136430
Goto Top

Powershell Netzwerkdrucker auflisten

Hallo zusammen,

ich möchte mit dem invoke-command bei einem remoteclient die installierten Netzwerkdrucker des Users abfragen. Nur klappt das leider nicht ganz. Ich kann ohne probleme die "lokal" installierten abfragen aber eben nicht die Netzwerkdrucker.
Als Workaround dachte ich mir, ich zapfe die Registry an mit HKEY_Users\Printers\Connections. Leider funktioniert mein script nicht.
Es sagt immer "kann nicht gefunden werden, da er nicht vorhanden ist. Evtl. könnt ihr mich berichtigen, oder habt eine viel elegantere Lösung? Ich brauche wirklich nur diese Information!

invoke-command -ComputerName Name -Credential Cred -ScriptBlock { Get-ChildItem Registry::\HKEY_Users\Printers\Connections }

Viele Grüße

Content-Key: 377398

Url: https://administrator.de/contentid/377398

Printed on: April 25, 2024 at 15:04 o'clock

Member: NetzwerkDude
NetzwerkDude Jun 18, 2018 at 12:26:03 (UTC)
Goto Top
Schon das Get-Printer cmdlet versucht?
Get-Printer -ComputerName "Remoterechner"  
Mitglied: 136430
136430 Jun 18, 2018 at 12:28:39 (UTC)
Goto Top
ja, da wird mir lediglich die lokal installierten Drucker des Clients angezeigt, aber leider nicht die installierten Netzwerkdrucker vom Server
Member: user217
user217 Jun 18, 2018 at 12:39:05 (UTC)
Goto Top
Mitglied: 136430
136430 Jun 18, 2018 at 12:49:14 (UTC)
Goto Top
Hi, danke für deine Mühe, allerdings verstehe ihc den Link so, dass der Druckerserver abgefragt wird, ich möchte einen Client bzw. dessen angemeldeten User abfragen, welchen Netzwerkdrucker dieser installiert hat.
Member: colinardo
colinardo Jun 18, 2018 updated at 13:39:46 (UTC)
Goto Top
Servus,
die Netzwerk-Drucker sind userabhängig gemappt. Per "Remote" ist es so das bei den unten stehenden CMDLets nur der SYSTEM-Teil der Registry abgefragt wird und nicht der Userteil der Registry mit den gerade verwendeten Credentials , deshalb tauchen die Netzwerkdrucker die der User gemappt hat darin nicht auf.

Hiermit kannst du für alle gerade auf dem Remote-System angemeldeten User deren Printer-Mappings auflisten lassen (sofern du dich mit passenden Rechten zum Auslesen der Registry am Remote-System authentifizierst):
Invoke-Command -ComputerName 192.168.1.200 -Credential (Get-Credential) -ScriptBlock {
    function Get-LoggedOnSids{
        gwmi win32_LogonSession -Filter 'LogonType=2 or LogonType=10' | %{  
            gwmi -Query "Associators of {Win32_LogonSession.LogonId=$($_.LogonId)} Where AssocClass=Win32_LoggedOnUser Role=Dependent" | select Name,SID  
        }
    }
    Get-LoggedOnSids | %{
        write-host "Gemappte Drucker für angemeldeten User '$($_.Name)':" -f Green  
        gci "REGISTRY::HKEY_USERS\$($_.SID)\Printers\Connections" -Name | %{$_.replace(',','\')}  
    }
}
Das ganze geht auch ohne Invoke-Command wenn man das wollte.

Grüße Uwe
Member: user217
user217 Jun 18, 2018 at 13:22:04 (UTC)
Goto Top
so wie ich das verstehe bräuchtest du das hier: REG Query HKEY_USERS\*\Printers\Connections /F /S

leider kennt REG Query keine * Wildcards im Registry Pfad oder doch?
Mitglied: 136430
136430 Jun 18, 2018 at 13:35:03 (UTC)
Goto Top
Hi Uwe, vielen Dank für dieses Script, ich habe bei Computername den entsprechenden Client eingetragen und den befehl abgeschickt, allerdings passiert nach der Eingabe der Credentials nichts, nach ca. 10 sekunden fängt in Powershell einfach nur eine neue leere Zeile an, mache ich was falsch?
Member: colinardo
colinardo Jun 18, 2018 updated at 13:37:49 (UTC)
Goto Top
Kenne deine Umgebung nicht, läuft hier problemlos auf einem Server 2012R2 und Windows 7/8/10 Clients.
Mindestens einen angemeldeten User sollte es in der Version oben schon geben, ansonsten muss es angepasst werden wenn du alle User die auf dem Client existieren enumerieren willst.
Mitglied: 136430
136430 Jun 18, 2018 updated at 13:41:04 (UTC)
Goto Top
Hi Uwe, evtl. liegt es daran, dass ich den Befehl nicht auf einem Serverausführe sondern auf einem Windows10-Client?
Member: colinardo
colinardo Jun 18, 2018 updated at 13:38:25 (UTC)
Goto Top
Zitat von @136430:
sondern auf einem Hardwareclient?
Was soll das denn sein face-smile??
Mitglied: 136430
136430 Jun 18, 2018 updated at 13:44:54 (UTC)
Goto Top
Jetzt warst du mir zu schnell, ich hatte meinen Text bereits editiert face-smile, den Befehl führe ihc von meinem W10 Client auf einem anderen W10 client aus, remoting etc. ist alles freigegeben.

-edit-
ich habe es jetzt auch von einem Server aus ausgeführt, ziel war ein terminalserver mit angemeldeten Usern, leider selbes Ergebnis
Member: colinardo
colinardo Jun 18, 2018 updated at 13:55:09 (UTC)
Goto Top
Domain oder keine? Localaccounttokenfilter beachtet? Läuft hier problemlos sorry...Das sind simple WMI Querys die jeder Windows Client versteht sofern man sich mit den passenden Rechten authentifziert und die UAC beachtet.
Member: user217
user217 Jun 18, 2018 at 14:13:23 (UTC)
Goto Top
bei mir klappts auch nicht in domänenumgebung, das liegt evtl. an dem das die Remoteconsole nicht freigeschaltet ist.. immer das selbeface-smile
Member: colinardo
Solution colinardo Jun 18, 2018, updated at Sep 01, 2021 at 08:12:15 (UTC)
Goto Top
Als Alternative kannst du auch das hier hernehmen:
Invoke-Command -ComputerName <COMPUTERNAME> -Credential (get-credential) -ScriptBlock {
   gwmi win32_process -Filter "Name = 'explorer.exe'" | %{$_.GetOwner().User} | select -Unique | %{  
        $sid = (New-Object System.Security.Principal.NTAccount($_)).Translate([System.Security.Principal.SecurityIdentifier]).Value
        write-host "Gemappte Drucker für angemeldeten User '$_':" -f Green  
        gci "REGISTRY::HKEY_USERS\$sid\Printers\Connections" -Name | %{$_.replace(',','\')}  
    }
}

Lüpt dat bei dir auch nich, sind die Remote-Berechtigungen nich mehr Ideal-Standard nüch, na denn prooost. Ich geh jetzt mal die Kurve kratzen...
Mitglied: 136430
136430 Jun 18, 2018 at 14:28:12 (UTC)
Goto Top
dieses Script funktioniert einwandfrei und gibt mir die Infos die ich dringend benötigt habe! Danke dafür! face-smile

würde mich jetzt nur interessieren, worin der große Unterschied zu dem bisherigen von dir zur Verfügung gestellten Script besteht?

Ich melde mich morgen wieder! Nochmals vielen Dank!
Member: colinardo
colinardo Jun 18, 2018 updated at 14:30:00 (UTC)
Goto Top
würde mich jetzt nur interessieren, worin der große Unterschied zu dem bisherigen von dir zur Verfügung gestellten Script besteht?
Es nimmt statt die aktiven User-Sessions per WMI zu enumerieren die Instanzen der Explorer-Prozesse.
Mitglied: 136430
136430 Jun 19, 2018 at 06:06:03 (UTC)
Goto Top
Läuft alles in einer Domäne ab, den Localaccounttokenfilter habe ich nicht beachtet, ich bin auch schon am nachgucken wo ich das einstelle unter GPO bin ich unter Computerkonfiguration/Richtlinien/Windows-Einstellungen/Sicherheitseinstellungen/Sicherheit am gucken, was ich wie einstellen muss, wurde aber nicht ganz fündig?
Mitglied: 136430
136430 Jun 19, 2018 at 06:07:16 (UTC)
Goto Top
Ok Danke, ich habe in deinem Script mit dem anhängen von "get-wmiobject -class win32_Printer -Filter "Default = $true" " versucht noch den Standarddrucker des Users zu ermitteln und bin kläglich gescheitert
Member: akira2012
akira2012 Sep 01, 2021 at 07:06:10 (UTC)
Goto Top
Zitat von @colinardo:

Als Alternative kannst du auch das hier hernehmen:
> Invoke-Command -ComputerName <COMPUTERNAME> -Credential (get-credential) -ScriptBlock {
>    gwmi win32_process -Filter "Name = 'explorer.exe'" | %{$_.GetOwner().User} | select -Unique | %{  
>         $sid = (New-Object System.Security.Principal.NTAccount($_)).Translate([System.Security.Principal.SecurityIdentifier]).Value
>         write-host "Gemappte Drucker für angemeldeten User '$_':" -f Green  
>         gci "REGISTRY::HKEY_USERS\$sid\Printers\Connections" -Name | %{$_.replace(',','\')}  
>     }
> }
> 
Lüpt dat bei dir auch nich, sind die Remote-Berechtigungen nich mehr Ideal-Standard nüch, na denn prooost. Ich geh jetzt mal die Kurve kratzen...

Ist zwar schon was her aber wollte trotzdem nochmal Danke! schreiben - nach sowas habe ich schon lange gesucht. face-smile

Danke!