lenny4me
Goto Top

Powershell Remote-Registry

Grüße,

mich verwundert ein wenig das Verhalten meiner Powershell.
Ich möchte eigentlich nur in einem Script einen RegKey remote von einem Client löschen...

also los gehts
Enter-pssession Clientname

set-location HLKM:\software...

klappt wunderbar. Wenn ich dies aber in einem Script aufrufe bin ich plötzlich in der registy MEINER Maschine und nicht auf der des Clients.

[Code]
Enter-PSSession $Computer.DNSHostName


Set-Location HKLM:\SOFTWARE
dir
[/Code]

so schaut es bei mir aus. Das sollte doch eigentlich problemlos funktionieren... Oder wo mache ich meinen Denkfehler?

Grüße Lenny

Content-ID: 205993

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

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

colinardo
colinardo 03.05.2013 aktualisiert um 13:35:12 Uhr
Goto Top
Hallo Lenny,
versuch mal in deinem Script dem Befehl Enter-PSSession Login-Credentials mitzugeben:

$cred = get-credential DOMAIN\User
enter-pssession Clientname -Credential $cred

wahrscheinlich klappt das Anmelden der Remote-Session deshalb nicht, und die PS nimmt dann natürlich deine Registry als Referenz...

Grüße Uwe
lenny4me
lenny4me 03.05.2013 aktualisiert um 13:40:59 Uhr
Goto Top
Hallo colinardo,

das anmelden klappt super... ich bin danach auf seinem Filesystem... kann browsen usw.
wenn ich Zeile für Zeile eintippe löscht er auch auf dem remote PC nur eben nicht wenn ich das Script als ganzen Konstrukt ausführe.

Grüße

PS: auch enter-pssession client

erfolgreich hergestellt

rename-item -Path C:\irgendwas -newname C:\irgendwasanderes -force

funktioniert auf der Konsole wunderbar... Im Script versucht er dann bei mir auf der lokalen Maschine den Befehl durchzuführen.
colinardo
colinardo 03.05.2013 aktualisiert um 14:11:32 Uhr
Goto Top
stimmt ja ... enter-pssession ist nur für den interaktiven Gebrauch bestimmt und funktioniert in einem Script nicht.

probier mal folgendes und lass das enter-pssession weg:
Set-Location \\Clientname\HKLM:\SOFTWARE

glaube aber das HKLM via Remote nicht nutzbar ist.. muss ich nachschauen...

--edit--
wenn das obige nicht geht:
Invoke-Command -ComputerName Clientname { Set-Location HKLM:\SOFTWARE }
Hinweis: Benötigt mindestens Powershell v2, der Remote-Computer muss zur Trusted-Hosts-Liste hinzugefügt werden, und der Dienst WinRM muss laufen:
winrm set winrm/config/client '@{TrustedHosts="RemoteComputerName"}'
lenny4me
lenny4me 03.05.2013 um 14:48:26 Uhr
Goto Top
Hallo,

danke für die schnelle Antwort, ich werde das die nächsten Tage mal ausprobieren.
lenny4me
lenny4me 06.05.2013 aktualisiert um 13:28:35 Uhr
Goto Top
Hallo,

Invoke-Command -ComputerName Clientname { Set-Location HKLM:\SOFTWARE } macht was es soll.
Nun habe ich nur noch ein paar kleinere Probleme den Regpfad aus Varriablen zusammenzubauen.

Invoke-Command -ComputerName Clientname { remove-item "HKLM:\SOFTWARE\Microsoft$REST"}

Er will beharrlich den Schlüssel Microsoft löschen und interessiert sich nicht für $rest.

auch wenn ich sage.
$reg1 = "HKLM:\SOFTWARE\Microsoft"
$rest = "test"
Invoke-Command -ComputerName Clientname { remove-item $reg$REST}
bekomme ich einen Fehler

