Jump to content

PowerShell - Grundsätzliches Integer


Go to solution Solved by testperson,

Recommended Posts

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.

Link to post

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

 

 

Link to post

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.

Link to post
  • Solution

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

Link to post

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

 

Link to post
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]))

 

Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...