Powershell从IP数组创建一个逗号分隔列表,其出现次数$ N次

bea*_*gle 9 windows arrays sorting powershell powershell-2.0

我看过的每个地方都向我展示了使用物理文件的方法,但无论出于何种原因,都没有使用数组.我宁愿不存储这些数据,然后从文件调用,如果可能的话,直接使用数组.我被困在使用PowerShell v2但这应该仍然可行.我提前感谢任何和所有的帮助.

我有一个名为$net_final具有以下值的数组:

63.232.3.102
63.232.3.102
64.339.161.5
64.339.161.5
64.339.161.5
64.339.161.5
64.339.161.5
64.339.161.5
19.19.19.19
19.19.19.19
19.19.19.19
19.19.19.19
19.19.19.19
19.19.19.19
19.19.19.19
63.339.161.7
63.339.161.7
63.339.161.7
63.339.161.7
63.339.161.7
Run Code Online (Sandbox Code Playgroud)

然后我执行以下操作以获取在此数组中出现5次或更多次的IP列表:

($net_final | Group-Object | Where-Object {$_.Count -ge 5} | Format-Table -HideTableHeaders -Property Name | Out-String).Trim()

这让我得到了这个输出:

64.339.161.5
19.19.19.19
63.339.161.7
Run Code Online (Sandbox Code Playgroud)

但是我似乎无法在同一行上以逗号分隔.制作一个逗号分隔的列表出来只是阵列的是喜欢的东西相当简单$net_final -Join ","($net_final | Select-Object -Unique) -Join ",",但我需要抓住出现的次数$ N数字数组项.

预期产量:

64.339.161.5,19.19.19.19,63.339.161.7

The*_*ian 42

在这里,给你一个漂亮的小单线:

($net_final|group|?{$_.count -ge 5}|Select -ExpandProperty Name) -join ","
Run Code Online (Sandbox Code Playgroud)

这将输出:

64.339.161.5,19.19.19.19,63.339.161.7
Run Code Online (Sandbox Code Playgroud)


小智 10

我遇到了来自TheMadTechnician的解决方案的问题,但发现以下效果很好:$ my_array -join","

  • 这样做的问题在于,它将通过逗号加入所有IP,而不仅仅是唯一的,并且原始帖子只希望它有5个或更多重复项,而这也没有考虑到.您的代码返回用逗号连接的所有15个IP地址. (2认同)

小智 5

阅读速度更快/更简单:

$test = (1,3,7,7,3,2,1)
$($test | sort -Unique) -join "," 
Run Code Online (Sandbox Code Playgroud)

1,2,3,7

您可以使用 -unique 标志将任何数组通过管道进行排序以进行重复数据删除;然后可以将包装的变量与您首选的分隔符连接起来。