2017-04-20 27 views
3

我使用PS V3.0來檢查谷歌Chrome瀏覽器版本:獲取Chrome瀏覽器版本爲遠程設備

get-content -Path C:\Support\assets.txt | ForEach-Object ({get-wmiobject win32_product -ComputerName $_ | where-Object {$_.name -eq "google chrome"} |FT version}) 

{write-host "$_"} 

裏面的TXT文件是遠程設備的IP地址。

該命令工作正常,給我的Chrome版本,但我不能在循環內包含IP地址。

它給我只有鉻版本沒有信息到哪個遠程設備它來自。我想獲得這樣的事:

 
IP address - Chrome version 
IP address - Chrome version 

據我瞭解這一點,應該是Foreach (action){do something}

還有沒有機會從輸入中刪除單詞「版本」?

回答

2

好吧,你已經做出了一些非常天真的初學者類型的錯誤,但這很容易解決。

讓我們從ft開始。 ftFormat-Table的簡稱。一般來說,當您嘗試輸出內容時,您只使用Format-命令。您正在嘗試使用該結果,而不是輸出結果,因此我們需要刪除ft。請使用Select-Object cmdlet(或更常用的是較短的select)。

get-content -Path C:\Support\assets.txt | ForEach-Object ({get-wmiobject win32_product -ComputerName $_ | where-Object {$_.name -eq "google chrome"} |Select version}) 

好吧,這讓你只擁有Version財產對象的數組。不是特別有用,特別是當你想知道每臺計算機與哪個相關時!所以,這是一個很好的教訓,但在這裏並不實用。讓我們繼續努力,讓事情變得更好!

你正在做的事情比需要通過管道東西到一個ForEach循環。您正在針對每個IP地址分別撥打Get-WMIObject。如果我們看get-help get-wmiobject -parameter computername,我們可以看到它接受一串字符串。所以我們可以針對多個目標進行1次呼叫,這應該有助於加快速度。

$IPList = get-content -Path C:\Support\assets.txt 
Get-WMIObject win32_product -ComputerName $IPList | Where{$_.Name -eq 'Google Chrome'} 

這應該加快你的成績一點,但什麼會讓事情一大堆更快的是使用Get-WMIObject-Filter參數,而不是Where。原因在於提供程序在過濾自己的對象方面更加高效,並且只是以您想要的方式返回,而不像PowerShell那樣過濾事物。而且,這會減少從遠程計算機發回的數據,因此您只能從中獲取所需的數據,而不是每臺計算機可能獲得的數百個結果,然後解析爲您想要的數據。基本上你有所有的計算機處理器在處理你的問題,而不僅僅是你的問題。因此,讓我們使用-Filter參數:

$IPList = get-content -Path C:\Support\assets.txt 
Get-WMIObject win32_product -ComputerName $IPList -Filter "Name='Google Chrome'" 

好了,事情應該回來一大堆快。因此,直到最後一個項目,您需要爲每個版本的計算機名稱。好消息,你已經擁有它了!那麼,我們有計算機的實際名稱,而不是您指定的IP地址。它不會默認顯示,但每個結果都有一個PSComputerName屬性,您可以參考。我們可以簡單地管Select,並指定了我們需要的屬性:

$IPList = get-content -Path C:\Support\assets.txt 
Get-WMIObject win32_product -ComputerName $IPList -Filter "Name='Google Chrome'" | Select PSComputerName,Version 

這可能會得到你的結果你滿意。如果沒有,你可以通過一個ForEach循環同樣運行它你怎麼樣,像你指定的格式是:

$IPList = get-content -Path C:\Support\assets.txt 
ForEach($IP in $IPList){ 
    $Version = Get-WMIObject win32_product -ComputerName $IP -Filter "Name='Google Chrome'" | Select -Expand Version 
    "$IP - $Version" 
} 
+1

噢,這就是我所需要的!我沒有想到這麼多細節。你給了我真正的教訓。非常感謝你。祝福你! –