如何显示比较语句的错误
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.Open
,Open
是一个 Status
值。
尝试:
$existsnotopen = @($data | Where-Object { $hostid -eq $_."Host ID" -and $_.Status -ne "Open" }).Count -gt 0
我试图在某些条件不匹配时弹出错误消息。信息正在浏览 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.Open
,Open
是一个 Status
值。
尝试:
$existsnotopen = @($data | Where-Object { $hostid -eq $_."Host ID" -and $_.Status -ne "Open" }).Count -gt 0