如何从比较语句中显示错误

时间:2016-03-10 16:58:38

标签: powershell if-statement powershell-v3.0 comparison-operators

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

更新:这也会失败,因为没有任何名为$data.OpenOpenStatus - 值。

尝试:

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