***UPDATED

scenariusz: jest lista nazw komputerów, trzeba rozwiązać adresy IP. warunek konieczny – odpowiednie wpisy w DNS.

dla widoczności oneliner rozbity na kilka linijek:

cat .\lista.txt | 
  %{
     $res=ping $_ -n 1;
     $ip=[regex]::Matches($res,"[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+")[0].value;
     echo "$_;$ip"
   } | out-file compip.csv

podstawa to wyrażenie regularne. krótkie wyjaśnienie:

  • adres IPv4 to 3 cyfry, kropka … 3 cyfry. „[0-9]+” oznacza „wystąpienie dowolnej cyfry raz lub więcej”.
  • kropka jest znakiem specjalnym w wyrażeniach regularnych więc musi być wyeskejpowana – „\.”.
  • metoda Matches zwraca tablicę wyników, więc trzeba wybrać pierwszą wartość – stąd pojawia się „[0]” – jako pierwszy element tablicy.
  • no i na końcu wybranie atrybutu 'value’, ponieważ każdy rekord tablicy Matches zawiera kilka atrybutów a tu chodzi konkretnie o wartość.

udpate:

Player uzupełnia, że prawidłowy zapis dla adresu IP powinien wyglądać „[0-9]{1,3}” a nie + bo w końcu może być tylko od jednej do trzech cyfr. w tym przykładzie nie ma to znaczenia, bo ping nie zwróci raczej nieprawidłowego adresu, ale lepiej pisać dobrze (:

Paweł pokazuje, że lepiej niż pinga użyć commandletu ’test-connection’ i się nie bawić w wyrażenia regularne.

eN.

-o((:: sprEad the l0ve ::))o-

Comments (3)

  1. pow3r_shell

    Odpowiedz

    trochę średnio wygląda ten skrypt bo wynika z niego, że mamy przedział pierwszej cyfry (w pierwszej trójce) w adresie od 0-9 co jest bzdurą.
    inaczej : może wyjść nam adres 999.x.x.x
    BTW o ile coś nie pomyliłem.

Skomentuj nExoR Anuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Time limit is exhausted. Please reload CAPTCHA.