w PS braqje czegoś aka grep. po krótkich poszukiwaniach można znaleźć polecenie ‘Select-String –pattern “czego szukam” ‘ ale po krótkich testach okazuje się, że to się zachowuje trochę niedeterministycznie… znaczy się… trzeba mieć pewność, że to, co zwraca inny cmdlet to string. wystarczy kilka doświadczeń typu:

  • get-childitem | Select-String –pattern “win” – działa ok i wypisze np. “Windows”
  • get-help | Select-String –pattern “syn” – już nie zadziała wedle oczekiwań
  • get-help get-childitem | Select-String –pattern “syn” – zadziała totalnie nie wedle oczekiwań

taki to dziwny zwierz. zaufać mu w każdym razie dość trudno w obecnej postaci. dla tego polecam przypomnieć sobie taki systemowy util, który polecam, bo działa deterministycznie:

PS C:> findstr /?
Searches for strings in files.

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
        [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
        strings [[drive:][path]filename[ ...]]

n.

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

Comments (3)

  1. GT

    Odpowiedz

    A ja się będę czepiał… nie po to cała logika PowerShella zakłada pracę na obiektach i zwracanie obiektów, żebyś po nietekstowych obiektach grzebał wyszukując stringi. A tam, gdzie zwracane są stringi, nie oczekuj dzielenia ich na linie odseparowane CRLF i przeszukiwania linia po linii.
    Tak trochę jedną nogą stoisz w tekstowych plikach DOSa a drugą w obiektowym świecie PS.
    Twój pierwszy przykład analizuje każdy zwrócony obiekt i jego domyślną właściwość Name. I odfiltrowuje każde wystąpienie z założonym patternem.
    Drugi – robi to samo, tylko get-help typu string zwraca jeden obiekt zamiast kolekcji, a jego domyślne właściwości zawierają twój poszukiwany tekst, więc dostajesz go na output.
    A trzeci faktycznie jest mniej logiczny. Ale zwróciłeś uwagę jakiego typu jest get-help get-childitem? I że zupełnie innego niż get-help?
    Przecież (get-help get-childitem).synopsis.tostring() | Select-String -pattern „items” zadziała idealnie.

    I kto by pomyślał, że to ja Ciebie będę na obiektowe myślenie namawiać… ;D

  2. nExoR

    Odpowiedz

    ha. thx za wyjasnienia – wiedzialem gdzie dzwoni, tylko nie za bardzo w ktorym kosciele (; [co za pasqdne powiedzienie]
    a na obiektowosc mnie namawiac oczywiscie nie trzeba – tylko na razie powershell mam opanowany na poziomie basic. ale od jakiegos czasu staram sie nie wlaczac cmd wiec … praktyka czyni lepszym q:

  3. GT

    Odpowiedz

    To chyba w PowerShellu jest „najgorsze”… że ciąg znaków zwracany na ekran nie jest ani jedynym efektem działania ani w żaden sposób uprzywilejowanym.
    Get-Member naszym przyjacielem. Warto go podoczepiać tu i ówdzie, choćby z ciekawości. ;))

Skomentuj nExoR Anuluj pisanie odpowiedzi

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

Time limit is exhausted. Please reload CAPTCHA.