2011-12-28 36 views
30

Tôi đang cố gắng lấy ipaddress từ tên máy chủ bằng cách sử dụng Powershell, nhưng tôi thực sự không thể tìm ra cách.Giải quyết địa chỉ IP từ tên máy chủ với PowerShell

Bất kỳ trợ giúp nào?

+0

Không có một máy cửa sổ tôi không thể chắc chắn, nhưng không phải là một trong hai nslookup hoặc đào sẵn? –

Trả lời

43

Nếu bạn muốn để có được địa chỉ IP, do đó bạn có thể làm việc với địa chỉ, bạn có thể làm điều này:

$ips = [System.Net.Dns]::GetHostAddresses("yourhosthere") 

Bạn có thể lặp qua chúng như vậy:

[System.Net.Dns]::GetHostAddresses("yourhosthere") | foreach {echo $_.IPAddressToString } 

Một máy chủ có thể có nhiều hơn một IP, do đó, điều này sẽ trả về một mảng các IP.

+3

$ ip = [System.Net.Dns] :: GetHostAddresses ("yourhosthere") [0] sẽ đảm bảo bạn chỉ nhận được một địa chỉ IP nếu bạn chắc chắn nó giải quyết các liên kết –

3

Nhận địa chỉ IPv4 và IPv6 từ tên máy chủ trong powershell được giải thích here. Ngoài ra, bạn có thể lấy tập lệnh bằng cách nhấp vào Resolve IP address from Hostname trong bài viết nói trên.

+1

chúng tôi có thể không có sẵn trong tương lai, vui lòng bao gồm lõi các thành phần trong câu trả lời của bạn và chỉ sử dụng liên kết để "biết thêm thông tin" – rob

5

Tôi sẽ sử dụng giải pháp vcsjones đã nhận xét, nhưng vì kết quả của giải pháp khi được sử dụng trên tên máy chủ có nhiều địa chỉ IP sẽ là một mảng IP, điều này sẽ gây ra sự cố với ping/tracert.

Giải pháp tôi sử dụng như sau:

$ping = New-Object System.Net.NetworkInformation.Ping 
$ips = $($ping.Send("yourhosthere").Address).IPAddressToString 

này sẽ hiển thị một chuỗi IP duy nhất (trong biến $ips), giải quyết khỏi phản hồi ICMP duy nhất, ngăn chặn một loạt các IP cho hostnames với nhiều khu công nghiệp .

+0

Tại sao bạn có $ trước ($ ping.Send .......? –

+0

@Backwards_Dave, dường như thói quen sử dụng dấu ngoặc đơn của tôi để nhóm một mục là hơn Dòng cập nhật tiếp theo này cho bạn kết quả tương tự, không có thêm $ (...): $ ips = $ ping.Send ("yourhosthere") .Địa chỉ.IPAddressToString Cảm ơn bạn đã hỏi. ... –

1

Nếu bạn biết một phần của mạng con (tức là 10,3 trong ví dụ này), thì điều này sẽ lấy bất kỳ địa chỉ có trong các subnet đưa ra:

PS C:\> [System.Net.Dns]::GetHostAddresses("MyPC") | foreach { $_.IPAddressToString | findstr "10.3."} 
1

Cách đơn giản nhất:

ping hostname 

ví dụ

ping dynlab938.meng.auth.gr 

nó sẽ in: Pinging dynlab938.meng.auth.gr [155.207.29.38] với 32 byte dữ liệu

+0

là câu hỏi dành cho powershell Tôi mong chờ câu trả lời là chuỗi/đối tượng chứa địa chỉ ip – rob

0

này làm việc tốt cho mục đích của tôi

$ping = ping -4 $env:COMPUTERNAME 
$ip = $ping.Item(2) 
$ip = $ip.Substring(11,11) 
11

này là tốt đẹp và đơn giản và nhận tất cả các nút.

$ip = Resolve-DNSName google.com 
$ip 

cũng thử nhập ip thay vì tên miền và kiểm tra các kết quả đó!

+0

Trả lời tốt nhất r đây! – gvee

+0

Dưới mui xe, điều này khác với [System.Net.Dns] :: GetHostAddresses như thế nào? – Castrohenge

+0

Nếu bạn chỉ muốn truy cập địa chỉ IP bằng phương pháp này, hãy sử dụng $ ip.IPAddress. Lưu ý điều này sẽ trả về một mảng nếu có nhiều IP. –

1

Làm việc lót nếu bạn muốn có một kết quả duy nhất từ ​​bộ sưu tập:

$ipAddy = [System.Net.Dns]::GetHostAddresses("yahoo.com")[0].IPAddressToString; 

hth

0
$computername = $env:computername  
[System.Net.Dns]::GetHostAddresses($computername) | where {$_.AddressFamily -notlike "InterNetworkV6"} | foreach {echo $_.IPAddressToString } 
+1

Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về lý do và/hoặc cách mã này trả lời câu hỏi cải thiện giá trị lâu dài của nó. – JAL

4

Sử dụng Resolve-DnsName cmdlet.

Resolve-DnsName computername | FT Name, IPAddress -HideTableHeaders | Out-File -Append c:\filename.txt 

PS C:\> Resolve-DnsName stackoverflow.com 

Name           Type TTL Section IPAddress 
----           ---- --- ------- --------- 
stackoverflow.com        A  130 Answer  151.101.65.69 
stackoverflow.com        A  130 Answer  151.101.129.69 
stackoverflow.com        A  130 Answer  151.101.193.69 
stackoverflow.com        A  130 Answer  151.101.1.69 

PS C:\> Resolve-DnsName stackoverflow.com | Format-Table Name, IPAddress -HideTableHeaders 

stackoverflow.com 151.101.65.69 
stackoverflow.com 151.101.1.69 
stackoverflow.com 151.101.193.69 
stackoverflow.com 151.101.129.69 

PS C:\> Resolve-DnsName -Type A google.com 

Name           Type TTL Section IPAddress 
----           ---- --- ------- --------- 
google.com          A  16 Answer  216.58.193.78 


PS C:\> Resolve-DnsName -Type AAAA google.com 

Name           Type TTL Section IPAddress 
----           ---- --- ------- --------- 
google.com          AAAA 223 Answer  2607:f8b0:400e:c04::64 
+1

Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về lý do và/hoặc cách mã này trả lời câu hỏi cải thiện giá trị lâu dài của nó. – Jack

0

Bạn có thể sử dụng mã này nếu bạn có một loạt các máy chủ trong tập tin văn bản

$a = get-content "C:\Users\host.txt"(file path) 

foreach ($i in $a) 
    { 
$i + "`n" + "==========================";[System.Net.Dns]::GetHostAddresses($i) 

} 
Các vấn đề liên quan