2016-11-18 6 views
1

私はポート番号のリストを持っており、そのポートを使用しているプログラムを確認したいと思っています。 Get-Networkstatisticsコマンドレットをフィルタリングして、port.txtファイル内にある特定のポートのみを表示します。各項目をコマンドレットに対してループする

Get-NetworkStatistics | Select-Object ComputerName, LocalPort, ProcessName 

私が提供するポート番号だけをループするように修正しました。ただし、$result変数には何も格納されておらず、出力はnullです。私は間違って何をしていますか?

答えて

1

まず、選択する前にフィルタをかけて、下位のオブジェクトを選択する必要があります。

$result = @() #array 
foreach ($port in $file) 
{ 
$result += Get-NetworkStatistics | Where-Object {$_.LocalPort -eq $port} | Select-Object ComputerName, LocalPort, ProcessName 
} 
$result | Export-Csv .\networkports.csv 

実際の問題自体については、scopingであると考えられます。ループの前に変数を宣言する必要があります。そのため、ループ内とループの後で変数を使用できます。変数にファイルを読み取らない $file = Get-Content "path_to_ports.txt'

+0

現在作業中です!ありがとう:D –

+0

はいそれはあります!それは動作します –

2

あなたは、Get-Contentコマンドレットを使用する必要があります。それにはGet-Contentを使用してください。

また、ループは必要ありません。 、あなたも-in演算子を使用することができますPowerShellのV3以降で

$ports = Get-Content '.\ports.txt' 
Get-NetworkStatistics | 
    Where-Object { $ports -contains $_.LocalPort } | 
    Select-Object ComputerName, LocalPort, ProcessName | 
    Export-Csv '.\networkports.csv' -NoType 

た:Get-Contentは、リストが指定されたローカルポートが含まれている場合は、チェックのため-contains演算子を使用することができるように、文字列の配列の中に、入力ファイルを読み込み、ほとんどのユーザーにとってもう少し「自然な」と感じています。

+1

ええ、私はgcが不足していた、それは今働いている!ありがとう –

1

声明

$file = .\ports.txt 

関連する問題