Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Uruchomienie programu Netsh w Windows 7

20 Wrz 2010 00:36 5109 4
  • Poziom 10  
    Witam

    Zwracam się do Was o pomoc/poradę jak obejść problem z "innym" działaniem programu netsh pod W7.
    Mianowicie, mam do skonfigurowania kilka ustawień sieciowych w kilkudziesięciu komputerach (IP, maska, brama, dns'y ustawienia zależne od nazwy komputera.)
    Stworzyłem BAT'a, który odczytuje nazwę kompa i w zależności od jego nazwy wprowadza do kompa odpowiednie IP.
    Testowany .bat pod Vista działa wzorowo,
    natomiast odpalany na W7 ma problemy z DNSami.

    A dokładniej:

    Code:
    @echo off
    

    GOTO %computername%
    REM #####################################
    :K012CN
    echo ODDZIAŁ KIELCE - CENTRALA 12
    netsh interface ip set address name="Połączenie lokalne" static 10.65.30.17 255.255.255.0 10.65.30.1
    netsh interface ip set dns "LAN" static 10.65.30.2
    netsh interface ip set dns "LAN" static 10.25.1.11
    netsh interface ip set dns "LAN" static 10.25.1.14
    REM #####################################
    REM  dalej podobnie tylko inne konfiguracje


    Problem pojawia się przy deklaracji DNS - pojawia się komunikat o treści:
    Skonfigurowany serwer DNS jest nieprawidłowy lub nie istnieje.

    Adresy DNS są jak najbardziej prawidłowe bo gdy wpiszę je za pomocą klikologi
    w konfiguracji sieciowej to działają.

    Nie wiem na jakiej podstawie W7 tak się zachowuje.

    Nie pomaga zmiana podejścia do problemu poprzez wprowadzenie ustawień w okienkach i zapisanie profilu do pliku następnie skasowanie ustawień i ponowne wczytanie (to tak w celach testowych).

    Nie kumam działania programu NETSH w Windows 7.

    Aha dodam jeszcze, że W7 ma problem z nazwa połączenia sieciowego
    "Połączenie lokalne" - gdy jest tak zapisane w pliku to nie rozpoznaje połączenia.
    Zmuszony byłem napisać skrypt zmieniający nazwę na "LAN" i po wprowadzeniu danych przywraca starą nazwę "Połączenie lokalne".
    Oczywiście odpowiednio zmieniłem nazwy na "LAN" w pliku z danymi IP itd.

    A to ten skrypt wywoływany z głównego pliku bat

    Code:
    cscript RenToLAN.vbs


    plik RenToLAN.vbs
    Code:
    Const NETWORK_CONNECTIONS = &H31&
    

    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(NETWORK_CONNECTIONS)

    Set colItems = objFolder.Items
    For Each objItem in colItems
        If objItem.Name = "Połączenie lokalne" Then
            objItem.Name = "LAN"
        End If
    Next


    Po wprowadzeniu danych sieciowych odpalam
    skrypt

    Code:
    cscript RenLANTo.vbs


    plik RenLANTo.vbs
    Code:
     Const NETWORK_CONNECTIONS = &H31&
    

    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(NETWORK_CONNECTIONS)

    Set colItems = objFolder.Items
    For Each objItem in colItems
        If objItem.Name =  "LAN" Then
            objItem.Name = "Połączenie lokalne"
        End If
    Next


    Te ostatnie przykłady podałem gdyby ktoś miał potrzebę zmiany znanej nazwy połączenia sieciowego na inną :D


    Macie jakiś sensowny pomysł na to by bez problemów zautomatyzować konfigurację sieciowa w W7 ?
  • Poziom 10  
    to już przerabiałem -
  • Pomocny post
    Poziom 11  
    IMHO do Windows 7 lepiej nadają się skrypty w PowerShellu, natomiast spróbuj raczej dla Win7 pisać tak:

    Code:

    netsh interface ipv4 add dnsserver name=”LAN” address=adr.es.dn.s1 index=1
    netsh interface ipv4 add dnsserver name=”LAN” address=adr.es.dn.s2 index=2


    Sprawdź, czy to pomoże.

    EDIT:

    sprawdź jeszcze w win7 jak się nazywa to połączenie w Win7:
    Code:
    netsh interface ipv4 show interfaces
  • Poziom 10  
    W tej preinstalce (obrazach) nazwa sieci to Połączenie lokalne

    problem polega na kodowaniu polskich liter przez notatnik i zapisaniu ich do pliku wykonywalnego - problem właściwie jest w samej konsoli cmd - tutaj nie jest rozpoznawana prawidłowo nazwa a dokładniej literki Ł; Ą; dlatego też odwołanie przez taką nazwę powoduje wywalanie błędów.

    Oto rozwiązanie

    tak jak wcześniej zmieniam nazwę połączenia sieciowego z Połączenie lokalne
    na np LAN za pomocą skryptu

    uruchamiam program bat z konfiguracjami sieciowymi w których są użyte odwołania do nazwy poprzez name="LAN"

    następnie wykonuje się skrypt zmiany przywrócenia nazwy (teoretycznie można się bez tego kroku odbyć ale nie chcę mieszać gdyby komuś innemu przyszło kiedyś coś pogmerać skryptami w innym czasie :-)

    a wpisy w pliku z danymi sieciowymi :
    Code:

    @echo on
    cls
    SET BRAMA=
    SET ODD=
    cscript rentolan.vbs

    echo %computername%
    GOTO %computername%

    REM #####################################
    :K012CN
    echo ODDZIAŁ KIELCE - CENTRALA 12
    netsh interface ip set address name="LAN" static 10.65.30.17 255.255.255.0 10.65.30.1  0
    netsh interface ip set dns name="LAN" source=static addr=10.65.30.2 validate=no register=primary
    netsh interface ip add dns name="LAN" addr=10.25.1.11 index=2 validate=no
    netsh interface ip add dns name="LAN" addr=10.25.1.14  index=3 validate=no
    SET BRAMA="10.65.30.1"
    GOTO SONAR
    REM #####################################
    :T008CN
    echo ODDZIAŁ TORUŃ - LOKAL 08
    netsh interface ip set address name="LAN" static 10.8.12.08 255.255.255.0 10.8.12.254 0
    netsh interface ip set dns name="LAN" source=static addr=10.8.12.10 validate=no register=primary
    netsh interface ip add dns name="LAN" addr=10.25.1.11 index=2 validate=no
    netsh interface ip add dns name="LAN" addr=10.25.1.14 index=3 validate=no
    SET BRAMA="10.8.12.254"
    SET ODD="LOKALNY"
    GOTO SONAR
    REM #####################################
    .
    .
    .
    REM #####################################
    :SONAR
    goto dalej
     ping %brama% -n 3
    echo kod bledu: %ERRORLEVEL%
    IF ERRORLEVEL==1 GOTO BLAD
    IF ERRORLEVEL==0 GOTO DALEJ
    :BLAD
    ECHO  ****     ****   **  **   ****      **** 
    ECHO  **  **    **    *** **  **  **    **  **
    ECHO  **  **    **    ** ***  **        **  **
    ECHO  ****      **    **  **  **  ***      ***
    ECHO  **        **    **  **  **  **      **   
    ECHO  **        **    **  **  **  **           
    ECHO  **       ****   **  **  *****       **   
    ECHO                                           
    ECHO SPRAWDZ PODLACZENIE SIECIOWE
    ECHO ORAZ KONFIGURACJE KARTY SIECIOWEJ
    PAUSE 0
    GOTO KONIEC
    :DALEJ
     IF %ODD%=="LOKALNY" GOTO koniec

    ipconfig /registerdns

    :KONIEC
    cscript renlanto.vbs
    exit


    Podsumowanie:
    A .Jak widać błąd był raczej po mojej stronie - pośpiech to niedobra rzecz
    B. nie wczytałem się opis - otóż w Win 7 w netsh domyślnie włączone jest sprawdzenie adresów i trzeba je wyłączyć validate=no oraz przypisać dla dwóch pozostałych DNS'ów index=2 oraz index=3
    C. następnym błędem było wpisywanie komendy SET DNS zamiast ADD DNS jak widać ma to ogromne znaczenie :-)
    =======================================================
    Opisałem to na wypadek gdyby ktos miał podobny problem i sobie z nim nie poradził w Win7

    Dziękuję za udzielanie się w tym poście i zamykam temat