如何显示比较语句的错误

How to display error from comparison statement

我试图在某些条件不匹配时弹出错误消息。信息正在浏览 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"}

this is the issue

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

它不会输出 Host exists and is not open,我没有收到错误消息。

$hosted 是一个字符串,所以我明白了为什么我不能使用 -eq。我把它改成了-match。 我使用 $data."Host ID" 是因为我希望它像我在 -notin $data."Host ID" 中那样搜索整个电子表格。我尝试使用您尝试过的方法,因为我的状态是 "Open" 或 "not applicable"。这是示例数据。

      Hostname      Status
      LOG            Open
      LOG           Not Applicable
      NETMAN         Open
      HD             Open
      NETMAN        Not Applicable
      LOG           Not Applicable
$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)。

UPDATE:这也会失败,因为没有所谓的 $data.OpenOpen 是一个 Status 值。

尝试:

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