【问题标题】:Parsing not working correctly for Powershell解析不适用于 Powershell
【发布时间】:2018-06-22 01:08:17
【问题描述】:

我编写了以下逻辑来检查服务状态:

$status=@()

if($var1 -match "True") {
Write-Output "Service Enabled"
} else {
$status+="Service not Enabled"
Write-Output "Service not Enabled"
}

if($status.count -le 1){
    $returnStatus = "PASS"    
}else{
    $o=$status -join ", "
    $returnStatus = "FAIL- $o"
}

$getstatus = $returnStatus 

当我设置$var1 = false时,输出应该是Service not Enabled,但它不正确。

似乎问题在于$status 的计数始终为1,即使它是PASS 请建议是否有更好的逻辑来执行相同的逻辑。

【问题讨论】:

  • 该代码中没有执行路径会导致Service not Enabled 被写入输出。
  • 我已经更新了我的问题
  • 我建议使用$True$False(注意$)。所以你设置$var1 = $False,然后在字符串值上使用if ($var1)而不是-match进行测试。

标签: powershell powershell-3.0 powershell-4.0 powershell-remoting cmdlet


【解决方案1】:

变量名$returnsStatus/$returnStatus有错别字

导致最终输出$getstatus不一致。

请修正变量名并重试。

建议的解决方案

$status=@()

if($var1 -match "True") {
    Write-Output "Service Enabled"
} else {
    $status+="Service not Enabled"
    # Fixed Message
    Write-Output "Service not Enabled"
}

# Fix comparison from -le to -lt
if($status.count -lt 1){
    $returnStatus = "PASS"    
}else{
    $o=$status -join ", "
    $returnStatus = "FAIL- $o"
}

$getstatus = $returnStatus 

【讨论】:

  • 即使在更新$returnStatus后我也得到了相同的结果
  • 似乎问题在于$status 的计数始终为 1,即使它是 PASS 请建议是否有更好的逻辑来执行相同的逻辑。
  • @meallhour 你得到的结果是什么?在更新的代码中,您在两个地方打印了相同的Service Enabled
  • 更新了我的问题。在这两种情况下我都会收到Service Enabled
  • 将比较从-le(小于或等于)更改为-lt(小于)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 2018-07-18
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多