Get Folder Path of the Current Script

Function Get-ScriptDirectory{
    $Invocation = (Get-Variable MyInvocation -Scope 1).Value;
    if($Invocation.PSScriptRoot){
        $Invocation.PSScriptRoot;
    }
    elseif($Invocation.MyCommand.Path){
        Split-Path $Invocation.MyCommand.Path
    }
    elseif($Invocation.InvocationName.LastIndexOf("\") -gt 0){
        $Invocation.InvocationName.Substring(0,$Invocation.InvocationName.LastIndexOf("\"));
    }
    else {
        Get-PSDrive | Where-Object{$_.Provider.Name -eq 'FileSystem'} | Foreach-Object {
            Join-Path -Path $_.Root -ChildPath $_.CurrentLocation
        }
    }
}
Details
Returns the path of the script being executed. If unavailable, it will return the path of the PowerShell console.

Example
PS C:\> Function Get-ScriptDirectory{
>>     $Invocation = (Get-Variable MyInvocation -Scope 1).Value;
>>     if($Invocation.PSScriptRoot){
>>         $Invocation.PSScriptRoot;
>>     }
>>     elseif($Invocation.MyCommand.Path){
>>         Split-Path $Invocation.MyCommand.Path
>>     }
>>     elseif($Invocation.InvocationName.LastIndexOf("\") -gt 0){
>>         $Invocation.InvocationName.Substring(0,$Invocation.InvocationName.LastIndexOf("\"));
>>     }
>>     else {
>>         Get-PSDrive | Where-Object{$_.Provider.Name -eq 'FileSystem'} | Foreach-Object {
>>             Join-Path -Path $_.Root -ChildPath $_.CurrentLocation
>>         }
>>     }
>> }
>> Get-ScriptDirectory

C:\Scripts