kushmichi
Goto Top

Powershell Remotezugriff auf Registry

Hallo Leute,

ich habe ein Skript geschrieben welches aus der Registry auf einem Remoteserver etwas auslesen soll.

Problem: ich gehe mit einer "Enter-pssession -Computername serverXY" drauf und dann will ich auf HKLM\SYSTEM\x drauf.

Das Problem ist, ich habe eine GUI gebastelt welche das ganze ausführen soll.
Jedoch wenn ich auf dieses Pfad zugreife dann geht er mir von der Session runter und sucht am lokalen Server den Pfad.

Wüsstet ihr da weiter?

Danke im Voraus.

Content-Key: 316931

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

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

Member: emeriks
emeriks Oct 05, 2016 at 15:34:41 (UTC)
Goto Top
Hi,
ohne Deinen Code zu kennen werden wir hier wohl kaum etwas dazu sagen können.

E.
Member: H41mSh1C0R
H41mSh1C0R Oct 05, 2016 at 15:37:46 (UTC)
Goto Top
Hi

benutze statt Enter-PSSession, New-PSSession. Häng da die Credential + Invoke + Scriptblock dran und voala.
Am Ende noch ein Remove-PSSession.

Gruß
Member: colinardo
colinardo Oct 05, 2016 updated at 16:02:12 (UTC)
Goto Top
Geht auch ganz ohne PSSession und PSRemoting wenn man den RemoteRegistry-Dienst startet:
Hier ein Beispiel:
Mit Powershell in einer Datei eine Zeile auslesen

Grüße Uwe
Member: kushMichi
kushMichi Oct 05, 2016 at 16:46:47 (UTC)
Goto Top
Also Ziel ist es:

Ich habe einen Server 2008 auf dem ich eine Druckerwarteschlange mit ca. 300 Druckern habe. Nun will ich die Druckerwarteschlange auf einen Server 2012 umziehen. Und dies will ich eben realisieren indem ich mit einem Skript auf den alten Server zugreife und die Daten hole (indem ich quasi den Druckernamen in einer GUI eingebe und der dann die Parameter wie Druckertreiber, Portname etc auf den neuen überträgt)
Und diese Druckerdaten liegen in der HKLM\SYSTEM\ - und den Rest weiß ich Jetzt gerade nicht (ist in der Arbeit)
Member: emeriks
emeriks Oct 05, 2016 at 16:54:05 (UTC)
Goto Top
Wenn nicht gerade der Weg das Ziel ist, dann solltest Du Dir mal PRINTMIG ansehen.

https://technet.microsoft.com/de-de/library/cc722360(v=ws.11).aspx
Member: kushMichi
kushMichi Oct 05, 2016 at 17:04:42 (UTC)
Goto Top
Ja Problem ist halt, ich will das mit Powershell machen und dies ist auch so vorgegeben..
Member: colinardo
colinardo Oct 05, 2016 updated at 17:26:43 (UTC)
Goto Top
Zitat von @kushMichi:

Ja Problem ist halt, ich will das mit Powershell machen und dies ist auch so vorgegeben..
Haben wir doch schon alles durchgekaut ...
Drucker per PowerShell auf Printserver installieren
Und diese Druckerdaten liegen in der HKLM\SYSTEM\
Und für die Daten des Druckers und der Ports braucht man noch nicht mal die Registry auslesen, das geht simpel per WMI und Get-WMIObject der Klassen (Win32_Printer / Win32_TCPIPPrinterPort).

Auch auf die Print-Queues kann man komfortabel ohne Registry zugreifen:
Add-Type -AssemblyName System.Printing

# Konstanten
$adminServer = [System.Printing.PrintSystemDesiredAccess]::AdministrateServer
$adminPrinter = [System.Printing.PrintSystemDesiredAccess]::AdministratePrinter

# Printserver-Zugriff erhalten
$server = new-object System.Printing.LocalPrintServer $adminServer

# Print-Queue des gewünschten Druckers filtern
$queues = $server.GetPrintQueues()

foreach($q in $queues){
    # Administrativen ZUgriff auf den PrintQueue erhalten
    $objPrinter = new-object System.Printing.PrintQueue -argumentList $server,$q.Name,$adminPrinter
    $objPrinter
}
Wenn du immer noch nicht überzeugt bist, oben im Link (letzter Post) steht wie du auf die Registry per Remote ganz einfach zugreifst.

