2017-04-20 13 views
3

私は、Googleのクロームバージョンを確認するためにPSのV3.0を使用しています取得:txtファイル内部リモートデバイス用の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 "$_"} 

は、リモートデバイスのIPアドレスです。

コマンドは問題なく動作していますが、Chromeのバージョンは表示されますが、ループ内にIPアドレスを含めることはできません。

これは、リモートデバイスの情報がないクロムバージョンのみです。

 
IP address - Chrome version 
IP address - Chrome version 

限り、私はこのことを理解し、それがあるべきForeach (action){do something}:私はこのような何かを取得したいのでしょうか?

入力から単語「バージョン」を削除する機会はありますか?

答えて

2

あなたは非常に無邪気な初心者タイプのミスをしましたが、それはかなり簡単に解決されています。

まず、ftから始めましょう。 ftFormat-Tableの略です。一般に、何かを出力しようとしているときは、Format-コマンドを使用するだけです。あなたはその結果を使用しようとしており、出力していないので、ftを削除する必要があります。代わりに、Select-Objectコマンドレットを使用します(または、より一般的にはselectが使用されます)。

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

これで、Versionプロパティを持つオブジェクトの配列が得られます。あなたが関連しているコンピュータが何であるかを知りたかったら、特に便利です。それは一般的には良いレッスンですが、ここではあまり実用的ではありません。実際に物事をより良くすることに移りましょう!

このようなループのように物事を配管することによって、物事を困難にしています。各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'} 

ではなくWhereGet-WMIObject-Filterパラメータを使用することです。その理由は、プロバイダーが独自のオブジェクトをフィルタリングすることで効率的であり、必要なものだけを返すことです。これは、PowerShellがフィルタリングするものよりも優れているからです。また、これはリモートマシンから返されるデータを減らすので、マシンごとに何百もの結果が得られるのではなく、必要なデータだけを取得してから、必要なデータだけを解析するだけです。基本的には、自分の問題ではなく、すべてのコンピュータのプロセッサが問題に取り組んでいます。それでは、-Filterパラメータを使用してみましょう:

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

[OK]を、物事が速くなりました全体の多くを戻ってくる必要があります。最後の項目まで、それぞれのバージョンが見つかったコンピュータ名が必要です。良いニュース、あなたはすでにそれを持っています!実際には、指定した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

私が必要とするすべてです!私はそんなに詳細を期待していませんでした。あなたは私に本当の教訓を与えました。どうもありがとうございました。お大事に! –

関連する問題