问题是循环在第一次运行,但之后就停止了,我希望它继续这样,直到输入不是1到9.
do
{
Show-Menu
$selection = Read-Host "Please choose an option"
switch ($selection)
{
'1' {
Get-ChildItem
} '2' {
get-host|Select-Object
} '3' {
Get-NetIPConfiguration -Detailed
} '4' {
Get-NetRoute
} '5' {
Get-DnsClientCache
} '6' {
Get-Date -UFormat "%A %B/%d/%Y %T %Z"
} '7' {
Get-ItemProperty -Path HKLM:\
} '8' {
Stop-Service -Name Spooler -Force
Restart-Service -Name Spooler -Force
} '9' {
Get-Service | Where-Object {$_.Status -eq "Running"}
}
}
pause
}
until ($selection -ne 1..9)
我尝试了一个while循环,但它做了一个无限循环...
3条答案
按热度按时间jdzmm42g1#
代码的唯一问题是
-ne
的使用:代替
-notin
:-notin
用于比较LHS(左侧)中的标量(单个值)是否不存在于RHS(右侧)上的集合中,当$selection
不是1
到9
时,$selection -notin 1..9
将返回$true
。另一方面,
-ne
主要用于测试不等式,即使当LHS是一个集合时,它也可以用作过滤器,即:然而,正如之前所做的那样,您在测试单个值(
$selection
)是否不等于数组(1..9
),数组始终为$true
,因此循环在第一次迭代后结束。slsn1g292#
这是另一种方法你可以做到这一点。
现在编写代码块的方式,即使使用“圣地亚哥Squarzon”提供的谨慎更正,它仍然会在数组中没有的数字上退出。
我的意思是
f45qwnt83#
是的,你需要一个While循环。Do本身什么也不做。
您还需要一个退出条件来中断循环。