completions/scp.ps1

<#
 # scp completion
 #>

Import-Module NativeCommandCompleter.psm -ErrorAction SilentlyContinue

$msg = data { ConvertFrom-StringData @'
    scp = OpenSSH secure file copy
    copyBetweenTwoHost = Copies between two remote hosts are transferred through the local host
    ipv4 = Forces scp to use IPv4 addresses only
    ipv6 = Forces scp to use IPv6 addresses only
    forwardAgent = Allows forwarding of ssh-agent to the remote system
    batchMode = Prevents asking for passwords and passphrases
    cipher = Selects the cipher to use for encrypting the data transfer
    compression = Enables compression
    directConnect = Connect directly to a local SFTP server
    config = Specifies an alternative per-user configuration file
    identityFile = Selects the file from which the identity for public key authentication is read
    jumpHost = Connect to the target host by first making an scp connection to the jump host
    limit = Limits the used bandwidth, specified in Kbit/s
    useSCP = Use original SCP protocol instead of SFTP
    sshOption = Can be used to pass options to ssh
    port = Specifies the port to connect to on the remote host
    preserve = Preserves modification times, access times, and modes
    quiet = Quiet mode: disables the progress meter
    recursive = Recursively copy entire directories
    program = Name of program to use for the encrypted connection
    noStrictChecking = Disable strict filename checking
    source_address = Use the specified address as the source address
    verbose = Verbose mode
    sftpOption = Specify an option that controls aspects of SFTP protocol behaviour.
'@
 }
Import-LocalizedData -BindingVariable localizedMessages -ErrorAction SilentlyContinue;
foreach ($key in $localizedMessages.Keys) { $msg[$key] = $localizedMessages[$key] }

Register-NativeCompleter -Name scp -Description $msg.scp -Parameters @(
    New-ParamCompleter -ShortName '3' -Description $msg.copyBetweenTwoHost
    New-ParamCompleter -ShortName '4' -Description $msg.ipv4
    New-ParamCompleter -ShortName '6' -Description $msg.ipv6
    New-ParamCompleter -ShortName A -Description $msg.forwardAgent
    New-ParamCompleter -ShortName B -Description $msg.batchMode
    New-ParamCompleter -ShortName C -Description $msg.compression
    New-ParamCompleter -ShortName c -Description $msg.cipher -Type Required -VariableName 'cipher'
    New-ParamCompleter -ShortName D -Description $msg.directConnect -Type Required -VariableName 'sftp_server_path'
    New-ParamCompleter -ShortName F -Description $msg.config -Type File -VariableName 'ssh_config'
    New-ParamCompleter -ShortName i -Description $msg.identityFile -Type File -VariableName 'identity_file'
    New-ParamCompleter -ShortName J -Description $msg.jumpHost -Type Required -VariableName 'destination'
    New-ParamCompleter -ShortName l -Description $msg.limit -Type Required -VariableName 'limit'
    New-ParamCompleter -ShortName O -Description $msg.useSCP
    New-ParamCompleter -ShortName o -Description $msg.sshOption -Type Required -VariableName 'ssh_option'
    New-ParamCompleter -ShortName P -Description $msg.port -Type Required -VariableName 'port'
    New-ParamCompleter -ShortName p -Description $msg.preserve
    New-ParamCompleter -ShortName q -Description $msg.quiet
    New-ParamCompleter -ShortName r -Description $msg.recursive
    New-ParamCompleter -ShortName S -Description $msg.program -Type Required -VariableName 'program'
    New-ParamCompleter -ShortName T -Description $msg.noStrictChecking
    New-ParamCompleter -ShortName v -Description $msg.verbose
    New-ParamCompleter -ShortName X -Description $msg.sftpOption -Type Required -VariableName 'sftp_option'
)