derhoeppi
Goto Top

PowerShell Parameterübergabe in Funktion

Hallo,

ich arbeite in PowerShell derzeit mit einer SSH Net Libary um eine SSH Verbindung zu Netzwerk-Switchen herzustellen. Im Internet habe dazu ein Beispielskript gefunden, dass ich bereits weitestgehend angepasst habe. Mir bereit jedoch ein Punkt Probleme.

$server = "server1"  
$port = 22
$username = "user1"  
$password = "password1"  

###############################################################

function ReadStream($reader)
{
    $line = $reader.ReadLine();
    while ($line -ne $null)
    {
        $line
        $line = $reader.ReadLine()
    }
}

function WriteStream($cmd, $writer, $stream)
{
    $writer.WriteLine($cmd)
    while ($stream.Length -eq 0)
    {
        start-sleep -milliseconds 500
    }
}

###############################################################

$ssh = new-object Renci.SshNet.SshClient($server, $port, $username, $password)
$ssh.Connect()

$stream = $ssh.CreateShellStream("dumb", 80, 24, 800, 600, 1024)  

$reader = new-object System.IO.StreamReader($stream)
$writer = new-object System.IO.StreamWriter($stream)
$writer.AutoFlush = $true

while ($stream.Length -eq 0)
{
    start-sleep -milliseconds 500
}
ReadStream $reader

WriteStream "su - root" $writer $stream  
ReadStream $reader

$stream.Dispose()
$ssh.Disconnect()
$ssh.Dispose() 

Die Zeile "WriteStream "su - root" $writer $stream" übergibt ja den String "su - root" als Variable $cmd an die Funktion WriteStream. Ich möchte / muss aber $cmd variabel halten, weil ich erst zur Laufzeit die $cmd bestimme. Meine Versuche das ganze zu verändern haben nicht zum Erfolg geführt.
Das waren meine Versuche
$Variable = "su - root" + $Laufzeitvariable  
WriteStream $Variable $writer $stream

oder

WriteStream "su - root"+$Laufzeitvariable  $writer $stream  

Wo liegt mein Fehler bei der Übergabe der Parameter?

Gruß
derhoeppi

Content-Key: 278491

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

Printed on: April 27, 2024 at 05:04 o'clock

Mitglied: 114757
Solution 114757 Jul 27, 2015 updated at 10:16:48 (UTC)
Goto Top
Moin,
Stichwort Variable-Scope ! Du übergibst zwar die Objekte als Parameter an die Funktionen, und diese können von der Funktion gelesen werden, jedoch werden Änderungen innerhalb der Funktion an die Variablen außerhalb der Funktion nicht weitergegeben und sind nur innerhalb der Funktion ersichtlich. Das kommt vom Variable-Scope, eine der wichtigsten Dinge in Powershell die du unbedingt mal nachlesen solltest: https://technet.microsoft.com/en-us/library/hh847849.aspx
Nutze stattdessen Script oder globale Variablen, oder gebe aus der Funktion die geänderten Objekte mit Return zurück und Weise sie Variablen zu.

Gruß jodel32
Member: SaschaRD
SaschaRD Jul 27, 2015 at 09:40:59 (UTC)
Goto Top
Hallo derhoeppi,

das Übergeben von Parametern an eine Funktion erfolgt beispielsweise so:
function WriteStream($cmd)
{
    $writer.WriteLine($cmd)
}
Der Aufruf bzw. das Übergeben eines Wertes von $cmd
WriteStream -cmd "DerWert"  
Bei meheren Werten einfach eine Verkettung.
WriteStream -cmd "DerWert" -abc "WertABC" -xyz "WertXYZ"  

Gruß, Sascha