src/override.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
function Out-Default {
  <#
  .ForwardHelpTargetName Out-Default
  .ForwardHelpCategory Function
  #>

  [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidGlobalVars', 'global:Last')]
  [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', 'Last')]
  [CmdletBinding(HelpUri='http://go.microsoft.com/fwlink/?LinkID=113362', RemotingCapability='None')]
  [OutputType([System.Diagnostics.Process])]
  Param(
    [Parameter(Position=0, ValueFromPipeline=$true)]
    [PSObject] $InputObject,
    [Switch] $Transcript
  )
  Begin {
    try {
      $OutBuffer = $null
      if ($PSBoundParameters.TryGetValue('OutBuffer', [Ref]$OutBuffer)) {
        $PSBoundParameters['OutBuffer'] = 1
      }
      $WrappedCommand = $ExecutionContext.InvokeCommand.GetCommand('Microsoft.PowerShell.Core\Out-Default', [System.Management.Automation.CommandTypes]::Cmdlet)
      $ScriptCommand = {& $WrappedCommand @PSBoundParameters }
      $SteppablePipeline = $ScriptCommand.GetSteppablePipeline()
      $SteppablePipeline.Begin($PSCmdlet)
    } catch {
      throw
    }
  }
  Process {
    try {
      $DoProcess = $true
      if ($_ -is [System.Management.Automation.ErrorRecord]) {
        if ($_.Exception -is [System.Management.Automation.CommandNotFoundException]) {
          $__Command = $_.Exception.CommandName
          if (Test-Path -Path $__Command -PathType Container) {
            Set-Location $__Command
            $DoProcess = $false
          } elseif ($__Command -match '^https?://|\.(com|org|net|edu|dev|gov|io)$') {
            [System.Diagnostics.Process]::Start($__Command)
            $DoProcess = $false
          }
        }
      }
      if ($DoProcess) {
        $Global:Last = $_;
        $SteppablePipeline.Process($_)
      }
    } catch {
      throw
    }
  }
  End {
    try {
      $SteppablePipeline.End()
    } catch {
      throw
    }
  }
}