Handlers/OpenSSH.ps1
if ("OpenSSH for Windows" -eq (Get-Command ssh -ErrorAction SilentlyContinue).FileVersionInfo.ProductName) { ## SSH & { Register-TabExpansion "ssh.exe" -Type "Command" { param($Context, [ref]$TabExpansionHasOutput) $Argument = $Context.Argument switch -exact ($Context.Parameter) { 'B' { $TabExpansionHasOutput.Value = $true Get-TabExpansion "$Argument*" Computer | New-TabItem -Value {$_.Text} -Text {$_.Text} -ResultType ParameterValue } 'J' { $TabExpansionHasOutput.Value = $true Get-TabExpansion "$Argument*" Computer | New-TabItem -Value {$_.Text} -Text {$_.Text} -ResultType ParameterValue } 'L' { ## TODO: This is quick and dirty, needs to also support sockets $TabExpansionHasOutput.Value = $true Get-TabExpansion "$Argument*" Computer | New-TabItem -Value {$_.Text} -Text {$_.Text} -ResultType ParameterValue } 'O' { $TabExpansionHasOutput.Value = $true $Commands = "check","forward","cancel","exit","stop" $Commands | Where-Object {$_ -like "$Argument*"} | New-TabItem -Value {$_.Text} -Text {$_.Text} -ResultType ParameterValue } 'o' { ## TODO: Options } 'R' { ## TODO: This is quick and dirty, needs to also support sockets $TabExpansionHasOutput.Value = $true Get-TabExpansion "$Argument*" Computer | New-TabItem -Value {$_.Text} -Text {$_.Text} -ResultType ParameterValue } 'Destination' { $TabExpansionHasOutput.Value = $true $User = "" if ($Argument -match '@') { $User,$Argument = $Argument -split '@' $User += '@' } Get-TabExpansion "$Argument*" Computer | New-TabItem -Value {$User + $_.Text} -Text {$_.Text} -ResultType ParameterValue } } }.GetNewClosure() Function sshexeparameters { param( [Parameter(Position = 0)] [String]$Destination ) ## TODO: Need to identify switch parameters } $SSHCommandInfo = Get-Command "sshexeparameters" Register-TabExpansion "ssh.exe" -Type "CommandInfo" { param($Context) $SSHCommandInfo }.GetNewClosure() Register-TabExpansion "ssh.exe" -Type "ParameterName" { param($Context, $Parameter) $Parameters = @( "-4", "-6", "-A", "-a", "-B", "-b", "-C", "-c", "-D", "-E", "-e", "-F", "-f", "-G", "-g", "-I", "-i", "-J", "-K", "-k", "-L", "-l", "-M", "-m", "-N", "-n", "-O", "-o", "-p", "-Q", "-q", "-R", "-S", "-s", "-T", "-t", "-V", "-v", "-W", "-w", "-X", "-x", "-Y", "-y" ) $Parameters | Where-Object {$_ -like "$Parameter*"} | New-TabItem -Value {$_} -Text {$_} -ResultType ParameterName }.GetNewClosure() Function scpexeparameters { param( [Parameter(Position = 0)] [String]$Source , [Parameter(Position = 1)] [String]$Destination ) ## TODO: Need to identify switch parameters } $SCPCommandInfo = Get-Command "scpexeparameters" Register-TabExpansion "scp.exe" -Type "CommandInfo" { param($Context) $SCPCommandInfo }.GetNewClosure() Register-TabExpansion "scp.exe" -Type "ParameterName" { param($Context, $Parameter) $Parameters = @( "-3", "-4", "-6", "-B", "-C", "-c", "-F", "-i", "-l", "-o", "-P", "-p", "-q", "-r", "-S", "-v" ) $Parameters | Where-Object {$_ -like "$Parameter*"} | New-TabItem -Value {$_} -Text {$_} -ResultType ParameterName }.GetNewClosure() } } |