Автодополнение для команд ssh, scp, и sftp в PowerShell
Этот код PowerShell регистрирует автодополнение для команд `ssh`, `scp`, и `sftp`. Он использует файл конфигурации SSH для получения списка хостов и предлагает их в качестве вариантов автодополнения при вводе этих команд.
Код
Register-ArgumentCompleter -CommandName ssh,scp,sftp -Native -ScriptBlock {
param($wordToComplete, $commandAst, $cursorPosition)
$sshConfigFile = "$env:USERPROFILE\.ssh\config"
if (Test-Path $sshConfigFile) {
Get-Content $sshConfigFile | Where-Object {$_ -match "^Host" -and $_.Split()[1] -like "$wordToComplete*"} | ForEach-Object {$_.Split()[1]} | Sort-Object -Unique | ForEach-Object {
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
}
} else {
return @()
}
}Установка
- Скопируйте код
- Откройте PowerShell и запустите команду
notepad $profile. - Вставьте код в открывшийся файл
- Перезапустите PowerShell
- Теперь, когда вы начинаете вводить команды `ssh`, `scp`, или `sftp`, PowerShell будет предлагать вам список доступных хостов из файла конфигурации SSH для автодополнения.
Как это работает
Когда вы начинаете вводить команду ssh, scp, или sftp в PowerShell, автодополнение вызывает функцию $s, которая использует файл конфигурации SSH для получения списка хостов, начинающихся с того, что вы уже ввели. Затем функция создает массив объектов `[System.Management.Automation.CompletionResult]` для каждого хоста и возвращает его.
Зарегистрировав эту функцию в качестве автодополнителя для команд `ssh`, `scp`, и `sftp` с помощью команды `Register-ArgumentCompleter`, PowerShell будет использовать ее для предложения вариантов автодополнения при вводе этих команд.
Описание файла конфигурации SSH
Файл конфигурации SSH находится в директории `$env:USERPROFILE\.ssh\config` и используется для определения параметров подключения к хостам. Каждый хост определяется с помощью блока, начинающегося со слова `Host`, за которым
Host example.com
Hostname 192.0.2.1
User johnВ этом примере `example.com` - это имя хоста, а `192.0.2.1` и `john` - параметры подключения.