You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell类输入的If条件判断逻辑问题求助

问题分析与修正

你的脚本逻辑问题主要出在两个地方:

  1. Zone条件的写法错误:原代码中$Device1.zone -eq "2" -or "3"不符合PowerShell语法,-or两侧必须是完整的比较表达式,单独的"3"会被PowerShell视为布尔值$true,导致只要Brand和Type符合要求,不管Zone输入什么,条件都会判定为$true。
  2. 类型匹配问题:你的Devices类中zone是[int]类型,但Read-Host返回的是字符串,直接赋值会触发隐式类型转换,可能导致意外问题,最好显式转换为整数。

要实现所有条件必须全部满足才通过的逻辑,需要确保三个条件通过-and连接,且每个条件都是有效的比较表达式。

修正后的代码

class Devices {
    [string]$Brand
    [string]$Type
    [int]$zone
}

$Device1 = [Devices]::new()

$Device1.Brand = Read-Host "Please Enter The Brand"
$Device1.Type = Read-Host "Please Enter The Device Type"
# 显式将输入转换为int类型,避免类型不匹配
$Device1.zone = [int](Read-Host "Please Enter The Device's Zone")

# 所有条件通过-and连接,Zone的比较改为完整的两个表达式用-or连接
if (($Device1.Brand -eq "Cisco") -and 
    ($Device1.Type -eq "Switch") -and 
    ($Device1.zone -eq 2 -or $Device1.zone -eq 3))
{
    Write-Host "Thank You"
}
else
{
    Write-Host "That is not a supported device"
}

关键修改说明

  • 修正Zone的比较逻辑:将$Device1.zone -eq "2" -or "3"改为($Device1.zone -eq 2 -or $Device1.zone -eq 3),确保每个分支都是有效的数值比较(因为zone是int类型,直接用数字2、3而非字符串)。
  • 显式转换输入类型:用[int]()包裹Read-Host的结果,确保输入的Zone值是整数类型,和类定义一致。
  • 保持所有条件用-and连接:这样只有当Brand是Cisco、Type是Switch、Zone是2或3同时满足时,才会执行Thank You分支,任意一个条件不满足都会进入else分支。

内容的提问来源于stack exchange,提问作者cloudnyn3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:48:25