简体   繁体   中英

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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM