Public/Invoke-SfAuthenticate.ps1

<#
    .SYNOPSIS
    Authenticate to Salesforce using the current org configuration

    .DESCRIPTION
    Authenticate to salesforce using the current org configuration

    .INPUTS
    None. You cannot pipe objects to Invoke-SfAuthenticate.

    .OUTPUTS
    Returns as PSCustomObject with the following members:
        access_token
        id
        instance_url
        issued_at
        signature
        token_type

    .EXAMPLE
    PS> $sfAcessToken = (Invoke-SfAuthenticate).access_token

    .LINK
    Set-FileConfig

    .NOTES
    Assumes config is initialized for org access.
#>

function Invoke-SfAuthenticate {
    $config = Get-Config
    $body = @{
        grant_type = "password"
        client_id = $config.SfOauth.GetNetworkCredential().username
        client_secret = $config.SfOauth.GetNetworkCredential().password
        username = $config.SfCredentials.GetNetworkCredential().username
        password = $config.SfCredentials.GetNetworkCredential().password + $config.SfSecurityToken
    }
    $loginUrl = "https://$(&{If($config.Sandbox){"test"} Else {"login"}}).salesforce.com/services/oauth2/token"
    Write-Debug ($Body | ConvertTo-Json)
    Invoke-RestMethod -Uri $loginUrl -Method POST -Body $body -TimeoutSec 30
}