Нужно добавить функциональность netstat в скрипт PowerShell Get-ADComputer - PullRequest
0 голосов
/ 02 апреля 2020

Я использую этот скрипт Get-ADComputer для поиска машин в указанном c OU. Теперь мне нужно захватить входящие и исходящие порты машин в выводе скрипта. Я знаю, что это можно сделать с помощью netstat, но я не уверен, как включить это в скрипт ниже. Любая обратная связь будет принята с благодарностью.

# Enter CSV file location
$csv = "C:\MyLocation"
# Add the target OU in the SearchBase parameter
$Computers = Get-ADComputer -Filter * -SearchBase "OU=xxx,OU=xx,OU=xx,OU=_xx,DC=xx,DC=xxx,DC=com" | Select Name | Sort-Object Name
$Computers = $Computers.Name
$Headers = "ComputerName,IP Address"
$Headers | Out-File -FilePath $csv -Encoding UTF8
foreach ($computer in $Computers)
{
Write-host "Pinging $Computer"
$Test = Test-Connection -ComputerName $computer -Count 1 -ErrorAction SilentlyContinue -ErrorVariable Err
if ($test -ne $null)
{
    $IP = $Test.IPV4Address.IPAddressToString
    $Output = "$Computer,$IP"
    $Output | Out-File -FilePath $csv -Encoding UTF8 -Append
}
Else
{
    $Output = "$Computer,$Err"
    $output | Out-File -FilePath $csv -Encoding UTF8 -Append
}
cls
}

1 Ответ

1 голос
/ 03 апреля 2020

Вы можете использовать Get-NetTCPConnection для возврата TCP-соединений в качестве коллекции объектов PowerShell.

$netstat = Get-NetTCPConnection
$listeningPorts = $netstat | where state -eq 'Listen' | select -expand localport -unique
$netstat | where {$_.LocalPort -and $_.RemotePort -and $_.LocalAddress -ne '127.0.0.1'} |
    Select LocalAddress,LocalPort,RemoteAddress,RemotePort,
        @{n='Direction';e={
        if ($_.LocalPort -in $listeningPorts) {
        'Inbound'
        } 
        else { 'Outbound' }
        }
    }

Если вы хотите выполнить это удаленно, при условии, что PSRemoting включен , вы можете использовать Invoke-Command :

$sb = {
$netstat = Get-NetTCPConnection
$listeningPorts = $netstat | where state -eq 'Listen' | select -expand localport -unique
$netstat | where {$_.LocalPort -and $_.RemotePort -and $_.LocalAddress -ne '127.0.0.1'} |
    Select LocalAddress,LocalPort,RemoteAddress,RemotePort,
        @{n='Direction';e={
        if ($_.LocalPort -in $listeningPorts) {
        'Inbound'
        } 
        else { 'Outbound' }
        }
    }
}

Invoke-Command -ComputerName $Computers -Scriptblock $sb

Критерии Where могут потребоваться изменить. Мои предположения заключались в том, чтобы не включать никакие порты с номерами 0 или любые соединения, сделанные с помощью 127.0.0.1. Как только прослушивающие порты установлены, я предполагаю, что они используются только во входящих соединениях.

...