Private/Invoke-CustomWebRequest.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
function Invoke-CustomWebRequest {
    Param (
        [Parameter(ParameterSetName = 'InitRequest', Mandatory)]
        [Parameter(ParameterSetName = 'ApiRequest', Mandatory)]
        [Parameter(ParameterSetName = 'FileDownload', Mandatory)]
        [uri]$Uri,
        [Parameter(ParameterSetName = 'InitRequest')]
        [Parameter(ParameterSetName = 'ApiRequest')]
        [Parameter(ParameterSetName = 'FileDownload')]
        [string]$Cookie = $ModuleWideCookie,
        [Parameter(ParameterSetName = 'InitRequest')]
        [Parameter(ParameterSetName = 'ApiRequest')]
        [Parameter(ParameterSetName = 'FileDownload')]
        [string]$UA = $ModuleWideUA,
        [Parameter(ParameterSetName = 'FileDownload', Mandatory)]
        [string]$OutFile,
        [Parameter(ParameterSetName = 'ApiRequest', Mandatory)]
        [string]$Method,
        [Parameter(ParameterSetName = 'InitRequest', Mandatory)]
        [Parameter(ParameterSetName = 'ApiRequest', Mandatory)]
        [System.Collections.Hashtable]$Headers,
        [Parameter(ParameterSetName = 'ApiRequest', Mandatory)]
        [string]$ContentType,
        [Parameter(ParameterSetName = 'ApiRequest', Mandatory)]
        [object]$Body
    )

    $WebSession = New-Object -TypeName 'Microsoft.PowerShell.Commands.WebRequestSession'
    $WebSession.UserAgent = $UA
    $WebSession.Cookies.Add((New-Object -TypeName 'System.Net.Cookie' -ArgumentList ('d', $Cookie, '/', '.slack.com')))

    $InvokeWebRequestParameters = @{
        UseBasicParsing = $true
        Uri             = $Uri
        WebSession      = $WebSession
    }

    if ($OutFile) {
        $InvokeWebRequestParameters.Add('OutFile', $OutFile)
    }
    if ($Method) {
        $InvokeWebRequestParameters.Add('Method', $Method)
    }
    if ($Headers) {
        $InvokeWebRequestParameters.Add('Headers', $Headers)
    }
    if ($ContentType) {
        $InvokeWebRequestParameters.Add('ContentType', $ContentType)
    }
    if ($Body) {
        $InvokeWebRequestParameters.Add('Body', $Body)
    }

    $CurrentProgressPreference = $ProgressPreference
    $ProgressPreference = 'SilentlyContinue'
    Invoke-WebRequest @InvokeWebRequestParameters
    $ProgressPreference = $CurrentProgressPreference
}