Powershell 来自IP地址的DNS名称
我需要创建一个IP地址和DNS名称的列表。我 我正在尝试从IP地址获取DNS名称。我试过两种方法: 尝试/接住,但之后就结束了。 没有,它只输出我无法关联到IP地址的DNS名称。 以下是我目前掌握的情况:Powershell 来自IP地址的DNS名称,powershell,Powershell,我需要创建一个IP地址和DNS名称的列表。我 我正在尝试从IP地址获取DNS名称。我试过两种方法: 尝试/接住,但之后就结束了。 没有,它只输出我无法关联到IP地址的DNS名称。 以下是我目前掌握的情况: #try { Get-Content C:\Users\pintose\Documents\IP_Address.txt | ForEach-Object {([system.net.dns]::GetHostByAddress($_)).hostname >> C:\User
#try {
Get-Content C:\Users\pintose\Documents\IP_Address.txt | ForEach-Object
{([system.net.dns]::GetHostByAddress($_)).hostname >> C:\Users\user\Documents\hostname.txt}
# }
# catch {
if ($_.Exception.Message -like "*The requested name is valid*") {
Write-Output "UNREACHABLE" | Out-File C:\Users\user\Documents\hostname.txt }
# }
尝试以下解决方案:
$outFile = "C:\Users\user\Documents\hostname.txt"
Get-Content C:\Users\pintose\Documents\IP_Address.txt | ForEach-Object {
$hash = @{ IPAddress = $_
hostname = "n/a"
}
$hash.hostname = ([system.net.dns]::GetHostByAddress($_)).hostname
$object = New-Object psobject -Property $hash
Export-CSV -InputObject $object -Path $outFile -Append -NoTypeInformation
}
我们创建一个对象,其中包含IP地址,如果无法解析,则主机名为n/a。然后,将对象导出到文件中。您将得到如下结果:
192.0.0.1;Server1这使用了一个工作流,因此它可以对每个服务器执行并行操作
Workflow Get-DNSNames([string[]]$IPAddresses){
foreach -parallel ($IP in $IPAddresses){
try{
@{$IP = $(([system.net.dns]::GetHostByAddress($IP)).hostname)}
}catch{
@{$IP = "N/A"}
}
}
}
$List = Get-DNSNames -IPAddresses $(Get-Content "C:\IPAddresses.txt").Split("[\r\n]")
$List | Out-File "C:\IPAddresses_Complete.txt"
您可能想尝试这里提供的其他解决方案,但以下是一些您可能需要考虑的问题 首先,我建议不要在整个第一个命令中使用try{}catch{}。如果在数据中循环,而其中一个数据导致异常,则可能无法完成任务。将try{}catch{}放在有风险的代码行周围:
Get-Content C:\Users\pintose\Documents\IP_Address.txt | Foreach-Object {
try {
([system.net.dns]::GetHostByAddress($_)).hostname >> C:\Users\user\Documents\hostname.txt
}
catch {
if ($_.Exception.Message -like "*The requested name is valid*") {
Write-Output "UNREACHABLE" | Out-File C:\Users\user\Documents\hostname.txt
}
}
}
捕获异常时,您只在请求的名称有效的情况下写入文本文件。您的意思是无效吗?。否则,您永远不会向文件写入任何内容。因此,回到原始代码:
如果有任何IP地址引起的异常
例外情况是,请求的名称无效,我认为可能是输入错误?
然后,不会将任何错误写入文件,脚本结束时不必完成所有IP地址。
其他事项:
您使用两种方法写入文件:>>和Out file。可能最好使用PowerShell cmdlet,但使用-Append开关以确保追加到文件末尾:
([system.net.dns]::GetHostByAddress($_)).hostname | Out-File C:\Users\user\Documents\hostname.txt -Append
Write-Output "UNREACHABLE" | Out-File C:\Users\user\Documents\hostname.txt -Append
@他建议了一种方法,确保在确定输出文件时同时写入IP地址和主机名。我会看一看这是怎么回事
我的最后一个建议是小心从包含Get内容的.txt文件中读取。它们通常有尾随的空行,您可能希望尝试忽略这些空行。在这种情况下,这可能不是什么大问题,因为这只意味着DNS尝试失败,但我已经看到,在一家非常大的公司中,当与其他命令一起使用时,这样的事情会对每个邮箱造成严重破坏。另一种方式
$ip_list = Get-Content ./IP_Address.txt
foreach ($ip in $ip_list) {
try {
([system.net.dns]::GetHostByAddress($ip)).hostname |
Out-File -FilePath ./hostname.txt -Append
}
catch {
if ($_.Exception.Message -like "*The requested name is valid*") {
Write-Output "UNREACHABLE" | Out-File -FilePath './hostname.txt' -Append }
}
}
有很多工具可以实现这一点,但是如果你需要一个快速而肮脏的解决方案,你可以在任何地方运行,这将完成工作 使用永久有用的,如psloggedon/accepteula\\computername或ip地址,您可以找到当前登录的用户,以检查这台计算机是否正确。例如:
c:\pstools>psloggedon /accepteula \\10.0.0.10
loggedon v1.33 - See who's logged on
Copyright ⌐ 2000-2006 Mark Russinovich
Sysinternals - www.sysinternals.com
Users logged on locally:
Error: could not retrieve logon time
NT AUTHORITY\LOCAL SERVICE
Error: could not retrieve logon time
NT AUTHORITY\NETWORK SERVICE
1/12/2015 8:06:51 AM DOMAIN\user
Error: could not retrieve logon time
NT AUTHORITY\SYSTEM
Users logged on via resource shares:
1/17/2015 2:26:43 PM DOMAIN\user
现在,您已经确认此IP地址是该用户的正确IP地址。我们只需要使用nslookup查找IP地址
C:\>nslookup 10.0.0.10
Server: server.domain.com
Address: 10.10.0.1
Name: Workstation07.server.domain.com
Address: 10.0.0.10
现在我们知道这台计算机的名称是Workstation07。Wow!非常感谢!这非常有帮助,非常感谢您花时间发布和编写代码。查理·乔恩特:那么,你对阅读.txt文件有什么建议呢?如果有空行,它们仍然需要处理。在这种情况下,我希望在导入CSV时使用CSV,而不是纯文本文件。如果您需要在文本文件中使用“获取内容”,可以在循环每行时添加一个检查,例如,$\uu-match\S+将是一个简单的检查,以确保至少有一个非空白字符。感谢您花时间提供帮助!谢谢我还没试过,但看起来不错。谢谢你花时间帮忙