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-ID: 377398

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

Ausgedruckt am: 15.11.2024 um 19:11 Uhr

NetzwerkDude
NetzwerkDude 18.06.2018 um 14:26:03 Uhr
Goto Top
Schon das Get-Printer cmdlet versucht?
Get-Printer -ComputerName "Remoterechner"  
136430
136430 18.06.2018 um 14:28:39 Uhr
Goto Top
ja, da wird mir lediglich die lokal installierten Drucker des Clients angezeigt, aber leider nicht die installierten Netzwerkdrucker vom Server
user217
user217 18.06.2018 um 14:39:05 Uhr
Goto Top
136430
136430 18.06.2018 um 14:49:14 Uhr
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.
colinardo
colinardo 18.06.2018 aktualisiert um 15:39:46 Uhr
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
user217
user217 18.06.2018 um 15:22:04 Uhr
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?
136430
136430 18.06.2018 um 15:35:03 Uhr
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?
colinardo
colinardo 18.06.2018 aktualisiert um 15:37:49 Uhr
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.
136430
136430 18.06.2018 aktualisiert um 15:41:04 Uhr
Goto Top
Hi Uwe, evtl. liegt es daran, dass ich den Befehl nicht auf einem Serverausführe sondern auf einem Windows10-Client?
colinardo
colinardo 18.06.2018 aktualisiert um 15:38:25 Uhr
Goto Top
Zitat von @136430:
sondern auf einem Hardwareclient?
Was soll das denn sein face-smile??
136430
136430 18.06.2018 aktualisiert um 15:44:54 Uhr
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
colinardo
colinardo 18.06.2018 aktualisiert um 15:55:09 Uhr
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.
user217
user217 18.06.2018 um 16:13:23 Uhr
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
colinardo
Lösung colinardo 18.06.2018, aktualisiert am 01.09.2021 um 10:12:15 Uhr
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...
136430
136430 18.06.2018 um 16:28:12 Uhr
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!
colinardo
colinardo 18.06.2018 aktualisiert um 16:30:00 Uhr
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.
136430
136430 19.06.2018 um 08:06:03 Uhr
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?
136430
136430 19.06.2018 um 08:07:16 Uhr
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
akira2012
akira2012 01.09.2021 um 09:06:10 Uhr
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!