OffTopic
ogólnie staram się szanować nasz piękny język i tępić 'kontenty’ czy 'autentykację’ [choć pewnie lada moment zostaną zapisane jako oficjalnie poprawne]. niemniej tłumaczenia niektórych fraz brzmią … zabiera trochę czasu, żeby się domyślić /: to na tyle jeśli w kwestii filozofii porannej, czas na gimnastykę z innego języka.
PS case sensivity
PS jest miły i przyjemny. stara się użytkownika we wszystkim wyręczyć, pomóc mu, wybaczyć błędy. czasem aż do przesady. ale jak każda istota, ma swoje odchyły, aberracje. tak też jest w przypadq traktowania wielkości znaków – ogólnie wszystko, dla ułatwienia, jest z automatu niewrażliwe na wielkości znaków. czyli mówiąc potocznie, jest baj difolt kejs-insensitive. są jednak wyjątki [bez których reguła nie mogłaby być pełna]:
- najbardziej zdradliwe, bo też i często używane, to ’-unique’. z jednej strony logiczne, że unikalne ma być unikalne… z drugiej, skoro PS jest nieczuły na stan [prawda, że też ładne tłumaczenie?], to skąd nagle taka zmiana…
C:\...ive\_ScriptZ :))o- $PS='nExoR','nexor','Nexor'
C:\...ive\_ScriptZ :))o- $PS|select -Unique
nExoR
nexor
Nexor
jak widać, każdy =))o- jest unikalny. rozsądnie. tak samo zresztą zachowuje się polecenie 'get-unique’, a mogłoby się wyróżniać choćby dodatkowym parametrem ’-CI’. ale się nie wyróżnia.
na każdego jest oczywiście metoda, tzw. walec. takim walcem w PS jest sortowanie, które również posiada parametr ’-unique’, ale ten unique jest bardziej unique niż inne, bo jest właśnie nieczuły na wielkość:
C:\...ive\_ScriptZ :))o- $PS|sort -Unique
Nexor
[to nie jest prawidłowy =))o- ]
- drugim przykładem, zapewne bardziej [nomen omen] unikalnym, są wyrażenia regularne. oczywiście i tutaj są dwie wariacje – CI i CS, więc trzeba uważać. jeśli używa się zwykłych reguł 'match’ lub 'replace’, zachowuje się standardowo [czyli nie zwraca uwagi na wielkość znaków]:
C:\...ive\_ScriptZ :))o- $PS='nExoR jest Niewrażliwy Na Walizki'
C:\...ive\_ScriptZ :))o- $PS -match 'nexor'
True
jeśli jednak zdefiniuje się wyrrega [tak pewnie nazywał by się w polskiej wersji Logo. tłumaczone języki to sqcha] … regexa, to zachowuje się inaczej [czyli CS]:
C:\...ive\_ScriptZ :))o- $PS='nExoR jest Niewrażliwy Na Walizki'
C:\...ive\_ScriptZ :))o- [regex]$rxeN="nexor"
C:\...ive\_ScriptZ :))o- $PS -match $rxeN
False
zmusić regexa do niewrażliwości można na dwa sposoby – albo definiując dodatkową opcję podczas deklaracji, lub modyfiqjąc samą definicję wyrażenia. pierwsza wersja może przestraszyć swoją monstrualnością, ale jak się w kodzie definiuje wiele regexów to warto raz zdefiniować i potem używać:
C:\...ive\_ScriptZ :))o- $PS='wyczUleniE na poKrowce to nie nExoR'
C:\...ive\_ScriptZ :))o- $rxOptCI = ([System.Text.RegularExpressions.RegexOptions]::IgnoreCase -bor [System.Text.Regular
Expressions.RegexOptions]::Compiled)
C:\...ive\_ScriptZ :))o- $rxeN=New-Object System.Text.RegularExpressions.Regex("nexor",$rxOptCI)
C:\...ive\_ScriptZ :))o- $PS -match $rxeN
True
opcje są wartością binarną, której każdy bit ma inne znaczenie. stąd binarny OR modyfiqjący jej wartość. jeśli wyrażeń regularnych w kodzie jest niewiele, bardziej opłaca się CI ustawić w jego definicji:
C:\...ive\_ScriptZ :))o- $PS='deLikAtny ProCeS nExoRa'
C:\...ive\_ScriptZ :))o- [regex]$rxeN="(?i)nexor"
C:\...ive\_ScriptZ :))o- $PS -match $rxeN
True
PostScriptum
znajomość sztuczek i tricków języka jest bardzo przydatna. można zaoszczędzić wiele linii kodu, a czasem bardzo wiele czasu, zmarnowanego na wyważanie otwartych okien. polecam również zajrzeć na powershellpl.net, ponieważ Bartek się w końcu uaktywnił.
eN.
mój zewnętrzny IP
dość częste pytanie, jak się ma dynamiczny adres IP. najłatwiej oczywiście wejść na jakąś stronę, która ten adres pokazuje. ale lepiej napisać sobie skrypt (:
nie jest to skomplikowane, wystarczy użyć invoke-webRequest, który jest świetną przeglądarką textową. do testów wybrałem stronę 'http://whatismyipaddress.com’ ale można wybrać dowolny inny. po wejściu od razu widzę, że jestem przekierowany na 'http://whatismyipaddress.com/pl/moj-ip’. żeby oszczędzić sobie trochę grzebaniny robię inspekcję elementu, gdzie jest adres i widzę. że jest to DIV o ID=’section_left’. można to olać, ale przyda się żeby trochę zawęzić wyszukiwanie.
teraz z linii poleceń.
na początek trzeba się zaznajomić z obiektem więc warto sprawdzić:
polecam sprawdzić jeszcze $page.links oraz $page.images – może się kiedyś przydać. po wykonaniu
będzie już widać kawałek interesującego kodu. teraz trzeba wyłowić IP. do tego celu warto zrobić wyrażenie regularne, bo do tego są niezastąpione. np. takie super-proste, które po prostu szuka czterech liczb oddzielonych kropką, gdzie każda liczba ma od 1-3 cyfr:
do celów skryptu można by się poważyć o napisanie porządnej walidacji, czyli dodatkowo, żeby te liczby miały wartości od 1-255. ale to nie ten wpis. po przepuszczeniu wyniku będzie wyświetlone IP:
można teraz się dalej bawić, potestować na innych stronach, analizując elementy zwracanej strony. nie takie trudne (:
eN.