【问题标题】:How to display error from comparison statement如何显示比较语句中的错误
【发布时间】:2016-03-10 16:58:37
【问题描述】:

我试图在某些条件不匹配时弹出错误消息。信息正在通过 csv 文件浏览。

我的问题是我的陈述之一有效,但没有显示任何内容。这是我的条件语句。

$spellingerror = $hostid -notin $data."Host ID"
$existsnotopen = $hostid -eq $data."Host ID" -and $_.Status -ne $data.Open

  if ($spellingerror) 
{Write-Host -foregroundcolor Green "Host does not exist"}

  elseif ($existsnotopen)
{Write-Host -foregroundcolor Green "Host exists and is not open"}

  else
   {$data | Sort-Object {[DateTime]$_."Last Modified"} |   Where-Object
   {$_."Host ID" -eq $hostid -and $_."Status" -eq "Open"} | 
   Select -First 1 -ExpandProperty "Last Modified"}

这就是问题

elseif ($existsnotopen)
{Write-Host -foregroundcolor Green "Host exists and is not open"}

它不会输出主机存在且未打开,我没有收到错误消息。

$hosted 是一个字符串,所以我明白为什么我不能使用-eq。我将其更改为-match。 我使用了$data."Host ID",因为我希望它像在-notin $data."Host ID" 中那样搜索整个电子表格。我尝试使用您尝试过的内容,因为我的状态是“开放”或“不适用”。这是示例数据。

      Hostname      Status
      LOG            Open
      LOG           Not Applicable
      NETMAN         Open
      HD             Open
      NETMAN        Not Applicable
      LOG           Not Applicable

【问题讨论】:

    标签: powershell if-statement powershell-3.0 comparison-operators


    【解决方案1】:
    $existsnotopen = $hostid -eq $data."Host ID" -and $_.Status -ne $data.Open
    

    据我从您的脚本中得知(没有示例数据):$hostid 是单个值,例如。 $hostid = $_."Host ID",而$data 是一个数组,考虑到您在上面的行中使用了-notin $data."Host ID"

    字符串不等于数组。此外,$_.Status -ne $data.Open 将始终为真,因为单个值(状态)永远不会是数组($data.Open)。

    更新:这也会失败,因为没有任何东西叫做$data.OpenOpen 是一个Status-value。

    试试:

    $existsnotopen = @($data | Where-Object { $hostid -eq $_."Host ID" -and $_.Status -ne "Open" }).Count -gt 0
    

    【讨论】:

    • $hosted 是一个字符串,所以我明白为什么我不能使用-eq。我将其更改为-match。我使用了$data."Host ID",因为我希望它像在-notin $data."Host ID" 中那样搜索整个电子表格。我尝试使用您尝试过的内容,因为我的状态是“开放”或“不适用”。我添加了示例数据
    • 对不起,我的意思是说它对我不起作用。可能是因为$status -ne $_.Status
    • 抱歉,忘记在示例中定义$status。既然我们知道您正在寻找的状态,请尝试更新的答案。没有什么叫$data.Open... 您的样本仍然不完整。你从来没有定义过$hostid,我们只能假设它在一个循环中等等。
    • 我在脚本中使用$hostid=Read-Host "Please enter Hostname" 稍早定义了它,非常感谢您的帮助...它确实对我有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 2014-07-10
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    相关资源
    最近更新 更多