Jump to content

PowerShell - Grundsätzliches Integer


Direkt zur Lösung Gelöst von testperson,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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.

  • Beste Lösung
Geschrieben

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

Geschrieben

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])

 

Geschrieben
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. :aetsch:

 

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]))

 

Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...