我撰寫了一個可以在某個時間點起作用的函式,但在編輯它時我把它弄壞了。只是一個有趣的惡作劇功能,它會得到你有多少場公羊然后烤你。下面是完整的功能。然而,無論如何它只會繼續輸出第一個自定義回應。
function Get-BasicInfo {
# ENTER YOUR CUSTOM RESPONSES HERE
#----------------------------------------------------------------------------------------------------
$lowRAM = "$RAM gigs of ram? thats pretty low"
$okRAM = "$RAM gigs of ram really? I have a calculator with more computing power"
$goodRAM = "$RAM gigs of ram? That is not terrible I guess"
$impressiveRAM = "$RAM gigs of ram? are you serious? a super computer with no security that is funny right there"
#----------------------------------------------------------------------------------------------------
try {
$OS = (Get-WmiObject Win32_OperatingSystem).Name;$OSpos = $OS.IndexOf("|");$OS = $OS.Substring(0, $OSpos)
$RAM=Get-WmiObject Win32_PhysicalMemory | Measure-Object -Property capacity -Sum | % { "{0:N1}" -f ($_.sum / 1GB)}
$RAMpos = $RAM.IndexOf('.')
$RAM = $RAM.Substring(0,$RAMpos).Trim()
if($RAM -le 4){
return $lowRAM
} elseif($RAM -ge 5 -and $RAM -le 12){
return $okRAM
} elseif($RAM -ge 13 -and $RAM -le 24){
return $goodRAM
} else {
return $impressiveRAM
}
}
# If one of the above parameters is not detected function will return $null to avoid sapi speak
# Write Error is just for troubleshooting
catch {Write-Error "Error in search"
return $null
-ErrorAction SilentlyContinue
}
}
我試圖在片段中運行代碼來解決它,發生了一些有趣的事情。首先我運行它只是為了設定回應變數
$lowRAM = "$RAM gigs of ram? thats pretty low"
$okRAM = "$RAM gigs of ram really? I have a calculator with more computing power"
$goodRAM = "$RAM gigs of ram? That is not terrible I guess"
$impressiveRAM = "$RAM gigs of ram? are you serious? a super computer with no security that is funny right there"
然后我運行它以獲取 ram 的數量并將其設定為變數
$RAM=Get-WmiObject Win32_PhysicalMemory | Measure-Object -Property capacity -Sum | % { "{0:N1}" -f ($_.sum / 1GB)}
$RAMpos = $RAM.IndexOf('.')
$RAM = $RAM.Substring(0,$RAMpos).Trim()
我會測驗變數 $RAM 并回傳 16 沒問題,最后嘗試執行 if、elseif、else 陳述句以獲取回應
if($RAM -le 4){
return $lowRAM
} elseif($RAM -ge 5 -and $RAM -le 12){
return $okRAM
} elseif($RAM -ge 13 -and $RAM -le 24){
return $goodRAM
} else {
return $impressiveRAM
}
出于某種原因,這將始終只輸出第一個自定義“低記憶體”回應。
“$RAM gigs of ram?那是相當低的”
$RAM 在我的電腦上回傳 16 但在輸出回應時不遵守上述邏輯。
但是,如果我只是自己對 $RAM 變數進行硬編碼,它就可以作業......
“$RAM gigs of ram?我猜這并不可怕”
$RAM = 16
if($RAM -le 4){
return $lowRAM
} elseif($RAM -ge 5 -and $RAM -le 12){
return $okRAM
} elseif($RAM -ge 13 -and $RAM -le 24){
return $goodRAM
} else {
return $impressiveRAM
}
我只是在某個時候失去了變數嗎?我已經為此絞盡腦汁好幾個小時了。
uj5u.com熱心網友回復:
發生這種情況是因為該if塊比較了兩種不同的型別。這樣做的時候,比較右邊的值可以轉換為左邊值的型別進行比較。
所以,發生的事情是比較是看string 16是否小于string 4。由于字串比較是按字典順序進行的,并且1小于4,因此結果不是人們所期望的。如果這兩種資料型別都是整數,那么它將是16和的測驗4。這是任何想要對檔案名進行排序的人很快就會遇到的一個非常常見的問題。
修復:將 轉換$RAM為整數,或反轉測驗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/442247.html
上一篇:檢查變數并用JS發送到主頁
