2015-09-30 60 views
1

Im對於PS來說相當新,我試圖執行一個簡單的任務,通過使用get-content獲得計算機列表,比通過foreach循環對每個設備執行wmi查詢該列表並獲得操作系統類型,比用IF語句檢查執行不同的任務取決於操作系統,永遠贏得Vista 8 8 10需要與XP分離。 我寫了下面的PS腳本:簡單forEach與If如果陳述帶來錯誤結果

$computers=Get-Content C:\ComputerList\Computers.txt 
$OSType=Get-WmiObject -Class Win32_operatingsystem -namespace "root\CIMV2" -ComputerName $computers 


ForEach ($compdevice in $computers) { 

if ($OSType.buildnumber -eq "2600*") { 

Write-Host $compdevice"'s OS type is XP" } 

Else { 

Write-Host $compdevice"'s Os type is Newer than xp" 

} 
    } 

在這種情況下,我得到的所有計算機相同的結果(IM運行祕密againt 2 Win XP的1勝7和1域中envierment贏得8

我已經嘗試了不同的變化也:

$computers=Get-Content C:\ComputerList\Computers.txt 
$OSType=Get-WmiObject -Class Win32_operatingsystem -namespace "root\CIMV2" -ComputerName $computers 


ForEach ($compdevice in $computers) { 

if ($OSType.buildnumber -eq "2600*") { 

Write-Host $compdevice"'s OS type is XP" } 

Else { 

Write-Host $compdevice"'s Os type is Newer than xp" 

} 
    } 
在這兩種情況下

我得到同樣的結果(一切順利if語句的一個選項)

我在想,我做錯了什麼? 注 - 我試圖按標題,編號和版本進行過濾。甚至在IF聲明中使用通配符,它​​不能很好地工作

回答

1

有幾件事情是錯誤的。 首先,您已將wmi內容捕獲到一個數組中,但您沒有將該數據與計算機名稱關聯。如果您在foreach循環中包含wmi查找,那麼您建立了關係。換句話說:

$computers=Get-Content C:\ComputerList\Computers.txt 

ForEach ($compdevice in $computers) { 

$OSType=Get-WmiObject -Class Win32_operatingsystem -namespace "root\CIMV2" -ComputerName $compdevice 

### you are using '-eq' so you should provide the actual number, you would use * with -like operator 
if ($OSType.buildnumber -eq "2600") { 
...