【问题标题】:Need help returning "1" "2" or "3" within switch statement需要帮助在 switch 语句中返回“1”“2”或“3”
【发布时间】: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


【解决方案1】:

如果THEN没有被执行,则说明IF中的条件不是TRUE。 所以改为:

result = 0
if (value === "warning") {
   result = 1
} else {
   result = 2
}

【讨论】:

    【解决方案2】:

    假设你的函数healthcheck返回一个可能值criticalwarninghealthy的字符串,你可以使用Switch语句,而不是一堆if{..}elseif{..}、@ 987654328@测试:

    switch((healthcheck)) {
        'critical' {1}
        'warning'  {2}
        'healthy'  {3}
        default    {999}  # just in case the function returns something other than you expect..
    }
    

    如果您的问题是如何检查Invoke-RestMethod 的结果,我建议您编辑您的问题以反映这一点。

    【讨论】:

      【解决方案3】:

      叹息。起初我以为 healthcheck 正在返回文本...

      function healthcheck {
        # [pscustomobject]@{ResponseType='Critical'}
        # [pscustomobject]@{ResponseType='Warning'}
        [pscustomobject]@{ResponseType='Nothing'}
      }
      
      switch ((healthcheck).responsetype) {
        'critical' {1}
        'warning'  {2}
        'healthy'  {3}
        default    {999}  
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 2021-05-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多