Functions/NIOS/Store-NIOSCredentials.ps1

function Store-NIOSCredentials {
    <#
    .SYNOPSIS
        Stores NIOS Credentials to the local user/machine

    .DESCRIPTION
        This function will store NIOS Credentials for the current user on the local machine. If previous NIOS Credentials exist, they will be overwritten.

    .PARAMETER Credentials
        Credentials object for NIOS Username/Password

    .PARAMETER Persist
        Using the -Persist switch will save the NIOS Credentials across powershell sessions. Without using this switch, they will only be stored for the current powershell session.

    .Example
        Store-NIOSCredentials -Credentials ${CredentialObject} -Persist

    .FUNCTIONALITY
        BloxOneDDI
    
    .FUNCTIONALITY
        Authentication
    #>

    param(
      $Credentials,
      [switch]$Persist
    )
    if (!($Credentials)) {
        $Credentials = Get-Credential
    }
    $Username = $Credentials.GetNetworkCredential().UserName
    $Password = $Credentials.Password | ConvertFrom-SecureString
    $UPCombo = "$Username`:$Password"
    $Bytes = [System.Text.Encoding]::Unicode.GetBytes($UPCombo)
    $Base64 =[Convert]::ToBase64String($Bytes)

    if ($Persist) {
        $Platform = Detect-OS
        if ($Platform -eq "Windows") {
          [System.Environment]::SetEnvironmentVariable('NIOSCredentials',$Base64,[System.EnvironmentVariableTarget]::User)
          $ENV:NIOSCredentials = $Base64
          Write-Host "Credentials for $Username have been stored permenantly for $env:USERNAME on $env:COMPUTERNAME." -ForegroundColor Green
        } elseif ($Platform -eq "Mac" -or $Platform -eq "Unix") {
            [System.Environment]::SetEnvironmentVariable('NIOSCredentials',$Base64,[System.EnvironmentVariableTarget]::User)
            $ENV:NIOSCredentials = $Base64
            if (!(Test-Path ~/.zshenv)) {
              touch ~/.zshenv
            }
            sed -i '' -e '/NIOSCredentials/d' ~/.zshenv
            echo "export NIOSCredentials=$Base64" >> ~/.zshenv
            Write-Host "NIOS Credentials have been stored permenantly for $env:USER on $(scutil --get LocalHostName)." -ForegroundColor Green
        }
    } else {
        $ENV:NIOSCredentials = $Base64
        Write-Host "Credentials for $Username have been stored for this session." -ForegroundColor Green
        Write-Host "You can make these credentials persistent for this user on this machine by using the -persist parameter." -ForegroundColor Gray
    }
}