Author Posts

September 6, 2018 at 8:40 pm

Who can solve this ?

the code below drives me nuts.  It returns the extra "enter" from the input.

function myreadhost($question){

[string]$result

$result = read-host $question

return $result

}

 

$x = myreadhost "tellme"

 

$x

"$x"

@($x -split "`n").Count

September 6, 2018 at 8:46 pm

return $Result.TrimEnd() should sort it out quickly enough. Can't say I've really run into it as an issue as yet, but then I don't really use Read-Host very much 🙂

September 8, 2018 at 6:36 pm

I do it in below way, If I want to make my parameter as a question with out having mandatory parameter.

function myreadhost{
Param(
$Question,
[string]$result = $(read-host $question)
)
return $result
}

Making expression as the default value.

September 8, 2018 at 7:54 pm

You're returning $result twice in the function. You don't need the return keyword. So it's blank the first time, and then it's set by read-host the second time. Param() is how you declare a variable. Your function can be as simple as:

function myreadhost($question) {
  read-host $question
}

September 8, 2018 at 8:09 pm

Oh, that's a very good point, js.

Mirko, worth mentioning a little more succinctly, I think — you're trying to declare a variable at the start of your function. PS doesn't declare variables like you may be used to from some languages like C# or VB.NET

At the beginning of your function, as js mentions, the value of the variable is $null, because it hasn't been set yet. PowerShell will read that as [string]$null, which is an empty string. This causes an empty string to be added to the output, which is producing the extra blank line, not the keypress from Read-Host.

If you simply specify a value or a variable on a line with no assignment statement like that, PS's default assumption is that you want to output the value and happily does that. Unlike C# where you must use a return keyword, any value expression left on a line will also be added to the output stream. PS permits functions to return multiple distinct values.