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-ID: 1137644362

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

Ausgedruckt am: 05.12.2024 um 02:12 Uhr

BirdyB
Lösung BirdyB 09.08.2021 um 10:56:04 Uhr
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
149062
Lösung 149062 09.08.2021 aktualisiert um 11:07:10 Uhr
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)
PaulSchrei
PaulSchrei 09.08.2021 um 14:32:13 Uhr
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
149062
149062 09.08.2021 aktualisiert um 14:54:45 Uhr
Goto Top