这里的第一次海报,我是一个初学者,我一直热衷于让我的PowerShell脚本技能达到最佳状态,而且我遇到了令人困惑的事情...
我已经制作了一个脚本来查询计算机集合,我想查询Win32_OperatingSystem,但只是推断Build编号,这样我就可以用它填充我的PSObject。我正在尝试添加一些If逻辑,这样如果内部版本号为7601,我可以在我的操作系统列下编写一条消息。
我遇到的问题是,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
}
}
答案 0 :(得分: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
答案 1 :(得分: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!'}
}
}