web-dev-qa-db-ja.com

Powershell-テキストリストからサーバー名とIPを取得します

私はこのリンクで提供されている次の提案を使用しています: Experts-Exchange

サーバー(ホスト名)リストを取得して、ホスト名とIPアドレスを.csvファイルに保存しようとしています。

次の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
  }
}

助言がありますか?

6
Jeremy F.

いくつかの単純なタイプミスが機能しているように見えます。

  • $ resultはループ内でリセットされていました
  • ループ内の$ addressesは割り当てられませんでした。
  • $ 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
10
Jeffrey E.