Powershell 针对cmdlet循环检查每个项

Powershell 针对cmdlet循环检查每个项,powershell,Powershell,我有一个端口号列表,我想看看哪个程序正在使用该端口。我想筛选cmdlet,以便仅显示port.txt文件中的某些端口。我修改了文件 Get-NetworkStatistics | Select-Object ComputerName, LocalPort, ProcessName 只循环使用我提供的端口号。但是,$result变量没有存储任何内容,输出为null。我做错了什么 $file = .\ports.txt foreach ( $port in $file ) { $r

我有一个端口号列表,我想看看哪个程序正在使用该端口。我想筛选cmdlet,以便仅显示port.txt文件中的某些端口。我修改了文件

Get-NetworkStatistics  | Select-Object ComputerName, LocalPort, ProcessName 
只循环使用我提供的端口号。但是,$result变量没有存储任何内容,输出为null。我做错了什么

$file = .\ports.txt

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

首先,您希望在执行选择之前进行过滤,这样您就必须选择较低的对象

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

至于实际问题本身,我相信是由于。您需要在循环之前声明变量,以便它在循环中可用,在循环之后也可用。

首先,您希望在执行选择之前进行筛选,这样您就必须选择较低的对象

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

至于实际问题本身,我相信是由于。您需要在循环之前声明变量,以便它在循环中和循环之后可用。

您必须使用Get-Content cmdlet:
$file=Get Content path_to_ports.txt'

您必须使用Get Content cmdlet: $file=Get Content path_to_ports.txt'

语句

$file = .\ports.txt
不将文件读入变量。使用“获取内容”

此外,您不需要循环。Get Content将输入文件读入字符串数组,因此可以使用-contains运算符检查列表是否包含给定的本地端口:

$ports = Get-Content '.\ports.txt'
Get-NetworkStatistics |
    Where-Object { $ports -contains $_.LocalPort } |
    Select-Object ComputerName, LocalPort, ProcessName |
    Export-Csv '.\networkports.csv' -NoType
在PowerShell v3或更高版本上,您还可以使用-in操作符,这对大多数用户来说更为自然:

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

$file = .\ports.txt
不将文件读入变量。使用“获取内容”

此外,您不需要循环。Get Content将输入文件读入字符串数组,因此可以使用-contains运算符检查列表是否包含给定的本地端口:

$ports = Get-Content '.\ports.txt'
Get-NetworkStatistics |
    Where-Object { $ports -contains $_.LocalPort } |
    Select-Object ComputerName, LocalPort, ProcessName |
    Export-Csv '.\networkports.csv' -NoType
在PowerShell v3或更高版本上,您还可以使用-in操作符,这对大多数用户来说更为自然:

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