Powershell 将 NetTCPConnection 或 netstat 转换为字符串
Powershell Convert NetTCPConnection or netstat To String
您好,在此先感谢任何可以提供帮助的人。
我正在尝试编写一个 powershell 脚本,该脚本获取包含特定关键字的服务器的所有连接列表,并将 DNS 名称和相应的 IP 输出到 csv 文件。
我 运行 遇到一些打字问题。这是我尝试使用 NetTCPConnection 的代码:
# get remote addrs
$a = (Get-NetTCPConnection | Select-Object RemoteAddress)
# get IPs of valid addrs
Workflow Get-DNSNames([string[]]$IPAddresses){
foreach -parallel ($IP in $IPAddresses | Select-Object -Unique){
# $IP.ToString()
[system.net.dns]::GetHostEntry($IP)).hostname
try{
@{$IP = $(([system.net.dns]::GetHostEntry($IP)).hostname)}
}catch{
@{$IP = "N/A"}
}
}
}
# output to txt
$List = Get-DNSNames -IPAddresses $a
$List | Out-File "C:\temp\getBAS\IPAddresses_Complete.txt"
这是我对 netstat 的尝试:
# get netstat output
$a = netstat
$b = $a[3..$a.count] | ConvertFrom-string | Select p4 | Where p4 -like "*52*"
# get IP and create name, IP pairs
$c = @()
foreach ($DNS in $b) {
# name , IP
$rowToAdd = New-Object psobject
$name = $DNS
$IP = [System.Net.Dns]::GetHostAddresses($DNS.ToString())
$rowToAdd | Add-Member -Member NoteProperty -Name "Name" -value $name
$rowToAdd | Add-Member -Member NoteProperty -Name "IP" -value $IP
$c += $rowToAdd
}
$c
# output to csv
$final | Export-Csv -Path "C:\temp\getBAS\NetworkConnectionsBAS.csv" -NoTypeInformation
第一次尝试的问题是来自 NetTCPConnection 的值是对象,而不是字符串,而 GetHost 函数中需要字符串。我想不出将每个单独的地址对象转换为字符串的方法。
我第二次尝试的问题是我得到了一个古怪的 csv 输出。
坦率地说,我被困住了,希望得到任何帮助。谢谢
$a = (Get-NetTCPConnection | Select-Object RemoteAddress)
这使 $a 成为一个包含 RemoteAddress 属性 的对象,您没有将它转换为我能看到的任何地方的字符串。
您可以将此行更改为
$a = (Get-NetTCPConnection | Select-Object -ExpandProperty RemoteAddress)
获取包含 RemoteAddress 值的字符串
或更改
$List = Get-DNSNames -IPAddresses $a
至
$List = Get-DNSNames -IPAddresses "$($a.RemoteAddress)"
这将只从 属性 中提取值,然后将其视为字符串。
您好,在此先感谢任何可以提供帮助的人。
我正在尝试编写一个 powershell 脚本,该脚本获取包含特定关键字的服务器的所有连接列表,并将 DNS 名称和相应的 IP 输出到 csv 文件。
我 运行 遇到一些打字问题。这是我尝试使用 NetTCPConnection 的代码:
# get remote addrs
$a = (Get-NetTCPConnection | Select-Object RemoteAddress)
# get IPs of valid addrs
Workflow Get-DNSNames([string[]]$IPAddresses){
foreach -parallel ($IP in $IPAddresses | Select-Object -Unique){
# $IP.ToString()
[system.net.dns]::GetHostEntry($IP)).hostname
try{
@{$IP = $(([system.net.dns]::GetHostEntry($IP)).hostname)}
}catch{
@{$IP = "N/A"}
}
}
}
# output to txt
$List = Get-DNSNames -IPAddresses $a
$List | Out-File "C:\temp\getBAS\IPAddresses_Complete.txt"
这是我对 netstat 的尝试:
# get netstat output
$a = netstat
$b = $a[3..$a.count] | ConvertFrom-string | Select p4 | Where p4 -like "*52*"
# get IP and create name, IP pairs
$c = @()
foreach ($DNS in $b) {
# name , IP
$rowToAdd = New-Object psobject
$name = $DNS
$IP = [System.Net.Dns]::GetHostAddresses($DNS.ToString())
$rowToAdd | Add-Member -Member NoteProperty -Name "Name" -value $name
$rowToAdd | Add-Member -Member NoteProperty -Name "IP" -value $IP
$c += $rowToAdd
}
$c
# output to csv
$final | Export-Csv -Path "C:\temp\getBAS\NetworkConnectionsBAS.csv" -NoTypeInformation
第一次尝试的问题是来自 NetTCPConnection 的值是对象,而不是字符串,而 GetHost 函数中需要字符串。我想不出将每个单独的地址对象转换为字符串的方法。
我第二次尝试的问题是我得到了一个古怪的 csv 输出。
坦率地说,我被困住了,希望得到任何帮助。谢谢
$a = (Get-NetTCPConnection | Select-Object RemoteAddress)
这使 $a 成为一个包含 RemoteAddress 属性 的对象,您没有将它转换为我能看到的任何地方的字符串。
您可以将此行更改为
$a = (Get-NetTCPConnection | Select-Object -ExpandProperty RemoteAddress)
获取包含 RemoteAddress 值的字符串
或更改
$List = Get-DNSNames -IPAddresses $a
至
$List = Get-DNSNames -IPAddresses "$($a.RemoteAddress)"
这将只从 属性 中提取值,然后将其视为字符串。