2013-08-07 2 views
3

Powershell 스크립팅을 처음 접했고 하나의 스크립트를 작성해야합니다. 서버 호스트 이름 목록이 있는데 그 서버의 IP 주소를 가져 와서 결과를 파일에 써야합니다.Powershell에서 nslookup을 사용하여 호스트 이름에 대한 IP 주소 받기

호스트 이름은 Excel 스프레드 시트에서 하나의 열이지만 모든 형식 (CSV, 한 줄에 하나의 호스트 이름이있는 간단한 txt 파일 등)으로 형식을 지정할 수 있습니다.

서버의 호스트 이름과 행당 IP 주소의 형식을 지정하고 싶습니다 (서버에 둘 이상의 IP가있는 경우를 대비하여 여러 줄이 있으므로).

지금까지는 줄마다 호스트 이름이있는 간단한 텍스트 파일을 사용했지만 PS의 출력에서 ​​IP 주소가 무엇인지 구분할 수 없습니다.

$servers = get-content "path_to_the_file" 
foreach ($server in $servers) { 
[System.Net.Dns]::GetHostAddresses($server) 
} 

그래서 나는 csv 파일에서 호스트 이름을로드하고 다시 다른 CSV로 호스트 이름 및 관련 IP 주소를 인쇄하는 방법에 대한 궁금 해서요,하지만 난 어떻게 확신입니다.

foreach에서 nslookup $ server를 실행하여 필요한 정보 (호스트 이름 및 IP)를 캡처 할 수 있는지 조사 중입니다.

나를 도와 줄 수 있습니까?

감사합니다.

답변

7

루프 내에서 호스트 이름과 주소를 결합 할 수 있습니다. 호스트가 여러 개의 IP 주소를 가질 수 있으므로이 주소로 가져와야합니다. 이것은 또 다른 루프를 만듭니다. 그렇습니다.

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

DNS 레코드가 없으면 "IP를 확인할 수 없습니다"라는 메시지가 표시됩니다.

$servers = get-content "path_to_the_file"e 
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 
    } 
} 
0

또한 일관된 명명 규칙을 가정하고, '수 - ADcomputer'을 cmdlet에서 foreach는 객체 루프에서 nslookup을 사용할 수 있습니다/컴퓨터는 AD에 있습니다.

'Select-Object-unique'은 결과에서 쿼리 된 DC 인스턴스 하나를 제외한 모든 인스턴스를 제거하는 훌륭한 작업입니다.

get-adcomputer -Filter {name -like 'nameOfComputer*'} | ForEach-Object 
{nslookup $_.name} | Select-Object -Unique 
0

난 그냥 "니콜라스 리더"가 제공하는 cmdlet을 사용했다.

그것은 XX-

명예로 시작하는 각 컴퓨터마다 IP 주소를 가진 응답을 반환!

get-adcomputer -Filter {name -like 'XX-*'} | ForEach-Object {nslookup $_.name} | Select-Object -Unique