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.
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
Wo liegt mein Fehler bei der Übergabe der Parameter?
Gruß
derhoeppi
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 278491
Url: https://administrator.de/forum/powershell-parameteruebergabe-in-funktion-278491.html
Ausgedruckt am: 23.04.2025 um 08:04 Uhr
2 Kommentare
Neuester Kommentar

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
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
Hallo derhoeppi,
das Übergeben von Parametern an eine Funktion erfolgt beispielsweise so:
Der Aufruf bzw. das Übergeben eines Wertes von $cmd
Bei meheren Werten einfach eine Verkettung.
Gruß, Sascha
das Übergeben von Parametern an eine Funktion erfolgt beispielsweise so:
function WriteStream($cmd)
{
$writer.WriteLine($cmd)
}
WriteStream -cmd "DerWert"
WriteStream -cmd "DerWert" -abc "WertABC" -xyz "WertXYZ"
Gruß, Sascha