我试图在某些条件不匹配时输入错误消息。信息正在浏览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
答案 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.Open
,Open
是Status
- 值。
尝试:
$existsnotopen = @($data | Where-Object { $hostid -eq $_."Host ID" -and $_.Status -ne "Open" }).Count -gt 0