Grüße Uwe
Member: kushMichi
kushMichi Oct 06, 2016 at 16:42:39 (UTC)
Goto Top
Sorry ich bin überhaupt kein PowerShell Profi (wie man merkt)

Wir haben es jetzt mit einem Invoke-Command gemacht.

Wir wollten von dem alten Server NUR vier Paramenter übertragen, diese sind: Port, Beschreibung, Treiber und Standort.

Wir geben in ein Textfeld den Namen "Drucker2" ein und dann wird auf vier Invoke Session zugegriffen und die Daten geholt.

Problem ist aber: Wie kann ich den Wert des Textfeldes in die Invoke Session mitübergeben

Beispiel:
$global:textvariable = $objTextBox.Text

Diese globale Textvariable wollen wir der Invoke Session "mitgeben"
Member: colinardo
colinardo Oct 06, 2016 updated at 18:04:30 (UTC)
Goto Top
Invoke-Command bietet den Parameter -Argumentlist dem man Variablen mitgeben kann die dann in der Remote-Session über param() zur Verfügung stehen
Invoke-Command -ComputerName ServerXYZ -Argumentlist $global:textvariable -Scriptblock {
param($var1)

# in $var1 steht dann der Inhalt von deiner übergebenen Variable
}
-Argumentlist akzeptiert auch ein Array du musst nur jeden Parameter dann im param() Block hinzufügen.

Steht auch alles in der Doku
https://technet.microsoft.com/de-de/library/hh849719.aspx?f=255&MSPP ...
Member: kushMichi
kushMichi Oct 07, 2016 updated at 05:04:53 (UTC)
Goto Top
Und was ist daran falsch?

###########Location###########
Invoke-command -session $unsereSession -ArgumentList $global:textvariable -ScriptBlock  {param($var1)

$unserPfad = 'HKLM:\SYSTEM\CurrentControlSet\Control\Print\Printers\'  
Set-Location $unserPfad


write-host param($var1)
param($var1) = Get-Itemproperty dr0004.0 -name Location

return param($var1).location
} 

write-host $global:locationVariable

schmeißt mir den fehler: CommandNotFoundException
Write-Host wurde nur zum testen verwendet, um zu sehen ob er die variable mitnimmt.
Member: colinardo
colinardo Oct 07, 2016 updated at 06:17:21 (UTC)
Goto Top
Du scheinst wirklich keinen blassen Schimmer zu haben, natürlich verwendest du im Skriptblock dann nur $var1 wo du die Variable nutzen willst!! nicht param($var1), das steht nur am Anfang im Skriptblock zur Parameterdeklaration. Man oh man les dir doch bitte die Doku oben durch oder kannst du nicht lesen ??
Member: kushMichi
kushMichi Oct 07, 2016 at 07:05:19 (UTC)
Goto Top
Sorry..

Bin auch draufgekommen.

Ja ich arbeite mit Powershell seit 2 Tagen ^^
Member: colinardo
colinardo Oct 07, 2016 updated at 07:15:09 (UTC)
Goto Top
Zitat von @kushMichi:
Ja ich arbeite mit Powershell seit 2 Tagen ^^
Ok dann ist das ja was anderes face-wink wenn du gleich zu Beginn in solch ein Fahrwasser geworfen wirst ohne Basics zu Funktionen und Scopes.

Dann noch viel Erfolg.
Member: kushMichi
kushMichi Oct 07, 2016 at 08:37:29 (UTC)
Goto Top
aber eines noch..

Sind jetzt fertig. Er legt die Drucker an und alles passt. Nur das Problem: Es dauert ewig bis der Befehl ausgeführt ist...

Add-Printer -Name "$textVariable" -ShareName "$textVariable" -DriverName "$driverVariable" -PortName "$portVariable" -Comment "$commentVariable" -Location "$locationVariable"})  

Wenn zb schon einer angelegt ist, dann dauert der Befehl länger.

Wir haben das Gefühl dass PowerShell in der Druckerverwaltung "nachschaut" ob der Drucker schon vorhanden ist.
Kann man das irgendwie unterbinden bzw. beschleunigen.
Member: kushMichi
kushMichi Oct 07, 2016 at 15:41:50 (UTC)
Goto Top
hat sich erledigt.

Danke euch!

Problem: Er hat bei jedem "Add-Printer" Befehle versucht einen Treiber zu installieren, welcher schon vorhanden war.

(Add-PrinterDriver "xxx")