0

第一次在这里发布海报,我有点初学者,我一直热衷于让我的 PowerShell 脚本技能达到标准,但我遇到了一些相当令人困惑的事情......

我制作了一个脚本来查询一组计算机,我想查询 Win32_OperatingSystem 但只推断内部版本号,以便我可以用它填充我的 PSObject。我正在尝试添加一些 If 逻辑,以便如果内部版本号是 7601,我可以在我的 OS 列下写一条消息。

我遇到的问题是 BuildNumber 值以 @{BuildNumber=7601} 而不是 7601 的形式出现。那,我的 If 语句很无聊。

$Machines = Get-Content .\Computers.txt

Foreach($Machine in $Machines)
{
    $sweet = (Get-WmiObject -Class Win32_OperatingSystem -computer $Machine | Select-Object BuildNumber)
    $dversion = if ($sweet -eq "@{BuildNumber=7601}") {Yes!} else {"Nooooo!"}

    New-Object PSObject -Property @{
    ComputerName = $Machine
    Sweet = $sweet
    OS = $dversion

}
}
4

2 回答 2

2

问题是 Get-WMIObject cmdlet 正在返回一个哈希表。然后 Select-Object 只返回您想要的 BuildNumber 部分、BuildNumber 属性及其值。您需要添加 -ExpandProperty 参数以仅获取值,而不是名称/值对。

    Get-WMIObject -Class Win32_OperatingSystem | Select-Object BuildNumber

退货

    @{BuildNumber=7601}

使用 ExpandProperty

    Get-WMIObject -Class Win32_OperatingSystem | Select-Object -ExpandProperty BuildNumber

退货

    7601
于 2013-03-03T02:38:29.480 回答
1

ping 测试跳过不可用机器的另一种选择。

Get-Content .\Computers.txt | Where-Object {Test-Connection -ComputerName $_ -Count 1 -Quiet} | Foreach-Object {

    $sweet =  Get-WmiObject -Class Win32_OperatingSystem -ComputerName $_ | Select-Object -ExpandProperty BuildNumber

    New-Object PSObject -Property @{
        ComputerName = $_.__SERVER
        Sweet =  $sweet
        OS = if ($sweet -eq 7601) {'Yes!'} else {'Nooooo!'}    
    }

}
于 2013-03-01T10:58:35.450 回答