【问题标题】:Loop through each item against a cmdlet针对 cmdlet 循环遍历每个项目
【发布时间】:2016-11-19 05:34:15
【问题描述】:

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

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

只循环通过我提供的端口号。但是,$result 变量没有存储任何内容,并且输出为空。我做错了什么?

$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

【问题讨论】:

    标签: powershell


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      $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。你需要在循环之前声明变量,所以它在循环中和循环之后都可用。

      【讨论】:

        【解决方案3】:

        声明

        $file = .\ports.txt
        

        不将文件读入变量。为此使用Get-Content

        此外,您不需要循环。 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-10-30
          • 1970-01-01
          • 2018-06-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-15
          • 1970-01-01
          相关资源
          最近更新 更多