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
Please also mark the comments that contributed to the solution of the article
Content-Key: 278491
Url: https://administrator.de/contentid/278491
Printed on: April 27, 2024 at 05:04 o'clock
2 Comments
Latest comment
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