NETSH: Agregar varias DNS y WINS a la interface de red

Iniciado por d3xf4ult, 18 Enero 2013, 22:27 PM

0 Miembros y 1 Visitante están viendo este tema.

d3xf4ult

Hola,

Tengo un problema con este batch.


netsh interface ip set dns "Conexi¢n de  rea local" static 69.135.1.30 register=primary
netsh interface ip add dns "Conexi¢n de  rea local" static 69.135.222.97 index=2
netsh interface ip add dns "Conexi¢n de  rea local" static 69.116.1.30 index=3

netsh interface ip set wins "Conexi¢n de  rea local" static 69.135.1.39
netsh interface ip add wins "Conexi¢n de  rea local" static 69.116.1.30


Las DNS solo me agrega la primera, pero la segunda alternativa y la tercera no.
Alguién sabe como es la sintaxis correcta?

Me pasa lo mismo con las WINS

Y otra cosilla, con el nombre "Conexión de área local"... Como podría hacer un if else, con esto?

Es decir, en el caso de que exista un adaptador con este nombre:
En que caso de que sea: "Conexión de área local" --> Haz esto
Y en caso de que sea: "Conexión de área local 2" --> haz esto otro.

Un Saludo  ;)
Gracias

Eleкtro

La sintaxis cambia de WinXP a Win7, en WinXP debes usar IP, en win7 puedes configurar la ipv4 y la ipv6, infórmate sobre la sintaxis del NETSH de tu versión de Windows.

Código (dos) [Seleccionar]
@Echo OFF

CHCP 1250 >NUL
FOR /F "Tokens=3,* Delims= " %%A IN ('netsh interface show interface') DO (call :Netsh "%%B")
Pause&Exit

:Netsh
If "%~1"=="Conexión de área local"   (
NETSH interface ipv4 set dns  "%~1" static "69.135.1.30"   register=primary
NETSH interface ipv4 add dns  "%~1" static "69.135.222.97" index=2
NETSH interface ipv4 add dns  "%~1" static "69.116.1.30"   index=3
NETSH interface ipv4 set wins "%~1" static "69.135.1.39"
NETSH interface ipv4 add wins "%~1" static "69.116.1.30"
)

If "%~1"=="Conexión de área local 2" (
Pause
)
GOTO:EOF








d3xf4ult

Buenas EleKtro H@cker.

Podrías, si no es molestia, explicar un poco el script.

Sobre todo la primera parte,
CHCP 1250 >NUL
FOR /F "Tokens=3,* Delims= " %%A IN ('netsh interface show interface') DO (call :Netsh "%%B")
Pause&Exit

Eleкtro

Prueba tu mismo lo que pasa al usar el comando:
netsh interface show interface

Con el FOR obtengo los nombres de las interfaces, y llamo a una subrutina pasándole como argumento el nombre de cada interface,

*Si el argumento "%~1" es igual a "conexión de área local" (
     Hacer esto
)


Saludos








d3xf4ult

Bien, perfecto.

Podría hacer esto?

If "%~1"==("Conexión de área local" || "Conexión de área local 2")  (
NETSH interface ipv4 set dns  "%~1" static "69.135.1.30"   register=primary
NETSH interface ipv4 add dns  "%~1" static "69.135.222.97" index=2
NETSH interface ipv4 add dns  "%~1" static "69.116.1.30"   index=3
NETSH interface ipv4 set wins "%~1" static "69.135.1.39"
NETSH interface ipv4 add wins "%~1" static "69.116.1.30"
)


igualmente e independientemente de si es ip o ipv4 en WinXP,  nosé si falla en la sintaxis el "add" o el "index=2" y el "index=3", ya que solo me agrega 1 DNS y 1 WINS pero no más... en las opciones de los subcomandos no encuentro nada.

d3xf4ult

Por cierto, los servidores DNS alternativos (index=2 e index=3) no se agregan al igual que el segundo de WINS, solo se agregan el primero de cada los que llevan SET...

Miré en las guías technet, siguiendo las ayudas de sintaxis que establece microsoft pero nada...

Como puedo agregarlos entonces? si alguien sabe lo agradecería.


Eleкtro

No estoy familiarizado con agregar varias DNS, etc, pero aquí tienes varios ejemplos más al final de la página: http://ss64.com/nt/netsh.html








d3xf4ult

Gracias tio, ya lo he probado y lo que fallaba era que si estableces SET defines static, pero al añadir más DNS o WINS, es decir cuando utilizas ADD en vez de SET no es necesario decir que es estática (static), era tontería pero parece que windows discrimina escrupulosamente este detalle... jaja

Ahora, finalmente me queda que si existe "Conexión de área local" que haga eso y si no es ese y es "Conexión de área local 2", que haga lo mismo.

Valdría algo como esto?

Lo probé pero no funciona...

Sería posible establecer con un OR: Conexión de área local" || "Conexión de área local 2 ?


If "%~1"==("Conexión de área local" || "Conexión de área local 2")  (
NETSH interface ipv4 set dns  "%~1" static "69.135.1.30" register=primary
NETSH interface ipv4 add dns  "%~1" "69.135.222.97" index=2
NETSH interface ipv4 add dns  "%~1" "69.116.1.30" index=3
NETSH interface ipv4 set wins "%~1" static "69.135.1.39"
NETSH interface ipv4 add wins "%~1" "69.116.1.30"
)


Salu2

Eleкtro

Pero si arriba te puse un código de ejemplo!...  :xD

Cita de: Elektro H.
If "%~1"=="Conexión de área local"   (
   NETSH interface ipv4 set dns  "%~1" static "69.135.1.30"   register=primary
   NETSH interface ipv4 add dns  "%~1" static "69.135.222.97" index=2
   NETSH interface ipv4 add dns  "%~1" static "69.116.1.30"   index=3
   NETSH interface ipv4 set wins "%~1" static "69.135.1.39"
   NETSH interface ipv4 add wins "%~1" static "69.116.1.30"
)

If "%~1"=="Conexión de área local 2" (
   Pause
)


PD: El OR no se usa de esa manera, no puedes usarlo en una comparación, para eso ya tienes el ELSE

Ejemplo 1:
If "%~1"=="Conexión de área local" (GOOD) ELSE (BAD)

Ejemplo 2:
(Echo "%~1" | FIND "Conexión de área local" >NUL && (GOOD)) || (BAD)

Saludos