powershell 中的 if 条件有什么问题?
What is wrong with this if condition in powershell?
我正在尝试查找服务 运行,同时检查我的机器中是否有正确的版本和更高版本,如果是,那么我需要 return 1 否则为零
我需要检查
Condition 1 : $servicestatus = true
或
Condition 2 : Where Status -ne "Running" = true
和
Condition 3 : Get-ItemProperty
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Where-Object {$.DisplayName -like "Crow*" -and $.DisplayVersion -gt
6.28} command should have atleast 1 record
然后退出1
if no record in condition 3 then exit 0
问题
但是当
获取项目属性 HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall* | Select-对象显示名称、显示版本、发布者、安装日期 | Where-Object {$.DisplayName -like "Crow*" -and $.DisplayVersion -gt 6.28} result 是否有记录,则整个代码结果为 1
但我期望零,因为没有记录导致第三种情况。
请帮忙:这是我写的完整代码
$servicestatus = get-service 'something'
If (@($servicestatus | Where Status -ne "Running" | Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Where-Object {$_.DisplayName -like "Crow*" -and $_.DisplayVersion -gt 6.28}).Count -gt 0)
{
echo "1"
Exit 1
}
Else
{
echo "1"
Exit 0
}
我修改了代码以添加一个 and 条件,但仍然没有成功
$servicestatus = get-service 'something'
If (@(($servicestatus | Where Status -ne "Running" ) -and (Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Where {($_.DisplayName -like "Crow*") -and ($_.DisplayVersion -gt 6.28)})).Count -gt 0)
{
echo "1"
Exit 1
}
Else
{
echo "1"
Exit 0
}
这有时很奇怪,但您可能希望在方括号中设置由 -and
、-or
等分隔的每个条件,如下所示:
| Where {($_.DisplayName -like "Crow*") -and ($_.DisplayVersion -gt 6.28)}
据我所知,原因是 powershell 认为 -and
是前一个表达式(本例中的字符串)的参数。
编辑代码:
试试这个:
if(($servicestatus.Status -ne "Running") -and ((Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Where-Object {($_.DisplayName -like "Crow*") -and ($_.DisplayVersion -gt 6.28)}).Count -gt 0))
我正在尝试查找服务 运行,同时检查我的机器中是否有正确的版本和更高版本,如果是,那么我需要 return 1 否则为零
我需要检查
Condition 1 : $servicestatus = true
或
Condition 2 : Where Status -ne "Running" = true
和
Condition 3 : Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Where-Object {$.DisplayName -like "Crow*" -and $.DisplayVersion -gt 6.28} command should have atleast 1 record
然后退出1
if no record in condition 3 then exit 0
问题
但是当
获取项目属性 HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall* | Select-对象显示名称、显示版本、发布者、安装日期 | Where-Object {$.DisplayName -like "Crow*" -and $.DisplayVersion -gt 6.28} result 是否有记录,则整个代码结果为 1
但我期望零,因为没有记录导致第三种情况。
请帮忙:这是我写的完整代码
$servicestatus = get-service 'something'
If (@($servicestatus | Where Status -ne "Running" | Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Where-Object {$_.DisplayName -like "Crow*" -and $_.DisplayVersion -gt 6.28}).Count -gt 0)
{
echo "1"
Exit 1
}
Else
{
echo "1"
Exit 0
}
我修改了代码以添加一个 and 条件,但仍然没有成功
$servicestatus = get-service 'something'
If (@(($servicestatus | Where Status -ne "Running" ) -and (Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Where {($_.DisplayName -like "Crow*") -and ($_.DisplayVersion -gt 6.28)})).Count -gt 0)
{
echo "1"
Exit 1
}
Else
{
echo "1"
Exit 0
}
这有时很奇怪,但您可能希望在方括号中设置由 -and
、-or
等分隔的每个条件,如下所示:
| Where {($_.DisplayName -like "Crow*") -and ($_.DisplayVersion -gt 6.28)}
据我所知,原因是 powershell 认为 -and
是前一个表达式(本例中的字符串)的参数。
编辑代码:
试试这个:
if(($servicestatus.Status -ne "Running") -and ((Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Where-Object {($_.DisplayName -like "Crow*") -and ($_.DisplayVersion -gt 6.28)}).Count -gt 0))