это делает работу немного по-другому. он использует методы массива .Where()
и .ForEach()
для небольшого ускорения. если вы используете PS2 или PS3, вам нужно будет заменить их версиями конвейера [Where-Object
& ForEach-Object
].
позволяет выбирать несколько номеров портов и несколько состояний, затем генерирует [PSCusomtObject]
, сортирует по порту и, наконец, выводит объекты. других выходов нет.
function Get-TcpConnectionInfo
{
<#
Comment Based Help goes here
#>
[CmdletBinding ()]
Param (
[Parameter (
Position = 0
)]
[int[]]
$Port = 443,
[Parameter (
Position = 1
)]
[ValidateSet (
'Established',
'CloseWait',
'TimeWait'
)]
[string[]]
$State = 'Established'
)
begin {}
process
{
$State = @($State).ForEach({$_.ToLower()})
@([System.Net.NetworkInformation.IPGlobalProperties]::GetIPGlobalProperties().
GetActiveTcpConnections()).
Where({
# include only foreign RemoteEndPoint items
$_.LocalEndPoint.Address -ne $_.RemoteEndPoint.Address -and
$_.State.ToString().ToLower() -in $State -and
$_.RemoteEndPoint.Port -in $Port
}).
ForEach({
[PSCustomObject]@{
State = $_.State
RemoteEndPoint = $_.RemoteEndPoint
}
}) |
Sort-Object {$_.RemoteEndPoint.Port}
}
end {}
} # end >> function Get-TcpConnectionInfo
со следующим звонком ...
Get-TcpConnectionInfo -Port 443, 993 -State closewait, established
... возвращает это ...
State RemoteEndPoint
----- --------------
CloseWait 13.33.115.238:443
Established 151.101.65.69:443
Established 198.252.206.25:443
Established 23.194.113.80:443
Established 40.97.120.242:993
Established 173.194.70.108:993
Established 173.194.70.108:993
Established 40.97.120.242:993