Public/OSDCloud/AzClipboard.ps1

function Get-AzClipboard {
    <#
    .SYNOPSIS
    Read a secret value from the Azure clipboard Key Vault.
 
    .DESCRIPTION
    Connects to Azure if needed, finds the first Key Vault tagged with AzClipboard, and returns
    the named secret as plain text.
 
    .PARAMETER Name
    The name of the Key Vault secret to read. The default secret name is Clipboard.
 
    .EXAMPLE
    Get-AzClipboard
    Returns the value stored in the default Clipboard secret.
 
    .EXAMPLE
    Get-AzClipboard -Name Clipboard
    Returns the value stored in the Clipboard secret explicitly.
 
    .OUTPUTS
    System.String
 
    .NOTES
    Author: David Segura - Recast Software
    2026-07-10 - Updated help to repo standard
 
    .LINK
    https://github.com/OSDeploy/OSD/tree/master/docs
 
    .LINK
    https://github.com/OSDeploy/OSD/blob/master/docs/Get-AzClipboard.md
    #>

    [CmdletBinding()]
    param (
        [Parameter(Position = 0)]
        [ValidateNotNull()]
        [System.String]
        # Specifies the name of the secret to get
        $Name = 'Clipboard'
    )

    $GetAzKeyVaultSecret = $null
    #=================================================
    # FromAzKeyVaultSecret
    #=================================================
    $Module = Import-Module Az.KeyVault -PassThru -ErrorAction Ignore
    if (-not $Module) {
        Install-Module Az.KeyVault -Force
    }

    $Module = Import-Module Az.Accounts -PassThru -ErrorAction Ignore
    if (-not $Module) {
        Install-Module Az.Accounts -Force
    }

    if (-not (Get-AzContext -ErrorAction Ignore)) {
        if ($env:SystemDrive -eq 'X:') {
            $null = Connect-AzAccount -DeviceCode
        }
        else {
            $null = Connect-AzAccount
        }
    }

    if (Get-AzContext -ErrorAction Ignore) {

        $Global:AzClipBoardKeyVault = Get-AzKeyVault -ErrorAction Ignore -WarningAction Ignore | Sort-Object Name | Where-Object {$_.Tags.ContainsKey('AzClipboard')} | Select-Object -First 1

        if ($Global:AzClipBoardKeyVault) {
            $Result = $Global:AzClipBoardKeyVault | Get-AzKeyVaultSecret -Name $Name -AsPlainText -ErrorAction Ignore
            if ($Result) {
                Return $Result
            }
        }
    }
    else {
        Write-Warning "Authenticate to Azure using Connect-AzAccount first"
        Break
    }
}
function Set-AzClipboard {
    <#
    .SYNOPSIS
    Write the current clipboard text to the Azure clipboard Key Vault.
 
    .DESCRIPTION
    Connects to Azure if needed, finds the first Key Vault tagged with AzClipboard, and stores
    the current clipboard text in the named secret as plain text.
 
    .PARAMETER Name
    The name of the Key Vault secret to write. The default secret name is Clipboard.
 
    .EXAMPLE
    Set-AzClipboard
    Copies the current clipboard text into the default Clipboard secret.
 
    .EXAMPLE
    Set-AzClipboard -Name Clipboard
    Copies the current clipboard text into the Clipboard secret explicitly.
 
    .NOTES
    Author: David Segura - Recast Software
    2026-07-10 - Updated help to repo standard
 
    .LINK
    https://github.com/OSDeploy/OSD/tree/master/docs
 
    .LINK
    https://github.com/OSDeploy/OSD/blob/master/docs/Set-AzClipboard.md
    #>

    [CmdletBinding()]
    param (
        [Parameter(Position = 0)]
        # Specifies the name of the Key Vault Secret to set
        [System.String]
        $Name = 'Clipboard'
    )
    $RawString = $null
    #=================================================
    # Import Az Modules
    #=================================================
    $Module = Import-Module Az.Accounts -PassThru -ErrorAction Ignore
    if (-not $Module) {
        Install-Module Az.Accounts -Force
    }

    $Module = Import-Module Az.KeyVault -PassThru -ErrorAction Ignore
    if (-not $Module) {
        Install-Module Az.KeyVault -Force
    }

    if (-not (Get-AzContext -ErrorAction Ignore)) {
        if ($env:SystemDrive -eq 'X:') {
            $null = Connect-AzAccount -DeviceCode
        }
        else {
            $null = Connect-AzAccount
        }
    }

    if (Get-AzContext -ErrorAction Ignore) {

        $Global:AzClipBoardKeyVault = Get-AzKeyVault -ErrorAction Ignore -WarningAction Ignore | Sort-Object Name | Where-Object {$_.Tags.ContainsKey('AzClipboard')} | Select-Object -First 1

        if ($Global:AzClipBoardKeyVault) {
            if (Get-Clipboard -ErrorAction Ignore) {
                try {
                    $RawString = Get-Clipboard -Format Text -Raw
                }
                catch {
                    Write-Warning $_
                }
            }
            if ($RawString) {
                try {
                    $SecretValue = ConvertTo-SecureString -String $RawString -AsPlainText -Force
                    Set-AzKeyVaultSecret -VaultName $Global:AzClipBoardKeyVault.VaultName -Name $Name -SecretValue $SecretValue -ContentType 'text/plain'
                }
                catch {
                    Write-Warning $_
                }
            }
        }
    }
}