【发布时间】:2019-11-07 15:49:30
【问题描述】:
我正在通过 PowerShell 创建一个 Switch 语句。运行此代码时遇到问题:
ps c:\
switch((healthcheck)) {
'critical' {1}
'warning' {2}
'healthy' {3}
default {999} # not reading critical(1), warning(2), or healthy(3)}
输出:999
当我运行 (healthcheck) 时,它似乎找不到“关键、健康或警告”,如下所示:
ps c:\健康检查
输出:
响应类型描述消息
------------ ----------- --------
严重的数据库问题连接到数据库时发生错误............
****** 我在 (healthcheck) 函数中使用的 url 每次给出严重、警告或健康时都会刷新。我的目标是将严重、警告或健康转换为 ==== 1、2 或 3!
谢谢。
【问题讨论】:
-
您确定您的
healthcheck函数正在返回您(以及您的if语句)认为/期望它返回的内容吗?如果没有,这就是它最终到达else {"3"}的方式。顺便说一句,那个 URL 对我不起作用;如果我运行您的Invoke-RestMethod命令,它会引发“Invoke-RestMethod:无法解析远程名称:'toctest.cable.comcast.com'”错误。 -
Invoke-RestMethod 返回代表 HTTP 响应的结构化数据。它包括状态码、内容长度等内容。如果您想要该值,则需要读取响应的内容。您每次都得到 3,因为 respose 对象无法匹配您的任何值。
-
另外,我不明白“我无法创建变量,因为它存储数据。”您的
if块正在与两个可能的结果进行比较这一事实不应该(不)意味着您需要两次检索远程资源。如果对healthcheck的第一次调用返回'Warning',但在第二次调用(在elseif ( (healthcheck) -eq 'Warning')内)它返回了其他内容,那么您的代码将错过该内容。 -
这已经从关于
if的问题变成了关于switch的问题,但问题仍然是您的healthcheck函数,该函数的实现已从问题中删除,但我们现在看到的是抛出错误。如果您的代码试图根据成功查询的结果做出决定,但查询没有成功,那当然是行不通的。这有点像问一个真假问题并试图解释FileNotFound的答案... -
我投票决定将此问题作为离题结束,因为 OP 在给出各种答案后更改了问题。事实上,OP 使用一个答案来重写问题以满足其他要求。
标签: json windows powershell