2013-03-01 39 views
0

這裏第一次發佈海報,我是一個初學者,我一直熱衷於讓我的PowerShell腳本技能不勝枚舉,而且我遇到了一些令人困惑的事情...來自Win32_OperatingSystem的PowerShell - Select-Object顯示出奇怪的效果

我已經做了一個腳本來查詢計算機集合,我想查詢Win32_OperatingSystem,但只能推斷內部編號,所以我可以用它填充我的PSObject。我試圖添加一些如果邏輯,以便如果內部版本號是7601,我可以在我的操作系統列下寫一條消息。

我遇到的問題是,BuildNumber值出現爲@ {BuildNumber = 7601}而不是7601例如。那個,我的If語句是borked。

$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

明白了! Kinda ... '$ ErrorActionPreference =「SilentlyContinue」 $ Machines = Get-Content。\ Computers.txt Foreach($ Machine in $ Machines) {Get-WmiObject -Class Win32_OperatingSystem -computer $ Machine | Select-Object BuildNumber,@ {Label =「OS」; Expression = {If($ _。BuildNumber -eq「7601」){「Yes!」} else {「Nooooo!」}} } } Now我只需要弄清楚如何將它粘貼到我的PSObject上。 – Astirian 2013-03-01 03:42:36

+0

請稍等,並將其作爲您自己問題的答案發布。 – JPBlanc 2013-03-01 04:37:51

回答

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

只是另一個選項與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!'}  
    } 

}