115 lines
4.1 KiB
PowerShell
115 lines
4.1 KiB
PowerShell
function Get-AllCookiesFromWebRequestSession
|
|
{
|
|
<#
|
|
.SYNOPSIS
|
|
Get all cookies stored in the WebRequestSession variable from any Invoke-RestMethod and/or Invoke-WebRequest request
|
|
|
|
.DESCRIPTION
|
|
Get all cookies stored in the WebRequestSession variable from any Invoke-RestMethod and/or Invoke-WebRequest request
|
|
The WebRequestSession stores useful info and it has something that some my know as CookieJar or http.cookiejar.
|
|
|
|
.PARAMETER WebRequestSession
|
|
Specifies a variable where Invoke-RestMethod and/or Invoke-WebRequest saves values.
|
|
Must be a valid [Microsoft.PowerShell.Commands.WebRequestSession] object!
|
|
|
|
.EXAMPLE
|
|
PS C:\> $null = Invoke-WebRequest -UseBasicParsing -Uri 'http://jhochwald.com' -Method Get -SessionVariable WebSession -ErrorAction SilentlyContinue
|
|
PS C:\> $WebSession | Get-AllCookiesFromWebRequestSession
|
|
|
|
Get all cookies stored in the $WebSession variable from the request above.
|
|
This page doesn't use or set any cookies, but the (awesome) CloudFlare service does.
|
|
|
|
.EXAMPLE
|
|
$null = Invoke-RestMethod -UseBasicParsing -Uri 'https://jsonplaceholder.typicode.com/todos/1' -Method Get -SessionVariable RestSession -ErrorAction SilentlyContinue
|
|
$RestSession | Get-AllCookiesFromWebRequestSession
|
|
|
|
Get all cookies stored in the $RestSession variable from the request above.
|
|
Please do not abuse the free API service above!
|
|
|
|
.NOTES
|
|
I used something I had stolen from Chrissy LeMaire's TechNet Gallery entry a (very) long time ago.
|
|
But I needed something more generic, independent from the URL! This can become handy, to find any cookie from a 3rd party site or another host.
|
|
|
|
.LINK
|
|
https://docs.python.org/3/library/http.cookiejar.html
|
|
|
|
.LINK
|
|
https://en.wikipedia.org/wiki/HTTP_cookie
|
|
|
|
.LINK
|
|
https://gallery.technet.microsoft.com/scriptcenter/Getting-Cookies-using-3c373c7e
|
|
|
|
.LINK
|
|
Invoke-RestMethod
|
|
|
|
.LINK
|
|
Invoke-WebRequest
|
|
#>
|
|
|
|
[CmdletBinding(ConfirmImpact = 'None')]
|
|
param
|
|
(
|
|
[Parameter(Mandatory,
|
|
ValueFromPipeline,
|
|
ValueFromPipelineByPropertyName,
|
|
Position = 0,
|
|
HelpMessage = 'Specifies a variable where Invoke-RestMethod and/or Invoke-WebRequest saves values.')]
|
|
[ValidateNotNull()]
|
|
[Alias('Session', 'InputObject')]
|
|
[Microsoft.PowerShell.Commands.WebRequestSession]
|
|
$WebRequestSession
|
|
)
|
|
|
|
begin
|
|
{
|
|
# Do the housekeeping
|
|
$CookieInfoObject = $null
|
|
}
|
|
|
|
process
|
|
{
|
|
try
|
|
{
|
|
# I know, this look very crappy, but it just work fine!
|
|
[pscustomobject]$CookieInfoObject = ((($WebRequestSession).Cookies).GetType().InvokeMember('m_domainTable', [Reflection.BindingFlags]::NonPublic -bor [Reflection.BindingFlags]::GetField -bor [Reflection.BindingFlags]::Instance, $null, (($WebRequestSession).Cookies), @()))
|
|
}
|
|
catch
|
|
{
|
|
#region ErrorHandler
|
|
# get error record
|
|
[Management.Automation.ErrorRecord]$e = $_
|
|
|
|
# retrieve information about runtime error
|
|
$info = [PSCustomObject]@{
|
|
Exception = $e.Exception.Message
|
|
Reason = $e.CategoryInfo.Reason
|
|
Target = $e.CategoryInfo.TargetName
|
|
Script = $e.InvocationInfo.ScriptName
|
|
Line = $e.InvocationInfo.ScriptLineNumber
|
|
Column = $e.InvocationInfo.OffsetInLine
|
|
}
|
|
|
|
# output information. Post-process collected info, and log info (optional)
|
|
$info | Out-String | Write-Verbose
|
|
|
|
$paramWriteError = @{
|
|
Message = $e.Exception.Message
|
|
ErrorAction = 'Stop'
|
|
Exception = $e.Exception
|
|
TargetObject = $e.CategoryInfo.TargetName
|
|
}
|
|
Write-Error @paramWriteError
|
|
|
|
# Only here to catch a global ErrorAction overwrite
|
|
exit 1
|
|
#endregion ErrorHandler
|
|
}
|
|
}
|
|
|
|
end
|
|
{
|
|
# Dump the Cookies to the Console
|
|
((($CookieInfoObject).Values).Values)
|
|
}
|
|
}
|