我想寫一個腳本,測驗一個OU中計算機的連接情況,然后告訴我它們是打開還是關閉。這將被包含在一個腳本中,該腳本的最終功能是測驗連接,如果計算機是打開的,則執行注冊,但如果它是關閉的,則跳過該計算機,轉到下一個。然而,我在If陳述句的第一部分遇到了麻煩。
ForEach ($computer in $ADComputers)
{$TestConnection = Test-Connection -ComputerName $computer -Quiet
If ($TestConnection -eq 'True')
{Write-Host "$computer is on"}。
Else。
{Write-Host "$computer is off"}}。
這個代碼塊回傳以下結果,這些結果是正確的
MS04D4C492C172 is on
MS04D4C492BADB 是 開是 開是 關
但是反過來做對我希望創建的腳本的其余部分的語法會更容易,但是如果我嘗試下面的方法
ForEach ($computer in $ADComputers)
{$TestConnection = Test-Connection -ComputerName $computer -Quiet
If ($TestConnection -eq 'False'/span>)
{Write-Host "$computer is off"}。
Else。
{Write-Host "$computer is on"}}。
我的結果被調換了,我得到這樣的結果
MS04D4C492C172 is off
MS04D4C492BADB 是 關
MS04D4C4AAE3F2 是 關
MS04D4C492BAE2 is on
我試著在其中兩臺電腦上手動運行測驗連接,得到的結果如下
PS H:> Test-Connection -ComputerName ms04d4c492c172 -Quiet
真
PS H:> Test-Connection -ComputerName MS04D4C492BAE2 -Quiet
False
我不明白為什么我的輸出會切換。我所做的只是把它從一個 if true 陳述句變成一個 if false 陳述句?還是我在這里做了一些非常愚蠢的事情?
uj5u.com熱心網友回復:
你正在與字串 'False'進行比較。Test-Connection -Quiet給你一個boolean值。Powershell的布林值是$true和$false。只有在列印出來的時候,它們才顯示為True和False。但是,$false和'False'仍然是不同的東西。
如果你使用更好的變數名($isOnline而不是$testConnection),并且縮進一致:
foreach ($computer in $ADComputers) {
$isOnline = Test-Connection -ComputerName $computer -Quiet
if ($isOnline) {
Write-Host "$computer is on"/span>。
} else {
Write-Host "$computer is off" ?
}
}
然后與一個實際的布林值進行比較...
foreach ($computer in $ADComputers) {
$isOnline = Test-Connection -ComputerName $computer -Quiet
if ($isOnline -eq $false) {
Write-Host "$computer is off" 。
} else {
Write-Host "$computer is on"
}
}
BUT: 像if ($booleanValue -eq $true)或if ($booleanValue -eq $false)都是不好的風格。
布林值已經是真或假。再次比較它是完全沒有用的。因此,它最好寫成if ($booleanValue)或if (-not $booleanValue),而且這樣也更易讀:
foreach ($computer in $ADComputers) {
$isOnline = Test-Connection -ComputerName $computer -Quiet
if (-not $isOnline) {
Write-Host "$computer is off"。
} else {
Write-Host "$computer is on" ?
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/309303.html
標籤:
