Konfiguracja ustawień sieciowych (IP, DNS) w systemach Windows za pomocą skryptu CMD

W mojej pracy często zachodzi potrzeba wpinania laptopa kablem sieciowym do różnych urządzeń, a także przepinania go pomiędzy różnymi sieciami. Za każdym razem wiąże się to z koniecznością modyfikacji ustawień sieciowych (adres IP, serwer DNS itd.). Czynność ta jest bardzo prosta i polega na wpisaniu wielu cyferek w kilku miejscach, ale jednak jest stratą czasu i naraża nas na drobne pomyłki będące powodem dodatkowych frustracji.

Aby uprościć sobie życie korzystam z plików wsadowych (.bat), z których jeden ustawia mi pobieranie adresu z DHCP, a pozostałe dedykowane są do różnych zakresów IP.

 

Oto prosty skrypt, który ustawia mi źródło adresu jako  DHCP:

netsh interface ip set address „Local Area Connection” source=dhcp
netsh interface ip set dns „Local Area Connection” source=dhcp

W pierwszym wersie ustawiamy adres karty sieciowej, w drugim serwer DNS. „Local Area Connection” to oczywiście nazwa połączenia sieciowego.

Tutaj mamy przykładowy skrypt, który ustawia konkretny adres oraz statyczny serwer DNS:

netsh interface ip set address „Local Area Connection” static 192.168.1.2 255.255.255.0 192.168.1.1 1
netsh interface ip set dns „Local Area Connection” static 192.168.1.1 primary

Wartości są łatwe do zinterpretowania: 192.168.1.2 to mój adres, 255.255.255.0 to maska, 192.168.0.1 to brama, a 1 na końcu to tzw. „gateway metric”.

Mam nadzieję, że przedstawione skrypty będą dla Was przydatne. Jeśli macie jakieś ciekawe sugestie zachęcam do komentowania.


Łukasz Skalikow

Obecnie Manager IT. Przez lata byłem Inżynierem systemów. Jestem entuzjastą i specem od vSphere, Windows serwer, GPO. Od zawsze byłem zwolennikiem wiersza poleceń i automatyzacji. Obecnie, ze względu na pracę, rodzinę i wyjazdy służbowe, dużo mniej udzielam się na blogu, ale mam nadzieję, że pośród kilkuset porad opublikowanych na spece.it, wiele osób znajdzie dla siebie coś przydatnego :)

Przeczytaj także...

