获取 RAM 的 Powershell 函数未按预期工作

Powershell function to get RAM isn't working as intended

我编写了一个在某一点上有效的函数,但我在编辑它时破坏了它。 只是一个有趣的 p运行k 函数,它会得到你有多少 ram 的演出,然后烤你。下面是完整的功能。但是无论如何它只会继续输出第一个自定义响应。

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 并且它 returns 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 returns 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
    }

我只是在某个时候失去了变量吗?我已经为此绞尽脑汁好几个小时了。

发生这种情况是因为 if 块比较两种不同的类型。这样做的时候,right-hand边的值比较can be converted到left-hand边值的类型进行比较。

所以,这个比较是看string16是否小于string4。由于字符串比较是 ,而 1 小于 4,结果不是人们所期望的。如果两种数据类型都是整数,那么它将是 164 的测试。这是任何想要对文件名进行排序的人很快就会遇到的一个非常普遍的问题。

修复:将$RAM转换为整数,或反转测试。