在Powershell中管道化字符串

时间:2011-01-12 03:48:16

标签: windows scripting powershell ssh pipeline

我正在尝试创建一个简单的PowerShell函数来使用Linux风格的ssh命令。如:

ssh username@url

我正在使用plink来做这个,这是我写的函数:

function ssh {
    param($usernameAndServer)

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

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

如果用户输入正确,$ 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替换,并且该网址已被yyyyy取代。

基本上,我需要找到如何在输入一次后停止脚本在用户名($ myArray [0])中的管道。

有什么想法吗?我已经在互联网上寻找解决方案并且没有找到任何东西。

1 个答案:

答案 0 :(得分:2)

是不是plink允许您在一个参数中一起指定用户和主机?那就是:

plink -ssh user @ host

如果是这样,你的ssh功能可以缩小为:

function ssh {
    param($usernameAndServer)

    C:\plink.exe -ssh $usernameAndServer
}