我已經撰寫了這個小腳本。一切正常,排除了 if 陳述句。變數 $status 結果的值無關緊要。if 陳述句總是導致 else 條件。
在 if 陳述句中使用 Cmdlet 的屬性是否很有可能?
$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"
if ($status.Enabled -eq "False")
{"$date Der Backup To Tape Job wurde erfolgreich deaktiviert." | Out-File "$filepath\DisableTapeJobLog.txt" -Append}
elseif ($status.Enabled -eq "True")
{"$date Der Backup To Tape Job wurde nicht erfolgreich deaktiviert." | Out-File "$filepath\DisableTapeJobLog.txt" -Append}
else
{"$date Irgendwas stimmt hier nicht. :-)" | Out-File "$filepath\DisableTapeJobLog.txt" -Append}
uj5u.com熱心網友回復:
筆記:
為了檢測不是布林值的情況
$status.Enabled(例如,如果不存在屬性),請使用以下作為第一個條件:$null.Enabledifif ($status.Enabled -isnot [bool]) { "$date Irgendwas stimmt hier nicht. :-)" | Out-File "$filepath\DisableTapeJobLog.txt" -Append }下一節假設
$status.Enabled回傳一個布林值 ( bool );完整的if宣告在底部。
使用($status.Enabled -eq $false),或者,最好也更簡潔,(-not $status.Enabled)
一般來說:
無需明確將布林值 與另一個值進行比較(請參閱下一點),但如果您這樣做了,并且其他值還不是布林值,您需要了解 PowerShell 如何將其轉換為 布林值 - 請參閱下一節.
最好在條件句中隱式使用布林值;那是:
$someBooleanValue代替使用$someBooleanValue -eq $true-not $someBooleanValue代替使用$someBooleanValue -eq $false
順便說一句:如果您已經知道 PowerShell 的 to-Boolean 轉換規則,則可以將任何值隱式用作 Boolean,只需在條件中按原樣使用它并依靠 PowerShell 將其轉換為 Boolean;例如,
$val = 'nonempty string'; if ($val) { 'yes' }輸出yes,因為任何非空字串都被強制轉換$true為布爾背景關系(見下文)。
至于你嘗試了什么:
($status.Enabled -eq "False")
將布爾值 ($true或$false) 與字串值進行比較,"False"如您所料無法正常作業:
由于 LHS 是布林值,PowerShell 在比較之前也會將 RHS 強制轉換為布林值,并且PowerShell 的到布爾轉換規則將任何非空字串視為$true,而不管其值如何。
也就是說,[bool] "False"yield $true(!),因為"False"它是一個非空字串。
因此,您的比較等同于$status.Enabled -eq [bool] "False",與$status.Enabled -eq $true(!) 相同,即與您的意圖相反。
有關PowerShell 到布爾轉換規則的摘要,請參閱此答案的底部。
把它們放在一起:
if ($status.Enabled -isnot [bool]) {
"$date Irgendwas stimmt hier nicht. :-)" | Out-File "$filepath\DisableTapeJobLog.txt" -Append
}
elseif (-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
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/530769.html
