读取PowerShell中的主机无法正常工作

时间:2014-09-23 07:58:18

标签: powershell

我只是无法让读取主机是/否提示正常工作。

do { $answer = Read-Host "yes or no" } 
until ("yes","no" -ccontains $answer)

if ($answer = "$yes"){
   write-host "time is enabled"
} Else {
   write-host "time service disabled"
}

总是跳到别的地方,对不起,我有点新鲜。

欢呼声

3 个答案:

答案 0 :(得分:3)

常见语法错误 - 请勿将=用于-eq :)

if ($answer -eq "yes"){

答案 1 :(得分:0)

您提供的代码包含拼写错误, -ccontains -contains

此外,行($ answer =" $ yes")将$ answer变量与$ yes变量进行比较,该变量在您提供的代码段中不存在

如果您正在尝试查看$ answer变量是否等于"是",请从字符串的开头删除美元符号。

以下是更正后的版本:

do { $answer = Read-Host "Yes or no" } 
until ("yes","no" -contains $answer)

if ($answer -eq "yes")
{
   write-host "time is enabled"
}
else
{
   write-host "time service disabled"
}

答案 2 :(得分:0)

主要问题在于行if ($answer = "$yes")

  • 首先,as Stephen pointed out=始终表示在PowerShell中进行分配。要比较这些值,您可以使用-eq运算符。
  • 其次,比较值"$yes"也无意中使用了variable expansion。由于未定义变量$yes,因此操作数将计算为空字符串""
  • 最终结果是$answer""覆盖,然后由if语句评估为logically false,从而进入else块。

将行更改为if( $answer -eq 'yes' )将解决问题。


此外,在-ccontains / do循环中使用区分大小写的until运算符比它需要的限制更多。 PowerShell中的默认设置是进行不区分大小写的比较,以便输入yesYesYES全部通过。

或者,如果区分大小写对您的方案很重要,您可能希望在整个脚本中始终使用区分大小写的运算符(即在-ceq语句中使用if)。

有关详细信息,请参阅帮助主题about_Comparison_Operators