我有一张来自我的局域网(超过1000)的主机列表,这些主机是以Excel格式从以前在我开始工作之前在这里工作过的人提取的。我需要知道每个主机的IP。
我需要一些自动提取(我希望应该有一个更聪明的方法,而不是手动ping所有主机,以获得IP)。我遇到了SO并阅读了this question。使用PowerShell意味着迈向我需要的自动化的良好一步。
但是,我所堆叠的是如何自动执行此命令(在PowerShell中)以便将excel文件用作输入(或文本)并提供包含相关IP的输出文件?
更新:我想到的代码:
$servers = get-content "C:\scr\Servers.txt"
foreach ($Server in $Servers)
{
$Addresses = $null
try {
$Addresses = [System.Net.Dns]::GetHostAddresses("$Server").IPAddressToString
}
catch {
$Addresses = "Server IP cannot resolve."
}
foreach($Address in $addresses) {
write-host $Server, $Address
}
}
用作输入的Excel文件逐行包含单个列中的主机名。这个Excel文件可以很容易地转换为文本格式(这是我现在已经完成的,产生Servers.txt文件)。
此代码的问题在于它仅在Powershell窗口中显示输出,没有文件。
答案 0 :(得分:1)
$output = @()
$servers = get-content "C:\scr\Servers.txt"
foreach ($Server in $Servers)
{
$Addresses = $null
try {
$Addresses = ((Test-Connection $Server | select -skip 3).IPV4Address).IPAddressToString
}
catch {
$Addresses = "Server IP cannot resolve."
}
$output += New-object psobject -property @{
servername = $server
Addresses = $Addresses
}
}
$output | select servername, Addresses | export-csv ".\Addresslist.csv" -NoTypeInformation
答案 1 :(得分:0)
最后,这段代码在调整之后成功运行(并且在Powershell窗口中显示其结果 - 那些IP - 在脚本执行期间)。最后,结果将导出到Addresslist.csv文件中。
$output = @()
$servers = get-content "C:\scr\Servers.txt"
foreach ($Server in $Servers)
{
$Addresses = $null
try {
$Addresses = [System.Net.Dns]::GetHostAddresses("$Server")
}
catch {
$Addresses = "Server IP cannot resolve."
}
$output += New-object psobject -property @{
servername = $server
Addresses = $Address
}
foreach($Address in $addresses) {
write-host $Server, $Address
}
}
$output | select servername, Addresses | export-csv ".\Addresslist.csv" -NoTypeInformation