Public/Add-WebApplication.ps1

<#
 
.COPYRIGHT
Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
See https://github.com/microsoftgraph/powershell-intune-samples/blob/master/LICENSE for license information.
 
#>


Function Add-WebApplication() {
    
        <#
    .SYNOPSIS
    This function is used to add a Web application using the Graph API REST interface
    .DESCRIPTION
    The function connects to the Graph API Interface and adds a Web application
    .EXAMPLE
    Add-WebApplication -JSON $JSON -IconURL pathtourl
    Adds a Web application into Intune using an icon from a URL
    .NOTES
    NAME: Add-WebApplication
    #>

    
        [cmdletbinding()]
    
        param
        (
            $JSON,
            $IconURL
        )
    
        $graphApiVersion = "Beta"
        $App_resource = "deviceAppManagement/mobileApps"
    
        try {
    
            if (!$JSON) {
    
                write-host "No JSON was passed to the function, provide a JSON variable" -f Red
                break
    
            }
    
    
            if ($IconURL) {
    
                write-verbose "Icon specified: $IconURL"
    
                if (!(test-path "$IconURL")) {
    
                    write-host "Icon Path '$IconURL' doesn't exist..." -ForegroundColor Red
                    Write-Host "Please specify a valid path..." -ForegroundColor Red
                            
                    break
    
                }
    
                $iconResponse = Invoke-WebRequest "$iconUrl"
                $base64icon = [System.Convert]::ToBase64String($iconResponse.Content)
                $iconExt = ([System.IO.Path]::GetExtension("$iconURL")).replace(".", "")
                $iconType = "image/$iconExt"
    
                Write-Verbose "Updating JSON to add Icon Data"
    
                $U_JSON = ConvertFrom-Json $JSON
    
                $U_JSON.largeIcon.type = "$iconType"
                $U_JSON.largeIcon.value = "$base64icon"
    
                $JSON = ConvertTo-Json $U_JSON
    
                Write-Verbose $JSON
    
                Test-JSON -JSON $JSON
    
                $uri = "https://graph.microsoft.com/$graphApiVersion/$($App_resource)"
                Invoke-RestMethod -Uri $uri -Method Post -ContentType "application/json" -Body $JSON -Headers $authToken
    
            }
    
            else {
    
                Test-JSON -JSON $JSON
    
                $uri = "https://graph.microsoft.com/$graphApiVersion/$($App_resource)"
                Invoke-RestMethod -Uri $uri -Method Post -ContentType "application/json" -Body $JSON -Headers $authToken
    
            }
    
        }
    
        catch {
    
            $ex = $_.Exception
            $errorResponse = $ex.Response.GetResponseStream()
            $reader = New-Object System.IO.StreamReader($errorResponse)
            $reader.BaseStream.Position = 0
            $reader.DiscardBufferedData()
            $responseBody = $reader.ReadToEnd();
            Write-Host "Response content:`n$responseBody" -f Red
            Write-Error "Request to $Uri failed with HTTP Status $($ex.Response.StatusCode) $($ex.Response.StatusDescription)"
            
            break
    
        }
    
    }