public/Get-TwitterOAuthSettings.ps1

function Get-TwitterOAuthSettings {

    [CmdletBinding()]
    Param($Resource, $AccessToken, [switch]$Quiet)

    If ($Resource) {

        # Get the next available OAuth with available resources
        $RateLimitStatus =  $Script:OAuthCollection.RateLimitStatus |
                            Where-Object { $_.resource -eq "$Resource" } |
                            Sort-Object @{expression="remaining";Descending=$true}, @{expression="reset";Ascending=$true} |
                            Select-Object -First 1 | 
                            ForEach-Object { $_.remaining += -1;  Return $_ }
        
        Write-Verbose "resource: $($RateLimitStatus.resource), limit: $($RateLimitStatus.limit), remaining: $($RateLimitStatus.remaining), reset: $($RateLimitStatus.reset)"

        $AccessToken = $RateLimitStatus.AccessToken

        If ($RateLimitStatus.remaining -lt 0) {

            # Refresh the RateLimitStatus so we throttle an accurate value
            $OAuthSettings = $Script:OAuthCollection.Where({$_.AccessToken -eq $AccessToken}) | Select-Object -First 1
            $OAuthSettings = Set-TwitterOAuthSettings -ApiKey $OAuthSettings.ApiKey -ApiSecret $OAuthSettings.ApiSecret -AccessToken $OAuthSettings.AccessToken -AccessTokenSecret $OAuthSettings.AccessTokenSecret -PassThru -Force

            $RateLimitStatus  = $OAuthSettings.RateLimitStatus | Where-Object { $_.resource -eq "$Resource" } | 
                                ForEach-Object { $_.remaining += -1;  Return $_ }

            If ($RateLimitStatus.remaining -lt 0) {

                # Throttle... you're going way too fast cowboy!
                $SleepSeconds = $RateLimitStatus.reset - (Get-Eposh).TotalSeconds + 1
                Write-Warning "Throttling for ${SleepSeconds} seconds."
                Start-Sleep -Seconds $SleepSeconds 

            }

        }


    }


    If ($AccessToken) {
        $OAuthSettings = $Script:OAuthCollection.Where({$_.AccessToken -eq $AccessToken}) | Select-Object -First 1
    } Else {
        $OAuthSettings = $Script:OAuthCollection | Select-Object -First 1
    }


    If ($OAuthSettings) {
        Write-Verbose "Using AccessToken '$($OAuthSettings.AccessToken)'"
        $OAuthSettings = @{
            ApiKey = $OAuthSettings.ApiKey
            ApiSecret = $OAuthSettings.ApiSecret
            AccessToken = $OAuthSettings.AccessToken
            AccessTokenSecret = $OAuthSettings.AccessTokenSecret
        }
        Return $OAuthSettings
    }

    If ($Quiet.IsPresent -eq $false) {
        Throw "No OAuthSettings was found. Use 'Set-TwitterOAuthSettings' to set PSTwitterAPI ApiKey & Token."
    }

}