***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.
pow3r_shell
nExoR
RAFi