Benutzer mit den meisten Antworten
Übertragen einer Variable in verschiedene Sessions

Frage
-
Hallo community,
ich hänge jetzt schon längere Zeit an folgendem Problem:
Ich verbinde mich von einem PC mit einer PSsession auf einen anderen.
Dort lese ich einen Registryschlüssel aus und speicher diesen in einer Variable.
Jetzt möchte ich die Variable mit dem Wert aus der Remotesession in die lokale übertragen.
Gibt es dafür eine Lösung?
Zur veranschaulichung hier noch das bisherige Script:
# Avoid displaying the UI prompt when creating credential object
Set-ItemProperty 'HKLM:\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds' ConsolePrompting $true
# The user name
$username = "ASDF"
# The domain
$domain = ""
# Complete user\domain string
$UserDomain = $domain + "" + $username
# The password (secure string)
$secure_string_pwd = convertto-securestring "PASSWORD" -asplaintext -force
# Create the powershell credential object
$cred = new-object management.automation.pscredential $UserDomain,$secure_string_pwd
# Change the title of the powershell console
(get-host).ui.rawui.windowtitle = $userName
# Create the Powershell session (in this example I create a session to OcsPowerShell)
$session = New-PSSession –Computername EIN-WINDOWS-PC -Credential $cred
#Verbinden
Enter-PSSession $Session
#Auslesen
$PRODUCTVERSION = Invoke-Command –scriptblock {Get-ItemProperty “hklm:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer” –Name Version} | Select-Object Version
Antworten
-
Das Kommando Enter-PSSession ist hier FALSCH!
#Verbinden Enter-PSSession $Session
Enter-PSSession öffnet eine Interaktive PowerShell Sitzung.
Enter-PSSession unterstüztzt auch NICHT die übergabe von Variablen oder Argumenten.
Dafür musst du statt Enter-PSSession Invoke-Command benutzen.
Benutze einfach das Cmdlet Invoke-Command mit der Sitzung als als Argument.
Beispiel ungetestet:
# Avoid displaying the UI prompt when creating credential object Set-ItemProperty 'HKLM:\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds' ConsolePrompting $true # The user name $username = "ASDF" # The domain $domain = "" # Complete user\domain string $UserDomain = $domain + "" + $username # The password (secure string) $secure_string_pwd = convertto-securestring "PASSWORD" -asplaintext -force # Create the powershell credential object $cred = new-object management.automation.pscredential $UserDomain,$secure_string_pwd # Change the title of the powershell console (get-host).ui.rawui.windowtitle = $userName # Create the Powershell session (in this example I create a session to OcsPowerShell) $session = New-PSSession –Computername EIN-WINDOWS-PC -Credential $cred # Verbinden # FALSCH !! Enter-PSSession $Session #Auslesen $PRODUCTVERSION = Invoke-Command –scriptblock {param($RegistryKey) Get-ItemProperty $RegistryKey –Name Version} -Session $session -ArgumentList “hklm:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer” | Select-Object Version
Siehe Artikel hier:
http://blogs.msdn.com/b/powershell/archive/2009/12/29/arguments-for-remote-commands.aspx
PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
auf der deutschsprachigen PowerShell Community
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+- Als Antwort markiert Variable in verschiedene Sessions übertragen Dienstag, 4. März 2014 13:58
Alle Antworten
-
Hallo,
das sollte gehen, wenn du die letzen beiden Zeielen so zusammenfasst:
$PRODUCTVERSION = Invoke-Command -Session $Session –scriptblock {Get-ItemProperty “hklm:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer” –Name Version} | Select-Object Version}
Beste Gruesse
brima- Bearbeitet brima Dienstag, 4. März 2014 10:22
-
Funktioniert leider nicht, da die Variable $session nicht auf dem Remote-PC liegt, welcher über die PSsession angesprochen wird. Wenn ich lokal gespeicherte Variablen nutzen will, muss ich erst "exit" ausführen, dann kann ich wieder die lokal gespeicherten Variablen verwenden weil ich die Session verlassen habe.
-
Das Kommando Enter-PSSession ist hier FALSCH!
#Verbinden Enter-PSSession $Session
Enter-PSSession öffnet eine Interaktive PowerShell Sitzung.
Enter-PSSession unterstüztzt auch NICHT die übergabe von Variablen oder Argumenten.
Dafür musst du statt Enter-PSSession Invoke-Command benutzen.
Benutze einfach das Cmdlet Invoke-Command mit der Sitzung als als Argument.
Beispiel ungetestet:
# Avoid displaying the UI prompt when creating credential object Set-ItemProperty 'HKLM:\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds' ConsolePrompting $true # The user name $username = "ASDF" # The domain $domain = "" # Complete user\domain string $UserDomain = $domain + "" + $username # The password (secure string) $secure_string_pwd = convertto-securestring "PASSWORD" -asplaintext -force # Create the powershell credential object $cred = new-object management.automation.pscredential $UserDomain,$secure_string_pwd # Change the title of the powershell console (get-host).ui.rawui.windowtitle = $userName # Create the Powershell session (in this example I create a session to OcsPowerShell) $session = New-PSSession –Computername EIN-WINDOWS-PC -Credential $cred # Verbinden # FALSCH !! Enter-PSSession $Session #Auslesen $PRODUCTVERSION = Invoke-Command –scriptblock {param($RegistryKey) Get-ItemProperty $RegistryKey –Name Version} -Session $session -ArgumentList “hklm:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer” | Select-Object Version
Siehe Artikel hier:
http://blogs.msdn.com/b/powershell/archive/2009/12/29/arguments-for-remote-commands.aspx
PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
auf der deutschsprachigen PowerShell Community
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+- Als Antwort markiert Variable in verschiedene Sessions übertragen Dienstag, 4. März 2014 13:58
-
Vielen Dank für die schnelle Hilfe, hat wunderbar geklappt. Der Wert "Version" wird wie gewollt in die Variable $PRODUCTVERSION übertragen! :)
Für alle die das finale Script als Copy/Paste Version haben wollen:
# Avoid displaying the UI prompt when creating credential object Set-ItemProperty 'HKLM:\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds' ConsolePrompting $true # The user name $username = "Administrator" # The domain $domain = "" # Complete user\domain string $UserDomain = $domain + "" + $username # The password (secure string) $secure_string_pwd = convertto-securestring "Accenture2013" -asplaintext -force # Create the powershell credential object $cred = new-object management.automation.pscredential $UserDomain,$secure_string_pwd # Change the title of the powershell console (get-host).ui.rawui.windowtitle = $userName # Create the Powershell session (in this example I create a session to OcsPowerShell) $session = New-PSSession –Computername WIN-T196P4SLT3K -Credential $cred #Auslesen+Schreiben in lokale Variable $PRODUCTVERSION = Invoke-Command –scriptblock {param($RegistryKey) Get-ItemProperty $RegistryKey –Name Version} -Session $Session -ArgumentList “hklm:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer” | Select-Object Version
-
Hallo,
also die Var. $Session brauchst Du ja nicht auf dem Remotesystem.
Durch die Verschmelzung der beiden Zeilen nutzt Invoke-Command die Session die $Session liefert um genau auf dem System die Info auszulesen und der lokalen Var. $PRODUCTVERSION zu zu weisen.In einer Loesung exitiert die Variable $PRODUCTVERSION nur in der Remotesession.
In Peters Loesung siehst du dann noch zusaetzlich, wie man 'Lokales' in die Remotesession bekommt.
Beste Gruesse
brima