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

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

tobsik 06-10-2016 09:20 2675490

Скрипт смены ip адреса если он получен по DHCP
 
Доброго дня всем. Есть один скриптик, он получает данные из реестра, и если ip адрес компьютера получен по DHCP, то прописывает его статически (необходимо все компьютеры в сети перевести на статику) Но скрипт как-то криво работает. А именно не получается сделать условие, получен ли ip по dhcp или присвоен статически.
Код:

@echo off                     
setlocal enabledelayedexpansion
set IFACE="LAN"
set mask=255.255.252.0
set gateway=192.168.36.1
set dns1=192.168.36.2
set dns2=192.168.36.7
set GWMETRIC=1
    set "i=0"
    for /f "delims=" %%i in ('ipconfig /all') do (
      set "arr.!i!=%%i"
      set /a "i+=1"
    )
    set "key=HKLM\SYSTEM\CurrentControlSet\services"
    set "key=%key%\Tcpip\Parameters\Interfaces"
    for /f %%i in ('reg query %key%') do (
      for /f "tokens=3" %%j in (
        '2^>nul reg query "%%i" /v DhcpIpAddress'
      ) do (
        if /i "%%j" neq "0.0.0.0" (
          set "ip=%%j"
          for /f "tokens=2 delims==. " %%k in (
            'set arr ^| findstr /rc:"%%j"'
          ) do set /a "n=%%k-2"
          for /f "tokens=2 delims=:" %%k in (
            'set arr.!n!'
          ) do set "dhcp=%%k"
        )
      )
    )
  chcp 1251>nul
    if /i "%dhcp: =%" equ "нет" (
      set "res=NO"
    ) else (set "res=YES")
    chcp 866>nul
   
    if /i "%res%" equ "yes" (
rem прописываем ip адрес     
echo:%ip% %mask% %gateway%
netsh interface ip set address name=%IFACE% source=static addr=%IP% mask=%MASK% gateway=%GATEWAY% gwmetric=%GWMETRIC%
netsh interface ip set dnsservers name=%IFACE% source=static address=%DNS1% register=PRIMARY validate=no
netsh interface ip add dnsservers name=%IFACE% address=%DNS2% validate=no
ping ya.ru
ECHO: %COMPUTERNAME% %username% %ip% >> \\192.168.36.12\All\ОИТ\logs\%COMPUTERNAME%.txt
      goto:eof
    )
 
  endlocal
exit /b

укажите пожалуйста на ошибку. заранее спасибо

Iska 06-10-2016 12:58 2675550

Делайте на WSH/PoSH, это куда нагляднее и надёжнее.

greg zakharov 06-10-2016 18:42 2675658

Цитата:

Цитата Iska
Делайте на WSH/PoSH, это куда нагляднее и надёжнее.

С таким же успехом можно и Python предложить. Здесь дело в другом: бездумный копипаст с одного форума в качестве "факта" о проделанной работе на этом форуме. Умиляет такой подход.

Iska 06-10-2016 23:51 2675760

Цитата:

Цитата greg zakharov
С таким же успехом можно и Python предложить. »

Предлагаю :). Токмо он не идёт в комплекте, как озвученные выше.

greg zakharov 07-10-2016 09:08 2675835

Цитата:

Цитата Iska
Токмо он не идёт в комплекте, как озвученные выше.

Так что с того? Собрать его из исходников, чай весь процесс можно автоматизировать. К слову, на Tcl решение обозначенного выше вопроса укладывается ровно в семь строк кода, в Perl - три. Кто меньше?

Iska 08-10-2016 10:13 2676087

Ну, кому и семь вёрст — не крюк.


Время: 10:06.

Время: 10:06.
© OSzone.net 2001-