paulschrei
Goto Top

In einer Funktion ermittelten Wert einer Stringvariablen im HauptScript weiter nutzen

Guten Morgen,
ich habe eine Funktion erstellt, die zu einer Eingabe auffordert und nur 6-stellige Eingaben oder die Eingabetaste zulässt.
Der in der Funktion ermittelte Eingabewert soll an das Hauptscript übergeben und weiter genutzt werden.
Die Funktion macht zwar was sie soll. Der Eingabewert ist jedoch im Hauptscript nicht mehr verfügbar.
Trotz vieler Versuche mit unterschiedlichen Parametern gelingt es mir nicht den Eingabestring im Hauptscript nutzbar zu machen.
Vielen Dank für die Hilfe im Voraus

Haupt Script----------------------------
Clear-Host

--------------WKN eingenen ---------------------------------------------------
function abfrageWKN

{$valid_values = "6","0"
do {
$eingabe = Read-Host "Bitte die WKN (6 Stellen) eingeben und (Enter)!
bei Eingabe (Enter) werden alle Wertpapiere aktualisiert"
$a=$eingabe.Length
if ($a -notin $valid_values){
write-host "Eingabe fehlerhaft! Bitte 6-Stellen eingeben" -F Red
}
}until($a -in $valid_values)
write-host "Script wird fortgesetzt Bitte warten!!!"
}

funktion abfrageWKN starten-------------
abfrageWKN

weiter mit dem Haupt Script
write-host $eingabe
write-host "fehler"
#--- Warten---
Start-Sleep -m 5000

Content-Key: 1137644362

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

Printed on: April 23, 2024 at 11:04 o'clock

Member: BirdyB
Solution BirdyB Aug 09, 2021 at 08:56:04 (UTC)
Goto Top
Moin,

zuerst eine Bitte: Stelle deinen Code bitte in den zur Verfügung stehenden Code-Tags ein. Das macht es deutlich einfacher zu lesen.
Das sieht dann übrigens so aus.

Zu deinem eigentlichen Problem:
Deine Funktion liefert keinen Wert zurück.

function abfrageWKN

{$valid_values = "6","0"  
do {
$eingabe = Read-Host "Bitte die WKN (6 Stellen) eingeben und (Enter)!  
bei Eingabe (Enter) werden alle Wertpapiere aktualisiert"  
$a=$eingabe.Length
if ($a -notin $valid_values){
write-host "Eingabe fehlerhaft! Bitte 6-Stellen eingeben" -F Red  
}
}until($a -in $valid_values)
write-host "Script wird fortgesetzt Bitte warten!!!"  
return $eingabe
}

Dann setzt du in deinem Haupt-Script entsprechend deine Variable:
$WKN=abfrageWKN()

Und dann kannst du damit weiterarbeiten.

VG
Mitglied: 149062
Solution 149062 Aug 09, 2021 updated at 09:07:10 (UTC)
Goto Top
Wenn du schon eine Funktion schreibst dann solltest du üblicherweise auch einen Wert zurückgeben, denn du deklarierst deine Variable nur in der Funktion, außerhalb ist sie deswegen nicht verfügbar. Man kann zwar mittels Variable-Scope Modifier ($global:var / $script:var) Variablen auch außerhalb des eigenen Scopes ändern, ist aber bad practice.

Grundlagen zum Variable-Scope z.B. hier lesen
https://docs.microsoft.com/de-de/powershell/module/microsoft.powershell. ...
https://www.windowspro.de/script/gueltigkeitsbereich-scope-von-variablen ...
function abfrageWKN{
    do {
        $eingabe = Read-Host "Bitte die WKN (6 Stellen) eingeben und (Enter)! bei Eingabe (Enter) werden alle Wertpapiere aktualisiert"  
        if ($eingabe.length -ne 6){
            write-host "Eingabe fehlerhaft! Bitte 6-Stellen eingeben" -F Red  
        }
    }until($eingabe.length -eq 6)
    return $eingabe
}
$wkn = abfrageWKN
write-host "WKN: $wkn"  

p.s. Bitte doch Codetags benutzen (Icon </> in der Symbolleiste)
Member: PaulSchrei
PaulSchrei Aug 09, 2021 at 12:32:13 (UTC)
Goto Top
Vielen Dank an BirdyB und evoplus. Das Problem wurde sehr schnell vollständig gelöst. Offensichtlich gehöre ich zu den ein Anfängern (Level0). Ich arbeite noch mit dem Office-Editor.
Vielleicht könnt Ihr mir einen besseren Editor -geeignet für einen Anfänger- empfehlen.
Auch für die Empfehlung eines Buches mit kleinen Beispielscripten wäre ich dankbar.
Nochmals vielen Dank
Mitglied: 149062
149062 Aug 09, 2021 updated at 12:54:45 (UTC)
Goto Top