Powershell Putty连接和自动化任务

时间:2015-06-29 14:18:03

标签: powershell batch-file putty

我想使用PowerShell连接到PuTTY“保存的会话”,然后指定包含一些批处理命令的文件。使用CMD,这看起来像

d:\putty\psftp 'Saved Session Name' -b d:\location.txt.

我认为PS等价物应该看起来像

Start-Process d:\putty\psftp.exe 'Saved Session Name' 
(and then a call to pass a 'get' script) i.e. cd Outgoing get <date>.txt 

但是,我收到以下错误:

a positional parameter cannot be found that accepts the argument

如何使用PowerShell完成此操作?

4 个答案:

答案 0 :(得分:2)

您需要的只是plink

plink 'Saved Session Name'

答案 1 :(得分:0)

您不一定需要Start-Process。

当您尝试从Powershell运行d:\putty\psftp.exe 'Saved Session Name' -b d:\location.txt时会发生什么?我做的第一件事就是尝试它,就像我从命令行运行它一样。

最大的问题是如果路径名中有空格。您可能需要使用引号和调用运算符(&符号):&"d:\putty\psftp.exe" 'Saved Session Name' -b "d:\location.txt"

如果您确实需要使用Start-Process,则可以执行以下操作:

Start-Process -FilePath "d:\putty\psftp.exe" `
    -ArgumentList "'Saved Session Name' -b d:\location.txt" -Wait

或者像这样:

Start-Process -FilePath "d:\putty\psftp.exe" `
    -ArgumentList 'Saved Session Name', '-b', "d:\location.txt" -Wait

请注意,第一个中的参数列表是包含其中每个参数的单个字符串,而在第二个中,它是一个字符串数组,每个参数都有一个字符串。一切都需要与他们在命令行上的顺序相同,并且它有点不稳定并不罕见。通常一种方法或另一种方法效果更好,但这取决于您调用的应用程序。通常在路径名中加上引号和空格,因为您根据您正在调用的程序(注意到主题?)进行多级转义。

我在上面的代码中添加了-Wait参数,因为默认情况下,Start-Process继续到下一行而不等待,因为它实际上产生了一个单独的进程。 -Wait迫使Powershell等待,这是人们在非交互式脚本中通常想要的。

有关呼叫运营商的帮助,请参阅Get-Help about_OperatorsGet-Help "call operator"。请参阅Get-Help Start-Process以获取相关帮助。

答案 2 :(得分:0)

添加以下Technet Wiki链接,其中包含在PowerShell中运行可执行文件的各种方法。

PowerShell: Running Executables

答案 3 :(得分:-1)

试试这个:

$Path = "d:\putty\psftp.exe" 
$Prm1 = 'Saved Session Name'
$Prm2 = "-b"
$Prm3 = "d:\location.txt"

&$Path $Prm1 $Prm2 $Prm3