Public-manual/New-Session.ps1

Function New-Session {
<#
.SYNOPSIS
Get the active Cumulocity Session

.EXAMPLE
Get-Session

Get the current Cumulocity session

.OUTPUTS
None
#>

    [CmdletBinding()]
    Param(
        # Name of the Cumulocity session
        [Parameter(Mandatory = $true)]
        [string]
        $Name,

        # Host the type of this alarm, e.g. 'com_cumulocity_events_TamperEvent'. (required)
        [Parameter(Mandatory = $true)]
        [string]
        $Host,

        # Tenant the type of this alarm, e.g. 'com_cumulocity_events_TamperEvent'. (required)
        [Parameter(Mandatory = $true)]
        [string]
        $Tenant,

        # Credential
        [Parameter(Mandatory = $false, ParameterSetName = 'manual')]
        [ValidateNotNull()]
        [System.Management.Automation.PSCredential]
        [System.Management.Automation.Credential()]
        $Credential = [System.Management.Automation.PSCredential]::Empty,

        # Description
        [Parameter(Mandatory = $false)]
        [string]
        $Description
    )

    $Binary = Get-CumulocityBinary

    if (!$Credential -or ($Credential -eq [System.Management.Automation.PSCredential]::Empty)) {
        $Credential = Get-Credential -Message "Enter the API credentials for the $Tenant C8Y Tenant (leave-out the the tenant prefix)" -ErrorAction SilentlyContinue
    }

    if (!$Credential.UserName -or
        !$Credential.GetNetworkCredential().Password) {
        Write-Warning "Credentials are required to create a Cumulocity session"
        return
    }

    $args = New-object System.Collections.ArrayList

    $null = $args.AddRange(@("sessions", "create"))

    if ($Name) {
        $null = $args.AddRange(@("--name", $Name))
    }
    if ($Host) {
        $null = $args.AddRange(@("--host", $Host))
    }
    if ($Tenant) {
        $null = $args.AddRange(@("--tenant", $Tenant))
    }
    if ($Credential.GetNetworkCredential().Username) {
        $null = $args.AddRange(@("--username", $Credential.GetNetworkCredential().Username))
    }
    if ($Credential.GetNetworkCredential().Password) {
        $null = $args.AddRange(@("--password", $Credential.GetNetworkCredential().Password))
    }
    if ($Description) {
        $null = $args.AddRange(@("--description", $Description))
    }

    $Path = & $Binary $args

    Set-Session -File $Path
}