PowerShell中if语句使用变量属性的问题排查
PowerShell脚本if分支异常问题解决
你的问题核心是类型不匹配:$status.Enabled返回的是PowerShell原生的布尔值($true/$false),但你在判断时却和字符串"False"/"True"做比较,两者永远不相等,所以才会每次都执行else分支。
关于你问的「是否可以在if语句中使用Cmdlet返回结果的属性」——完全可以,这是PowerShell的常规用法,问题出在你的比较逻辑上,不是属性调用本身的问题。
修正后的脚本如下:
$filepath = "C:\Scripts\Logs" $date = Get-Date -Format "dd.MM.yyyy HH:mm:ss" $tapejob = Get-VBRTapeJob -Name "GFS Backup to Tape" $tapejob | Disable-VBRJob $status = Get-VBRTapeJob -Name "GFS Backup to Tape" # 直接和布尔值$false/$true比较,不要加引号 if (-not $status.Enabled) { "$date Der Backup To Tape Job wurde erfolgreich deaktiviert." | Out-File "$filepath\DisableTapeJobLog.txt" -Append } else { "$date Der Backup To Tape Job wurde nicht erfolgreich deaktiviert." | Out-File "$filepath\DisableTapeJobLog.txt" -Append }
补充说明:
- 用
-not $status.Enabled比$status.Enabled -eq $false更符合PowerShell的惯用写法 - 不需要额外的elseif分支,因为布尔值只有两种可能,直接用else覆盖未成功的情况即可
- 如果想保留原分支结构,把字符串换成原生布尔值
$false/$true也可以:if ($status.Enabled -eq $false) { ... } elseif ($status.Enabled -eq $true) { ... }
内容的提问来源于stack exchange,提问作者this_is_cve
相关产品推荐
相关产品推荐

