Private/Get-ServiceNowAuth.ps1
function Get-ServiceNowAuth { <# .SYNOPSIS .DESCRIPTION .INPUTS None .OUTPUTS Hashtable #> [OutputType([Hashtable])] [CmdletBinding()] Param ( [Parameter()] [PSCredential] $Credential, [Parameter()] [string] $ServiceNowURL, [Parameter()] [hashtable] $Connection, [Parameter()] [hashtable] $ServiceNowSession = $script:ServiceNowSession ) $hashOut = @{} # Get credential and ServiceNow REST URL if ( $ServiceNowSession.Count -gt 0 ) { $hashOut.Uri = $ServiceNowSession.BaseUri if ( $ServiceNowSession.AccessToken ) { $hashOut.Headers = @{ 'Authorization' = 'Bearer {0}' -f $ServiceNowSession.AccessToken } } else { $hashOut.Credential = $ServiceNowSession.Credential } } elseif ( $Credential -and $ServiceNowURL ) { Write-Warning -Message 'This authentication path, providing URL and credential directly, will be deprecated in a future release. Please use New-ServiceNowSession.' $hashOut.Uri = 'https://{0}/api/now/v1' -f $ServiceNowURL $hashOut.Credential = $Credential } elseif ( $Connection ) { $SecurePassword = ConvertTo-SecureString $Connection.Password -AsPlainText -Force $Credential = New-Object System.Management.Automation.PSCredential ($Connection.Username, $SecurePassword) $hashOut.Credential = $Credential $hashOut.Uri = 'https://{0}/api/now/v1' -f $Connection.ServiceNowUri } else { throw "Exception: You must do one of the following to authenticate: `n 1. Call the New-ServiceNowSession cmdlet `n 2. Pass in an Azure Automation connection object `n 3. Pass in an endpoint and credential" } $hashOut } |