希望将 netstat 功能添加到 Get-ADComputer powershell 脚本
Looking to add netstat functionality to Get-ADComputer powershell script
我正在使用此 Get-ADComputer 脚本来查找特定 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
}
您可以使用 Get-NetTCPConnection 到 return 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
建立的任何连接。建立监听端口后,我假设它们仅用于入站连接。
我正在使用此 Get-ADComputer 脚本来查找特定 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
}
您可以使用 Get-NetTCPConnection 到 return 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
建立的任何连接。建立监听端口后,我假设它们仅用于入站连接。