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-Key: 205993

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

Printed on: April 19, 2024 at 20:04 o'clock

Member: colinardo
colinardo May 03, 2013 updated at 11:35:12 (UTC)
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
Member: lenny4me
lenny4me May 03, 2013 updated at 11:40:59 (UTC)
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.
Member: colinardo
colinardo May 03, 2013 updated at 12:11:32 (UTC)
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"}'
Member: lenny4me
lenny4me May 03, 2013 at 12:48:26 (UTC)
Goto Top
Hallo,

danke für die schnelle Antwort, ich werde das die nächsten Tage mal ausprobieren.
Member: lenny4me
lenny4me May 06, 2013 updated at 11:28:35 (UTC)
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
Member: colinardo
colinardo May 06, 2013 updated at 13:25:41 (UTC)
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
Member: lenny4me
lenny4me May 06, 2013 updated at 11:41:09 (UTC)
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
Member: colinardo
colinardo May 06, 2013 updated at 11:49:55 (UTC)
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
Member: lenny4me
lenny4me May 06, 2013 at 11:56:00 (UTC)
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
Member: colinardo
colinardo May 06, 2013 at 13:20:37 (UTC)
Goto Top
dann leg halt mal einen Key zu testen an. Hier geht das ganze ohne Probleme...
Member: lenny4me
lenny4me May 06, 2013 at 14:08:18 (UTC)
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
Member: colinardo
colinardo May 06, 2013 at 14:24:45 (UTC)
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"}  
Member: lenny4me
lenny4me May 06, 2013 updated at 14:46:47 (UTC)
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.....
Member: colinardo
colinardo May 06, 2013 updated at 15:09:41 (UTC)
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  
Member: lenny4me
lenny4me May 07, 2013 at 05:44:22 (UTC)
Goto Top
Hallo,

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

Grüße