Public/Auth/Set-RMMTokenClipboard.ps1

<#
    Copyright (c) 2025-2026 Robert Faddes
    SPDX-License-Identifier: MPL-2.0
#>

function Set-RMMTokenClipboard {
    <#
    .SYNOPSIS
        Copies the current Datto RMM API access token to the clipboard.
 
    .DESCRIPTION
        Copies the current session access token to the system clipboard.
        No token value is written to the console, terminal output, or transcript.
 
        WARNING: The access token is sensitive. Clipboard managers, cloud clipboard
        synchronisation (Windows 11 Cloud Clipboard), and other applications running in
        the same user session may access clipboard content. Clear the clipboard after use.
 
        If Windows Cloud Clipboard synchronisation is enabled, the token may be transmitted
        to Microsoft servers. Disable Cloud Clipboard before using this command in
        sensitive environments.
 
    .NOTES
        This command requires confirmation and has ConfirmImpact set to High.
        Use -Force to suppress the confirmation prompt in automation scripts.
 
    .EXAMPLE
        Set-RMMTokenClipboard
        Copies the current API access token to the clipboard after confirmation.
 
    .EXAMPLE
        Set-RMMTokenClipboard -Force
        Copies the token to the clipboard without prompting for confirmation.
 
    .LINK
        https://github.com/TheShadowTek/DattoRMM.Core/blob/main/docs/commands/Auth/Set-RMMTokenClipboard.md
 
    .LINK
        Connect-DattoRMM
 
    .LINK
        Disconnect-DattoRMM
 
    .LINK
        about_DattoRMM.CoreAuthentication
    #>

    [CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact='High')]
    param(
        [switch]
        $Force
    )

    if ($null -eq $Script:RMMAuth) {

        throw "No authentication token found. Please connect first."

    }

    Write-Warning "The access token is sensitive. Clear the clipboard after use. Cloud Clipboard synchronisation may expose this value outside the current session."

    if ($Force -or $PSCmdlet.ShouldProcess("clipboard", "Copy API access token")) {

        Set-Clipboard -Value $Script:RMMAuth.AccessToken
        Write-Host "Access token copied to clipboard."

    }
}

# SIG # Begin signature block
# MIIF+wYJKoZIhvcNAQcCoIIF7DCCBegCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAGV0PZs1V91z/a
# 7hYl7s0ExWAh2mNXpmqqVi+M1JiiHaCCA04wggNKMIICMqADAgECAhB464iXHfI6
# gksEkDDTyrNsMA0GCSqGSIb3DQEBCwUAMD0xFjAUBgNVBAoMDVJvYmVydCBGYWRk
# ZXMxIzAhBgNVBAMMGkRhdHRvUk1NLkNvcmUgQ29kZSBTaWduaW5nMB4XDTI2MDMz
# MTAwMTMzMFoXDTI4MDMzMTAwMjMzMFowPTEWMBQGA1UECgwNUm9iZXJ0IEZhZGRl
# czEjMCEGA1UEAwwaRGF0dG9STU0uQ29yZSBDb2RlIFNpZ25pbmcwggEiMA0GCSqG
# SIb3DQEBAQUAA4IBDwAwggEKAoIBAQChn1EpMYQgl1RgWzQj2+wp2mvdfb3UsaBS
# nxEVGoQ0gj96tJ2MHAF7zsITdUjwaflKS1vE6wAlOg5EI1V79tJCMxzM0bFpOdR1
# L5F2HE/ovIAKNkHxFUF5qWU8vVeAsOViFQ4yhHpzLen0WLF6vhmc9eH23dLQy5fy
# tELZQEc2WbQFa4HMAitP/P9kHAu6CUx5s4woLIOyyR06jkr3l9vk0sxcbCxx7+dF
# RrsSLyPYPH+bUAB8+a0hs+6qCeteBuUfLvGzpMhpzKAsY82WZ3Rd9X38i32dYj+y
# dYx+nx+UEMDLjDJrZgnVa8as4RojqVLcEns5yb/XTjLxDc58VatdAgMBAAGjRjBE
# MA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQU
# H+B0vf97dYXqdUX1YMcWhFsY6fcwDQYJKoZIhvcNAQELBQADggEBAJmD4EEGNmcD
# 1JtFoRGxuLJaTHxDwBsjqcRQRE1VPZNGaiwIm8oSQdHVjQg0oIyK7SEb02cs6n6Y
# NZbwf7B7WZJ4aKYbcoLug1k1x9SoqwBmfElECeJTKXf6dkRRNmrAodpGCixR4wMH
# KXqwqP5F+5j7bdnQPiIVXuMesxc4tktz362ysph1bqKjDQSCBpwi0glEIH7bv5Ms
# Ey9Gl3fe+vYC5W06d2LYVebEfm9+7766hsOgpdDVgdtnN+e6uwIJjG/6PTG6TMDP
# y+pr5K6LyUVYJYcWWUTZRBqqwBHiLGekPbxrjEVfxUY32Pq4QfLzUH5hhUCAk4HN
# XpF9pOzFLMUxggIDMIIB/wIBATBRMD0xFjAUBgNVBAoMDVJvYmVydCBGYWRkZXMx
# IzAhBgNVBAMMGkRhdHRvUk1NLkNvcmUgQ29kZSBTaWduaW5nAhB464iXHfI6gksE
# kDDTyrNsMA0GCWCGSAFlAwQCAQUAoIGEMBgGCisGAQQBgjcCAQwxCjAIoAKAAKEC
# gAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwG
# CisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEICPhYY6HWCyt+izig4FoulCAWS5b
# kdWxV9FrvbrezC4YMA0GCSqGSIb3DQEBAQUABIIBABjIywEiDX9fYBD9SyZFnBZC
# /YjlIfNIc6Z0pKfGMnSMN+5NwBdOyzKONbAqCHUiaYsDwn30X6YmgXcEfB7kV8J8
# 4rEiRHSvRLBZpC6zVNvL4E3rzNqSurlOEKK9AFGLRghEe3t9G+WXEGItiEEKeVC7
# Xn8+T+MsfV2FfMaCHCyGBf0QjLhUXNDeMDqJD8hoZSSSgYDaKyvAWFxT22vCT2yZ
# MxAEF55Pd5bZ/vVP3SzYtOpchEm9/4NafxF5P7snOW+4zPolahwVH8fu6JHoiybX
# ABNEu3Ph3fjLTHd8KXI9dQvhobAiaWUAC/wM4vxriUhl47kEjT6gv79V4LPo62g=
# SIG # End signature block