变量值为0的Powershell问题

变量值为0的Powershell问题,powershell,Powershell,我正在尝试编写一个PS脚本,如果返回的变量不是0,它将创建一个数据库并执行一个操作。 我试过很多方法,但都不管用。它适用于0以外的其他值 以下是我使用PS 3.0编写的脚本: Import-Module .\Invoke-SqlCmd2.psm1 $server=servername $database=databasename $query="SELECT COUNT(1) FROM TABLE WHERE LogDateTime between Dateadd(MI, -15, getda

我正在尝试编写一个PS脚本,如果返回的变量不是0,它将创建一个数据库并执行一个操作。 我试过很多方法,但都不管用。它适用于0以外的其他值

以下是我使用PS 3.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}
它的作用类似于变量不是0,并执行警报电子邮件部分,即使变量实际上是0:

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

0
以前有人碰到过这个吗?如果是这样,有什么解决办法? 注意:我也试过这样做: 如果


同样尝试了-le 1和所有东西,似乎不相信变量值实际上是0。

在这些发生意外情况的场景中,检查变量类型时会发生什么

$errors.GetType().FullName
如果它说的不是整数,你可能有问题。我不知道还可能返回什么,但您可能只需要执行一个cast或类似的操作

If([int]$errors -eq 0){"Stuff"}Else{"Send Email"}
根据评论更新

我们在正确的轨道上。这是一个典型的问题。因此,您的函数将返回一个数组。假设您不能更改函数,我们将不得不处理输出,但我不确定什么是最好的方法,因为我没有一个示例可以使用。。。。。也许我们检查返回的数组的第一个元素

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

同时,我将检查你发布的代码的链接

您可以发布Invoke-SqlCmd2代码吗?猜测它是字符串的0,而不是整数的0或与
$errors
类型相关的其他内容Invoke-SqlCmd2的代码如下:Invoke-SqlCmd2的代码。我无法使用原始版本,因为我无法在服务器上安装ssms或工具。变量似乎是System.Object[]。我尝试使用建议的强制转换,但无法更改:PS C:\PSScripts>If([int]$errors-eq 0){Write Host“GOOD!”}无法将“System.Object[]”类型的“System.Object[]”值转换为“System.Int32”类型。第1行字符:5+If([int]$errors-eq 0){写主机“一切都很棒!”}+~~~~~~~~~~~~~~~~~~~~~~~~~~~~+CategoryInfo:InvalidArgument:(:)[],RuntimeException+FullyQualifiedErrorId:ConvertToFinalidCastException我不认为它可以转换为int:[bool]($errors-as[int]-是[int])False@kan3xxx干得好。检查我的更新。同时我有一些书要读。因为它是一个数组,所以我们需要处理它。谢谢,[0]现在可以工作了,通过这个转换,它实际上同意变量是0。
If([int]$errors[0] -eq 0){"Stuff"}Else{"Send Email"}