Powershell问题,变量值为0

时间:2015-06-12 12:23:08

标签: powershell

我正在尝试编写一个PS脚本,该脚本将作为数据库并在返回的变量不为0时执行操作。 我在很多方面尝试过,但它不起作用。它适用于0以外的其他值。

这是我的脚本,使用PS 3.0:

Cmd + Option + Shift + K

它的作用类似于变量不为0并执行警报电子邮件部分,即使变量实际为0:

Import-Module .\Invoke-SqlCmd2.psm1

$server=servername
$database=databasename
$query="SELECT COUNT(1) FROM TABLE WHERE LogDateTime between Dateadd(MI, -15, getdate()) and getdate()"

$errors=(Invoke-SqlCmd2 -Serverinstance $server -Database $database -query $query).ItemArray
If ((get-variable -name errors -valueonly) -eq 0) {Write-Host "All Good!"} else {send alert email}

有没有人遇到过这个?如果是这样,对此有什么解决方法? 注意我也试过这个: 如果

PS C:\PSScripts> get-variable errors -valueonly

0

还尝试使用-le 1和所有内容,似乎并不认为变量值实际为0。

1 个答案:

答案 0 :(得分:0)

在这些情况下,当您检查变量的类型时会发生意外情况吗?

$errors.GetType().FullName

如果除了整数之外什么都没有,那么你可能会遇到问题。我不知道还有什么可能被退回,但你可能只能做一个演员或类似的东西。

If([int]$errors -eq 0){"Stuff"}Else{"Send Email"}

从评论中更新

我们走在正确的轨道上。这是一个类型问题。所以你的函数返回一个数组。假设你不能改变我们必须处理输出的功能但是我不确定什么是最好的方法因为我没有一个例子可以玩.....也许我们检查一下返回的数组的第一个元素。

If([int]$errors[0] -eq 0){"Stuff"}Else{"Send Email"}

与此同时,我将检查您发布的代码的链接。