Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell-从文本列表中获取服务器名称和IP_Powershell_Csv - Fatal编程技术网

Powershell-从文本列表中获取服务器名称和IP

Powershell-从文本列表中获取服务器名称和IP,powershell,csv,Powershell,Csv,我正在使用此链接中提供的以下建议: 我正在尝试获取服务器(主机名)列表,并将主机名和IP地址保存在.csv文件中 $servers = get-content "C:\TEMP\servers.txt" foreach ($server in $servers) { $addresses = [System.Net.Dns]::GetHostAddresses($server) foreach($a in $addresses) { "{0},{1}" -f $server,

我正在使用此链接中提供的以下建议:

我正在尝试获取服务器(主机名)列表,并将主机名和IP地址保存在.csv文件中

$servers = get-content "C:\TEMP\servers.txt"
foreach ($server in $servers) {
  $addresses = [System.Net.Dns]::GetHostAddresses($server)
  foreach($a in $addresses) {
    "{0},{1}" -f $server, $a.IPAddressToString
  }
}
使用以下Powershell代码,我确实可以在结果窗格中看到每个服务器的主机名,但IP地址相同

$servers = get-content "C:\TEMP\servers.txt"
$serversAndIps = "C:\TEMP\List_of_servers_with_ips.csv"


$results =@()
foreach ($server in $servers) {
  $results =@()
    $result = "" | Select ServerName , ipaddress
    $result.ipaddress = [System.Net.Dns]::GetHostAddresses($server)
  foreach($a in $addresses) {
    "{0},{1}" -f $server, $a.IPAddressToString
  }
    $result.servername = $server
    $results += $result
}
$results | export-csv -NoTypeInformation $serversandips
当我打开.csv文件时,我得到以下信息:

"ServerName","ipaddress"
"Server_name_1","System.Net.IPAddress[]"
如果运行此PowerShell脚本,我可以在结果窗格中获取主机名和正确的IP地址。我只需要知道如何将结果传输到.csv文件

$servers = get-content "C:\TEMP\servers.txt"
foreach ($server in $servers) {
  $addresses = [System.Net.Dns]::GetHostAddresses($server)
  foreach($a in $addresses) {
    "{0},{1}" -f $server, $a.IPAddressToString
  }
}

有什么建议吗?

看起来像是工作中的一些简单打字错误

  • $result正在循环内重置
  • 未分配循环中的$地址
  • $result.ipaddress未分配给输出对象的$a.IPAddressToString
试试这个:

$servers = get-content "X:\servers.txt"
$serversAndIps ="X:\test.csv"

$results = @()
foreach ($server in $servers)
{
    $result = "" | Select ServerName , ipaddress
    $result.ipaddress = [System.Net.Dns]::GetHostAddresses($server)
    $addresses = [System.Net.Dns]::GetHostAddresses($server)

    foreach($a in $addresses) 
    {
        "{0},{1}" -f $server, $a.IPAddressToString
        $result.ipaddress = [System.Net.Dns]::GetHostAddresses($server)
    }

    $result.servername = $server
    $result.ipaddress = $a.IPAddressToString
    $results += $result
}

$results | export-csv -NoTypeInformation $serversandips

尝试将$results=@()从循环内部取出。@mjolinor我取出了$results=@(),现在我得到了所有的主机名,但仍然得到了“Server\u Name\u 1”、“System.Net.IPAddress[]”您正在数组中存储
[System.Net.Dns]::GetHostAddresses($Server)
对象。如果执行Get成员,您将看到数组正在存储System.Net.IPAddress类型的对象。您可能需要这样做:$result.ipaddress=([System.Net.Dns]::GetHostAddresses($server))。IPAddressToStringWe都必须从某个地方开始。祝你好运。如果IP不可访问,那么脚本会在第8、15和25行抛出异常,所以它们应该像try-catch一样包装起来