Конвейерная струна в Powershell - PullRequest
3 голосов
/ 12 января 2011

Я пытаюсь создать простую функцию PowerShell для использования команды ssh в стиле Linux.Например:

ssh username@url

Я использую plink для этого, и эту функцию я написал:

function ssh {
    param($usernameAndServer)

    $myArray = $usernameAndServer.Split("@")

    $myArray[0] | C:\plink.exe -ssh $myArray[1]
}

Если правильно введеноuser, $ myArray [0] - это имя пользователя, а $ myArray [1] - это URL.Таким образом, он подключается к URL-адресу, и когда вам предлагается ввести имя пользователя, имя пользователя передается по конвейеру.Все работает отлично, за исключением того, что конвейер продолжает вводить имя пользователя ($ myArray [0]), и оно вводится как пароль снова и снова.Пример:

PS C:\Users\Mike> ssh xxxxx@yyyyy
login as: xxxxx@yyyyy's password:
Access denied
xxxxx@yyyyy's password:
Access denied
xxxxx@yyyyy's password:
Access denied
xxxxx@yyyyy's password:
Access denied
xxxxx@yyyy's password:
Access denied
xxxxx@yyyyy's password:
FATAL ERROR: Server sent disconnect message
type 2 (protocol error):
"Too many authentication failures for xxxxx"

Если имя пользователя было заменено на xxxxx, а URL-адрес был заменен на yyyyy.

По сути, мне нужно выяснить, как остановить сценарий в конвейере вимя пользователя ($ myArray [0]) после его однократного ввода.

Есть идеи?Я искал решение по всему интернету и ничего не нашел.

1 Ответ

2 голосов
/ 12 января 2011

не позволяет вам указать пользователя и хост вместе в одном аргументе? то есть:

plink -ssh user @ host

если это так, ваша функция ssh может быть уменьшена до:

function ssh {
    param($usernameAndServer)

    C:\plink.exe -ssh $usernameAndServer
}
...