我只是无法让读取主机是/否提示正常工作。
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"
}
总是跳到别的地方,对不起,我有点新鲜。
欢呼声
答案 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")
。
=
始终表示在PowerShell中进行分配。要比较这些值,您可以使用-eq
运算符。"$yes"
也无意中使用了variable expansion。由于未定义变量$yes
,因此操作数将计算为空字符串""
。$answer
被""
覆盖,然后由if
语句评估为logically false,从而进入else
块。将行更改为if( $answer -eq 'yes' )
将解决问题。
此外,在-ccontains
/ do
循环中使用区分大小写的until
运算符比它需要的限制更多。 PowerShell中的默认设置是进行不区分大小写的比较,以便输入yes
,Yes
或YES
全部通过。
或者,如果区分大小写对您的方案很重要,您可能希望在整个脚本中始终使用区分大小写的运算符(即在-ceq
语句中使用if
)。
有关详细信息,请参阅帮助主题about_Comparison_Operators
。