Public/New-ShortcutEncode.ps1

function New-ShortcutEncode
{
    <#
    .DESCRIPTION
        Create a new shortcut using an icon file encoded in base64

    .EXAMPLE
        New-ShortcutEncode -IconFolder "$ENV:ALLUSERSPROFILE\MyFolder\" -IconName "icon.ico" -ShortcutPath "$ENV:ALLUSERSPROFILE\Microsoft\Windows\Start Menu\Programs\MyShortcut.lnk" -TargetPath "https://myurl.com" -IconEncode $IconBase64

    .NOTES
        Created by: Jon Anderson
        Modified: 2023-07-10
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()]
        [String]$IconFolder,
        [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()]
        [String]$IconName,
        [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()]
        [String]$ShortcutPath,
        [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()]
        [String]$TargetPath,
        [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()]
        [String]$IconEncode
    )

    Write-LogEntry -Value "Creating a new shortcut file with the following parameters`n$($ShortcutPath)`n$($TargetPath)`n$($IconFolder)`n$($IconName)" -Severity 1
    $IconPath = $IconFolder + $IconName
    if(!(Test-Path -Path $IconFolder))
    {
        New-Item -Path $IconFolder -ItemType Directory -Force
    }
    [byte[]]$Bytes = [convert]::FromBase64String($IconEncode)
    [System.IO.File]::WriteAllBytes($IconPath,$Bytes)
    $Shell = New-Object -ComObject WScript.Shell
    $Shortcut = $Shell.CreateShortcut($ShortcutPath)
    $Shortcut.TargetPath = $TargetPath
    $Shortcut.IconLocation = $IconPath
    $Shortcut.Save()
}