Search code examples
powershelltext-parsing

Powershell script to parse a string


I have a string like

Set-Cookie:

ehCookie="X0xhc3RFbnRyeVVSTENvbnRleHQ9aHR0cHM6Ly93d3c5LmNtLmVoZWFsdGhpbnN1cmFuY2UuY29tL2VoaS9ORVdCT0xvZ2luLmRzfF9MYXN0VVJMPWh0dHBzOi8vd3d3OS5jbS5laGVhbHRoaW5zdXJhbmNlLmNvbS9laGkvRGlzcGF0Y2guZnN8X0xhc3RXZWJDb250ZXh0PUJPfF9TZXNzaW9uU3RhcnQ9MDUtMjItMjAyMSAwMjoxMTo0M3xfV2ViQ29udGV4dD1CTw=="; Version=1; Path=/; Secure; HttpOnly,bov1-route=1621674704.476.8922.899787; Path=/; Secure; HttpOnly,JSESSIONID=304447EB52E6D43AB4ABA1191D92D07A; Path=/; Secure; HttpOnly

I want to parse the value of ehCookie & JSESSIONID like

X0xhc3RFbnRyeVVSTENvbnRleHQ9aHR0cHM6Ly93d3c5LmNtLmVoZWFsdGhpbnN1cmFuY2UuY29tL2VoaS9ORVdCT0xvZ2luLmRzfF9MYXN0VVJMPWh0dHBzOi8vd3d3OS5jbS5laGVhbHRoaW5zdXJhbmNlLmNvbS9laGkvRGlzcGF0Y2guZnN8X0xhc3RXZWJDb250ZXh0PUJPfF9TZXNzaW9uU3RhcnQ9MDUtMjItMjAyMSAwMjoxMTo0M3xfV2ViQ29udGV4dD1CTw==

and

304447EB52E6D43AB4ABA1191D92D07A

How do I go about writing a powershell script for this. Any help will be greatly appreciated.


Solution

  • You could do something like ($str contains the string to parse):

    if ($str -match 'ehCookie=([^;]+).*JSESSIONID=([\dA-F]+)') {
        $ehCookie   = $matches[1]
        $jSessionId = $matches[2]
    }
    

    OR

    $ehCookie   = ([regex]'(?i)ehCookie=([^;]+)').Match($str).Groups[1].Value
    $jSessionId = ([regex]'(?i)JSESSIONID=([\dA-F]+)').Match($str).Groups[1].Value
    

    Regex details:

    ehCookie=       Match the characters “ehCookie=” literally
    (               Match the regular expression below and capture its match into backreference number 1
       [^;]         Match any character that is NOT a “;”
          +         Between one and unlimited times, as many times as possible, giving back as needed (greedy)
    )
    .               Match any single character that is not a line break character
       *            Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
    JSESSIONID=     Match the characters “JSESSIONID=” literally
    (               Match the regular expression below and capture its match into backreference number 2
       [\dA-F]      Match a single character present in the list below
                    A single digit 0..9
                    A character in the range between “A” and “F”
          +         Between one and unlimited times, as many times as possible, giving back as needed (greedy)
    )
    

    In the second example, the (?i) makes the .Match case-insensitive, which is not needed when using the -match operator as used in the first example