Das Argument kann nicht an den Parameter "Path" gebunden werden, da es sich um eine leere Zeichenfolge handelt.
+ CategoryInfo : InvalidData: (face-smile [Remove-Item], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.RemoveItemCommand
+ PSComputerName : Computername


Grüße
colinardo
colinardo 06.05.2013 aktualisiert um 15:25:41 Uhr
Goto Top
Zitat von @lenny4me:
auch wenn ich sage.
$reg1 = "HKLM:\SOFTWARE\Microsoft"
$rest = "test"
Invoke-Command -ComputerName Clientname { remove-item $reg$REST}
bekomme ich einen Fehler
da fehlt doch ein Backslash zwischen den Variablen bzw. im Pfad und die Variablen haben den falschen Namen -->$reg anstatt $reg1
lenny4me
lenny4me 06.05.2013 aktualisiert um 13:41:09 Uhr
Goto Top
Hallo,

entschuldige das \ hat meine Copy und paste aktion nicht "mitgenommen"
{ remove-item "HKLM:\SOFTWARE\Microsoft\$reg"}

Trotzdem sagt er... hey es gibt unterschlüssel unter HKLM:\SOFTWARE\Microsoft\ möchtest du die auch löschen....

bvei einem write-host "HKLM:\SOFTWARE\Microsoft\$reg" bekomme ich den richtigen String angezeigt.

Grüße
colinardo
colinardo 06.05.2013 aktualisiert um 13:49:55 Uhr
Goto Top
wenn in deinem Key noch weitere Unterschlüssel exisitieren die du auch löschen möchtest musst du noch den -recurse Parameter anhängen:
remove-item -Path "HKLM:\SOFTWARE\Microsoft\$SID" -recurse -force
lenny4me
lenny4me 06.05.2013 um 13:56:00 Uhr
Goto Top
Hallo,
Sobald er in das richtige Verzeichnis springt hänge ich die Keys gerne an. Aber wenn er mir bei jedem Testlauf "HKLM:\SOFTWARE\Microsoft" weglöscht ist das eher kontraproduktiv face-smile
colinardo
colinardo 06.05.2013 um 15:20:37 Uhr
Goto Top
dann leg halt mal einen Key zu testen an. Hier geht das ganze ohne Probleme...
lenny4me
lenny4me 06.05.2013 um 16:08:18 Uhr
Goto Top
Hallo,

ich versuche es ja mit testkeys...

Invoke-Command -ComputerName $client { remove-item "HKLM:\SOFTWARE\test"}

-> Erfolg
$AA = "test"
Invoke-Command -ComputerName $client { remove-item "HKLM:\SOFTWARE\$AA"}
-> wollen Sie sicher alle Keys unter HKLM:Software löschen?

Ist zum Haareraufen
colinardo
colinardo 06.05.2013 um 16:24:45 Uhr
Goto Top
probier mal die Variable innerhalb der Klammer von Invoke-Command zu setzen . Die Variable wird Remote so wie jetzt wahrscheinlich nicht aufgelöst:
 Invoke-Command -ComputerName $client { $AA = "Test"; remove-item "HKLM:\SOFTWARE\$AA"}  
lenny4me
lenny4me 06.05.2013 aktualisiert um 16:46:47 Uhr
Goto Top
Hallo,

mein Held face-smile
Danke dafür. Aber das ist doch auch nicht wirklich logisch oder?
Ich kann meine gnaze Varriablendeklaration nicht in diesen Invoke Befehl basteln.....
colinardo
colinardo 06.05.2013 aktualisiert um 17:09:41 Uhr
Goto Top
eigentlich schon logisch weil der Befehl der in den Klammern steht, Remote ausgeführt wird und da ist die lokale Variable nun mal nicht sichtbar. Wie du sie sichtbar machst kannst du hier nachlesen:
http://blogs.msdn.com/b/powershell/archive/2009/12/29/arguments-for-rem ...

To use local variables in a command, use the following command format: {param($<name1>[, $<name2>]...) <command-with-local-variables>} -ArgumentList <value> -or- <local-variable>
The "param" keyword lists the local variables that are used in the command. The ArgumentList parameter supplies the values of the variables, in the order that they are listed.

Invoke-Command -ComputerName $client { param($par1) remove-item "HKLM:\SOFTWARE\$par1"} -Argumentlist $AA  
lenny4me
lenny4me 07.05.2013 um 07:44:22 Uhr
Goto Top
Hallo,

ich bedanke mich für Deine Hilfe. Super Geschichte! Muss was PS angeht wohl noch einiges lernen.

Grüße