14 komentarzy

  1. gmeger napisał(a):

    a czy da się tak modyfikować ustawienia systemowe proxy (dostępne opcje internetowe)?

    • Łukasz Skalikow napisał(a):

      Witam. Oczywiście da się 🙂 Wszystko zależy od konkretnego scenariusza i tak jak Piotr napisał, zebrałoby się tego na oddzielny artykuł (czego nie omieszkam uczynić 😉 Windowsy pozwalają ustawić tzw globalne proxy, czyli proxy dla każdej aplikacji odwołującej się do protokołu http : netsh winhttp set proxy http://www.proxy.com:80 ,gdzie http://www.proxy.com to oczywiście adres, który powinieneś ustawić wedle własnych potrzeb. To co ustawisz, nie będzie widoczne w proxy konkretnych przeglądare ( Opera, IE, Firefiox ). Jesli ustawisz proxy w dla danej przegladarki, to te ustawienia nadpiszą proxy globalne.

      Aktualne ustawienia globalnego proxy możesz podejrzeć używając polecenia: netsh winhttp show proxy, a jesli chcesz wyczyścić swoje ustawienuia, użyj: netsh winhttp reset proxy

      Nie wiem, czy udało mi się odpowiedziec na Twoje pytanie.

  2. Piotr Berent napisał(a):

    Da się. 🙂 Obiecujemy, że opiszemy to już niebawem.

  3. gajowy napisał(a):

    Jak poradzić sobie z problemem polskich znaków? O ile lokalnie wpisanie w konsoli nazwy „Połączenie lokalne” nie stanowi problemu, to już zarządzanie zdalną stacją przy pomocy np. pstools powoduje wyświetlenie „krzaczków” i błąd.

    • Łukasz Skalikow napisał(a):

      Witaj. Wiem dokładnie o czym mówisz i nie mam dobrych wiadomości. PSEXEC nie wspiera polskich znaków. Ale każdy problem można obejść 🙂 Co byś powiedział na prosty skrypcik VBS, który uruchomisz psexeciem i który zmieni Ci nazwę połączenia sieciowego na „normalną” ?

      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 Sieciowe” Then
      objItem.Name = „Local Area Connection”
      End If
      Next

    • gajowy napisał(a):

      Dzięki za szybką odpowiedź. Zmiana nazw na zdalnej maszynie nie zawsze jest dobrym, a czasem wręcz jest niemożliwym rozwiązaniem. Do tej pory radziłem sobie uruchamiając na zdalnej maszynie plik wsadowy z odpowiednią komendą ale to też ma swoje niedogodności. Np. gdy chcę wyświetlić właściwości konta o nazwie Łukasz poleceniem net user. Szczerze powiedziawszy liczyłem na podpowiedź jakim ciągiem znaków zastąpić polskie znaki diakrytyczne.

  4. Piotr Berent napisał(a):

    A czy z pomocą nie przyjdzie Ci PowerShell? Jeśli chodzi o odpytywanie o lokalnych użytkowników to jest taka możliwość:

    $ComputerName = „.”
    $Computer = [ADSI]”WinNT://$ComputerName,computer”
    $Users = $Computer.psbase.Children | Where-Object {$_.psbase.schemaclassname -eq „user”}
    ForEach ($User in $Users)
    {
    $User.Name
    }

    Kropkę zastępujesz jedynie nazwą komputera zdalnego. (Oczywiście musisz wywołać ten skrypt w kontekście użytkownika, który jest w grupie administatorów na komputerze zdalnym)

    Z „obiektu” User możesz wyciągnąc takie oto właściwości:

    AutoUnlockInterval
    BadPasswordAttempts
    Description
    FullName
    HomeDirDrive
    HomeDirectory
    LockoutObservationInterval
    LoginHours
    LoginScript
    MaxBadPasswordsAllowed
    MaxPasswordAge
    MaxStorage
    MinPasswordAge
    MinPasswordLength
    Name
    objectSid
    Parameters
    PasswordAge
    PasswordExpired
    PasswordHistoryLength
    PrimaryGroupID
    Profile
    UserFlags

    Oczywiście mowa tu o lokalnych użytkownikach. Do użytkowników domenowych należy odwoływać się nieco inaczej.

  5. ila456 napisał(a):

    Witam, mam pewien problem po zaktualizowania win 8 do 10 nie ma połąćzenia z wifi. Po diagnozie wyskoczył mi komunikat brak zainstalowanego protokołu sieciowego chociaż są zainstalowane proszę o pomoc

    • Łukasz Skalikow napisał(a):

      Za mało danych. Musisz podać dokładną treść komunikatu. W którym momencie się pojawia? Widzisz w ogóle jakieś sieci wifi? Co widzisz w ustawieniach połączenia? Co widać po wpisaniu „ipconfig /all” ?

  6. clays napisał(a):

    Witam, a jak można dodać dodatkowy adres ip do karty sieciowej?

  7. Ryza Tosia napisał(a):

    A mnie to nie działa . Uruchamiam CMD i wpisuje „netsh interface ip set address „Local Area Connection” static 192.168.1.102 255.255.255.0 192.168.1.110 1″
    Otrzymuje komunikat „Nazwa pliku, nazwa katalogu lub składnia etykiety woluminu jest niepoprawna.”
    Ktoś wie co robię źle?

    • Darek napisał(a):

      Zamiast „Local Area Connection” wpisz nazwę połączenia sieciowego jakie jest na Twoim komputerze. Zapewne będzie to „Połączenie lokalne”

  8. ramzes napisał(a):

    Mam pytanie chciałbym korzystać z dwóch połączeń jedno przewodowe a drugie wi-fi.
    Obie sieci to zupełnie inne sieci ale działające w tym samym lokalu. Aby to działało to tylko wystarczy ustawić bramę tylko w tym połączeniu które ma nam służyć do połączenia z internetem? I wtedy będzie wszystko działało?

    Drugie pytanie czy w systemie windows 8 lub 10 jest możliwość skorzystania z dwóch sieci aby przyśpieszyć pobieranie? czyli jedno łącze przewodowe mam 10mbps a drugie 5 mbps a chciałbym pobierać pliki z prędkością tak zwane agregacje łącz.

    Trzecie pytanie jak w systemie win10 ustawić które połaczenie ma być domyśle bo jak mam dwa to zawsze przewodowe jest domyślnym.

    • Łukasz Skalikow napisał(a):

      hej, o priorytetach sieci już kiedyś pisaliśmy https://spece.it/priorytety-interfejsow-sieciowych-windows/

      W Windows 10 działa to tak samo.

      Połączenia można mostkować, ale nie wiem czy da to wymierny efekt w prędkości ściągania plików Koniecznie napisz czy pomogło. A jak się mostkuje połączenia sieciowe? Zaznacz dwa połączenia (z wciśniętym Ctrl), kliknij prawym przyciskiem myszy i wybierz „Bridge Connections”.

Dodaj komentarz