Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Сопоставление серверов и IP (http://forum.oszone.net/showthread.php?t=264802)

EDIsaev 23-07-2013 11:19 2189071

Сопоставление серверов и IP
 
В локальной сети получаю список серверов командой
net view, получаю ответ в следующем виде
Код:

Servername            Beschreibung

------------------------------------------------
\\MACBOOKPRO-C690      Daniels MacBook Pro
\\PLATZ1203
\\PLATZ1405
\\PLATZ1407
\\PLATZ1409
\\PLATZ1413
\\PLATZ1418
\\PLATZ1419
\\PLATZ1420
\\PLATZ1422
\\PLATZ1423
\\PLATZ1439
\\PLATZ302
\\PLATZ505
\\PLATZ507
\\PLATZ509
\\PLATZ510
\\PLATZ511

потом нужно каждому серверу сопоставить IP с помощью nslookup PLATZ1405
Код:

Server:  ipfire.server.org
Address:  192.168.0.157

Name:    platz1405.server.org
Address:  192.168.0.51

в результате нужен список в виде:
Код:

1. Servername="PLATZ1405", IP="192.168.0.51"
2.
...

начал так:
Код:

@echo off
for /f "tokens=* delims=\" %%i in ('net view^|Find "\"') do (echo %%i)
pause

Проблемы:
1. первое имя получаю вместе с описанием
MACBOOKPRO-C690 Daniels MacBook Pro
как его отрезать?
2. при nslookup как отпарсить именно второе вхождение Address: , а не первое?

Sphinx114 23-07-2013 12:42 2189118

Код:

@echo off
for /f "delims=\ " %%i in ('net view ^| find "\"') do (
set /a count+=1
for /f "skip=1 tokens=2" %%a in ('"nslookup %%i 2>nul | findstr Address"') do (
call echo %%count%%. Servername="%%i", IP="%%a">>list.txt
))


Iska 23-07-2013 13:25 2189139

PowerShell:
Код:

net.exe view | Select-String -Pattern "\\\\(.*?) " | ForEach-Object -Process {
    $IPHostEntry = [Net.Dns]::GetHostEntry($_.Matches[0].Groups[1].Value)
   
    Write-Host $("{0, -30}" -f $IPHostEntry.HostName) -NoNewline
   
    $IPHostEntry.AddressList | ForEach-Object -Process {
        Write-Host $("{0, -17}" -f $_.IPAddressToString) -NoNewline
    }
    Write-Host
}


EDIsaev 23-07-2013 14:09 2189168

Sphinx114, спасибо большое! Всё правильно
я пробовал с пробелом "delims=\ " результат был тот же, что и без него...
не подумал, что tokens=* всё портил)

по второму циклу пара вопросов
"skip=1 tokens=2" это ищем 2 вхождения и первое игнорируем?
для чего 2>nul не понял, без него работает вроде так же

а ещё вопрос не по реализации, а по используемым мною командам
может есть способ проще? может какая-то команда показывает сразу и IP и имена, а я не нашёл?


Цитата:

Цитата Iska
PowerShell: »

Спасибо тоже, для общего развития... но у меня XP там вроде надо его отдельно устанавливать, пока необходимости не вижу

Iska 23-07-2013 14:35 2189181

Цитата:

Цитата EDIsaev
"skip=1 tokens=2" это ищем 2 вхождения и первое игнорируем? »

Пропускаем первую («skip=1») из отфильтрованных по «Address» строк:
Цитата:

Address: 192.168.0.157
Address: 192.168.0.51
Берём только второй токен («tokens=2»).

Цитата:

Цитата EDIsaev
для чего 2>nul не понял, без него работает вроде так же »

Поскольку вывод и так фильтруется по «Address» — действительно, не особо нужен. Но так — правильнее.

Цитата:

Цитата EDIsaev
а ещё вопрос не по реализации, а по используемым мною командам
может есть способ проще? »

Чаще делают опрос AD на предмет перечня машин, а не «net.exe view».

Цитата:

Цитата EDIsaev
может какая-то команда показывает сразу и IP и имена, а я не нашёл? »

Нет.

Sphinx114 23-07-2013 16:13 2189251

Цитата:

Цитата EDIsaev
tokens=2 »

Разделители подстрок по умолчанию (delims) это таб и пробел. tokens=2 это вторая подстрока в строке, она присваивается переменной %%a
Цитата:

Цитата EDIsaev
для чего 2>nul не понял »

Да я в ком строке проверял и разок еггог вылез (*** Can't find server name for address x.x.x.x: Timed out) , на всякий случай его нейтрализовал, хотя да, на stdin фаиндстра оно не идёт.

sunnykey 23-07-2013 16:22 2189255

Цитата:

Цитата Iska
Цитата EDIsaev:
может какая-то команда показывает сразу и IP и имена, а я не нашёл? »
Нет. »

Только если в powershell
Код:

Test-connection "ya.ru"

Iska 23-07-2013 17:00 2189285

sunnykey, это, фактически, тот же «Win32_PingStatus».


Время: 04:53.

Время: 04:53.
© OSzone.net 2001-