Public/Get-specTVDeviceAlias.ps1

Function Get-specTVDeviceAlias {
    <#
    .SYNOPSIS
        Retrieves and creates a new computer name alias for a TeamViewer device based on its machine name.
 
    .DESCRIPTION
        The Get-specTVDeviceAlias function retrieves or creates a new computer name alias for a TeamViewer device by analysing
        its machine name. The function queries an Azure table for the devices serial number to gather information necessary for creating the alias.
 
    .PARAMETER MachineName
        Specifies the machine name for which the alias is to be retrieved or created. If not provided, the function uses the
        current machine's name (default: $env:COMPUTERNAME).
 
    .PARAMETER TableName
        Specifies the name of the Azure table where relevant data is stored.
 
    .PARAMETER StorageAccount
        Specifies the name of the Azure Storage Account containing the specified table.
 
    .PARAMETER SASToken
        Specifies the Shared Access Signature (SAS) token for authenticating access to the Azure Storage Account.
 
    .EXAMPLE
        Get-specTVDeviceAlias -MachineName "UKC-123456" -TableName "MyAzureTable" -StorageAccount "MyStorageAccount" -SASToken "MySASToken"
        Retrieves or creates a new alias for the specified TeamViewer device using the provided details.
 
    .EXAMPLE
        Get-specTVDeviceAlias
        Retrieves or creates a new alias for the current machine using default values for Azure table and storage account.
 
    .NOTES
        Author : owen.heaume
        Version : 1.0
 
    #>



    [cmdletbinding()]

    param (
        [parameter (mandatory = $false)]
        [string]$MachineName = $env:COMPUTERNAME,

        [parameter (mandatory = $true)]
        [string]$TableName,

        [parameter (mandatory = $true)]
        [string]$StorageAccount,

        [parameter (mandatory = $true)]
        [string]$SASToken
    )

    # Getting device alias

    # in the Azure table, the computer name is stored without the prefix eg instead of UKC-123456 it is stored as 123456 (the device Serial Number) in the table.
    # so we need to extract this as it's used as the lookup in Get-specEposAndStorename
    $DeviceSerial = (Get-WmiObject Win32_BIOS).SerialNumber

    $params = @{
        value          = $DeviceSerial
        key            = 'RowKey'
        Tablename      = $tablename
        storageaccount = $StorageAccount
        sastoken       = $SASToken
    }

    $tableresult = Get-SpecAzTableRowUsingSAS @params

    switch ($tableresult) {
        601 { Write-Host "An error occurred during the retrieval process" -Foregroundcolor DarkYellow; return 1 }
        602 { Write-Host "The remote server returned a 404 error (Table Not Found)" -Foregroundcolor DarkYellow; return 1 }
        603 { Write-Host "The remote server name could not be resolved (Storage Account Not Found)" -Foregroundcolor DarkYellow; return 1 }
        604 { Write-Host "An unspecified WebException occurred" -Foregroundcolor DarkYellow; return 1 }
        605 { Write-Host "Missing [value] parameter when requesting filtered data" -Foregroundcolor DarkYellow; return 1 }
        606 { Write-Host "Missing [key] parameter when requesting filtered data" -Foregroundcolor DarkYellow; return 1 }
    }

    # Check to see if the computername was actually present in the table
    if ([string]::IsNullOrEmpty($tableresult.rowkey)) {
        Write-host "'$deviceserial' was not found in table: '$tablename'" -ForegroundColor DarkYellow
        return 1
    }

    "$MachineName $($tableResult.storename) $($tableResult.epos)"

}