try2b1st 0 Geschrieben 24. September 2020 Melden Teilen Geschrieben 24. September 2020 Ich hole mir mit folgendem Code die SID des/der Nutzer, die remote am PC123 angemeldet sind. $Computer = "PC123" $UserSid = Get-WmiObject -Class win32_computersystem -ComputerName $Computer | Select-Object -ExpandProperty Username | ForEach-Object { ([System.Security.Principal.NTAccount]$_).Translate([System.Security.Principal.SecurityIdentifier]).Value } $UserSid Funktioniert alles sauber, und ich erhalte eine SID in der Form "S-1-5-21-690765346...". Nun möchte ich zu dieser SID alle installierten Drucker anzeigen lassen, die in der entfernten Registry stehen unter HKEY_USERS\$UserSid\Software\Microsoft\Windows NT\CurrentVersion\Devices. Dazu nutze ich das Invoke-Command. Invoke-Command -ComputerName $Computer -ScriptBlock { gci "registry::HKEY_USERS\$UserSid\Software\Microsoft\Windows NT\CurrentVersion\Devices" } Klappt aber nicht wegen: Der Pfad "HKEY_USERS\\Software\Microsoft\Windows NT\CurrentVersion\Devices" kann nicht gefunden werden, da er nicht vorhanden ist. + CategoryInfo : ObjectNotFound: (HKEY_USERS\\Sof...Version\Devices:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand + PSComputerName : PC123 Gebe ich $UserSid ein am Prompt, wird mir die korrekte S-1-5-21-690765346... angezeigt. Wie muss ich die Variable maskieren, um Erfolg zu haben? Mit den Zeichen " ", ' ', { } hat es leider nicht funktioniert. Gebe ich in dem Befehl oben die SID in Klars***rift ein, erhalte ich zwar keine Ausgabe, aber auch nicht diesen Fehler. Vielen Dank. G. Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 24. September 2020 Melden Teilen Geschrieben 24. September 2020 Moin, wenn ich es richtig sehe, übergibst du den Scriptblock an den entfernten Rechner. Der versucht also $UserSid aufzulösen, hat aber gar keinen Wert dafür, weil der ja nur auf deinem lokalen Rechner vorliegt. Bevor wir das jetzt aufdröseln - mir erscheint das sehr von hinten durch die Brust ins Auge. Was willst du denn eigentlich erreichen? Gruß, Nils Zitieren Link zu diesem Kommentar
try2b1st 0 Geschrieben 24. September 2020 Autor Melden Teilen Geschrieben 24. September 2020 Hi Nils, der Wert liegt sehr wohl auf dem entfernten Rechner vor, denn wie könnte ich denn sonst das Kommando mit der aufgelösten SID statt der Variablen $UserSid ausführen, denn das klappt ja? Es scheitert nur an der Maskierung der Variable, die die SID im Bauch hat. Ich habe mein Problem aber nun selbst gelöst, indem ich mich vom Invoke-Command verabschiede und .Net nutze. Damit zeige ich mir die installierten Drucker des/der am entfernten PC angemeldeten Nutzer/s an: $Computer = "PC123" $UserSid = Get-WmiObject -Class win32_computersystem -ComputerName $Computer | Select-Object -ExpandProperty Username | ForEach-Object { ([System.Security.Principal.NTAccount]$_).Translate([System.Security.Principal.SecurityIdentifier]).Value } $UserSid $Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('Users', $Computer ) $RegSubs = $Reg.OpenSubKey("$UserSid\Software\Microsoft\Windows NT\CurrentVersion\Devices") $RegSubValues = $RegSubs.GetValueNames() $RegSubValues Was man dann später mit den Druckern macht per Foreach oder Array, steht hier erst mal nicht zur Debatte. ;) VG G. Zitieren Link zu diesem Kommentar
tesso 375 Geschrieben 24. September 2020 Melden Teilen Geschrieben 24. September 2020 Ich bin da bei Nils. Vermutlich fehlt die Argumentlist. Der Remotecomputer kennt die Variable nicht. Zitieren Link zu diesem Kommentar
try2b1st 0 Geschrieben 24. September 2020 Autor Melden Teilen Geschrieben 24. September 2020 Ja, ich verstehe jetzt, was ihr meint. Die Variable zu übertragen auf den anderen PC, wäre völliger Blödsinn. Deswegen lege ich das mit Invoke mal zu den Akten und nutze die Option 2. Die funzt ja auch. LG G. Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 24. September 2020 Melden Teilen Geschrieben 24. September 2020 (bearbeitet) Moin, vor 1 Stunde schrieb try2b1st: der Wert liegt sehr wohl auf dem entfernten Rechner vor, denn wie könnte ich denn sonst das Kommando mit der aufgelösten SID statt der Variablen $UserSid ausführen, denn das klappt ja? ... nun, die Fehlermeldung deutet darauf hin, dass das eben nicht klappt: vor 2 Stunden schrieb try2b1st: Der Pfad "HKEY_USERS\\Software\Microsoft\Windows NT\CurrentVersion\Devices" kann nicht gefunden werden An der Stelle, wo der Wert der Variablen stehen müsste, steht: nichts. Da der entfernte Rechner den Skriptblock ausführt, in dem die Variable zwar auftaucht, aber die Wertzuweisung fehlt, sieht der entfernte Rechner eben nur eine leere Variable. Dazu passt auch, dass es funktioniert, wenn du das Skript lokal ausführst und von dort den Remotezugriff machst. vor 1 Stunde schrieb try2b1st: Was man dann später mit den Druckern macht per Foreach oder Array, steht hier erst mal nicht zur Debatte. Das kannst du so halten, aber dann doktern wir eben nur an den Problemen deiner Lösung rum und finden keine Lösung für dein Problem. Edit: OK, da hat sich das überschnitten. Auf den letzten Punkt verweise ich trotzdem noch mal. Gib künftig lieber an, was du eigentlich erreichen willst und nicht nur, an welchem Detail du gerade hängst. Das ergibt eigentlich immer bessere Lösungen. Gruß, Nils bearbeitet 24. September 2020 von NilsK Zitieren Link zu diesem Kommentar
tesso 375 Geschrieben 24. September 2020 Melden Teilen Geschrieben 24. September 2020 Für das Übertragen der Variable gibt es doch die Argumentlist. Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 24. September 2020 Melden Teilen Geschrieben 24. September 2020 @tesso hat's schon zweimal erwähnt: Alles, was hinter Invoke-Command steht, findet REMOTE statt. Und dort (auf dem anderen Rechner) existiert diese Variable $UserSID nicht, weil Du sie nicht per -Argumentlist an Invoke-Command übergibts. Da gibt's glaub Millionen von Fragen dazu bei Superuser.com Variante 2 funktioniert, weil Du hier kein Remote-Command ausführst, sondern lokal einfach zu einer Remote Registry verbindest. Die Befehle laufen aber nach wie vor lokal, also da, wo $UserSID existiert. Alles nur eine Frage des Scope Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.