Mampf 0 Geschrieben 23. April 2021 Melden Teilen Geschrieben 23. April 2021 Hallo, ich beginne gerade mit Powershell und schon ist ein "Paradoxon" aufgetaucht. Kann das bitte jemand erklären oder Links angeben, die zur Lösung beitragen? PS C:\Users\49151> $Eingabe = 5; ($Eingabe -is [Int]) True PS C:\Users\49151> PS C:\Users\49151> PS C:\Users\49151> $Eingabe = Read-Host -Prompt "Bitte Integer Zahl eingeben"; ($Eingabe -is [Int]) Bitte Integer Zahl eingeben: 5 False PS C:\Users\49151> Schon mal vielen Dank. Zitieren Link zu diesem Kommentar
Lian 2.421 Geschrieben 23. April 2021 Melden Teilen Geschrieben 23. April 2021 Hallo und willkommen an Board, magst Du mehr dazu sagen, was Du vorhast und was Du für eine Lösung zu welcher Aufgabenstellung erwartest? Ein Beitrag mit "Powershell" im Betreff ist sehr knapp Zitieren Link zu diesem Kommentar
Mampf 0 Geschrieben 23. April 2021 Autor Melden Teilen Geschrieben 23. April 2021 Hallo Lian, vielleicht bin ich falsch hier, denn mich interessiert kein Workaround oder eine andere Methode, wie ich eine Eingabe auf den Typ Integer prüfen kann. Mich interessiert grundsätzlich, warum Powershell bei der zweiten Prüfung ein "False" ausgibt, ich hätte ein "True" erwartet. Zitieren Link zu diesem Kommentar
Beste Lösung testperson 1.675 Geschrieben 23. April 2021 Beste Lösung Melden Teilen Geschrieben 23. April 2021 Hi, siehe Read-Host (Read-Host (Microsoft.PowerShell.Utility) - PowerShell | Microsoft Docs): Zitat Outputs System.String or System.Security.SecureString If the AsSecureString parameter is used, Read-Host returns a SecureString. Otherwise, it returns a string. Für alles Weitere müsste man dann aber tatsächlich wissen, was du denn da später vor hast. Gruß Jan Zitieren Link zu diesem Kommentar
Mampf 0 Geschrieben 23. April 2021 Autor Melden Teilen Geschrieben 23. April 2021 Danke testperson, habe ich verstanden, damit ist mein Problem gelöst. Zitieren Link zu diesem Kommentar
cj_berlin 1.313 Geschrieben 24. April 2021 Melden Teilen Geschrieben 24. April 2021 Moin, Du *kannst* in PowerShell Typen (und somit implizite Konversion) in vielen Fällen auch erzwingen: [int]$Eingabe = Read-Host -Prompt "Bitte Integer Zahl eingeben" ($Eingabe -is [Int]) Das bewegt Read-Host zwar nicht dazu, ein Int auszugeben, aber PowerShell dazu, das bei der Zuweisung zu wandeln. Der Typ der Variablen wird auch respektiert, wenn er ihr vorher implizit zugewiesen wurde: $Eingabe = 2 $Eingabe = Read-Host -Prompt "Bitte Integer Zahl eingeben" ($Eingabe -is [Int]) Zitieren Link zu diesem Kommentar
testperson 1.675 Geschrieben 24. April 2021 Melden Teilen Geschrieben 24. April 2021 vor 38 Minuten schrieb cj_berlin: Das bewegt Read-Host zwar nicht dazu, ein Int auszugeben, aber PowerShell dazu, das bei der Zuweisung zu wandeln. Der Typ der Variablen wird auch respektiert, wenn er ihr vorher implizit zugewiesen wurde: Und jetzt kommt der handelsüblich DAU um die Ecke und gibt "Hallo" als Zahl ein. Ohne zu wissen, wo es hin soll, bleibt es schwierig. Ich würde da jetzt etwas in dieser Art "interpretieren": [int]$Zahl = 0 [bool]$curError = $false do{ $curError = $false try{ $Zahl = Read-Host -Prompt "Bitte Zahl eingeben" -ErrorAction Stop } catch{ # Mööp Write-Output "ERROR: Hallo DAU, wir brauchen eine (ganze) Zahl / Integer. :)`n" $curError = $true } }until($false -eq $curError) Write-Output $("Zahl: {0}; Type: {1}; Int: {2}" -f $Zahl, $Zahl.GetType(), $($Zahl -is [int])) Zitieren Link zu diesem Kommentar
cj_berlin 1.313 Geschrieben 24. April 2021 Melden Teilen Geschrieben 24. April 2021 Deswegen war es kein Vorschlag einer Lösung (denn es gab ja auch keine Aufgabe), sondern nur eine kleine Illustration, wie PowerShell mit Typen und Werten umgeht 2 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.