Using Powershell's Invoke-WebRequest to persist state between requests using SessionVariable

Recently, I've been testing ASP.NET MVC's Output Cache feature and wanted to test using different parameters such as VaryByCustom which would read a user's cookies and construct a cache key according to some value.

I ended up having to log in and out of Google Chrome, Firefox, Edge etc just to test this so I created a script to do so instead.

$loginUrl = "https://example.com/log-in"
$normalUrl = "https://example.com/logged-in-area"

$postParams = @{email='foo@bar.com';password='1234'}
iwr -Uri $url  -Method POST -Body $postParams -SessionVariable MySessionVariable
iwr $normalUrl -WebSession $MySessionVariable

# Optionally view what cookies got stored
$MySessionVariable.Cookies.GetCookies($url)

The magic lies in the MySessionVariable variable which is basically a Cookie object that gets passed in each invocation.