我想使用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完成此操作?
答案 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_Operators
或Get-Help "call operator"
。请参阅Get-Help Start-Process
以获取相关帮助。
答案 2 :(得分:0)
添加以下Technet Wiki链接,其中包含在PowerShell中运行可执行文件的各种方法。
答案 3 :(得分:-1)
试试这个:
$Path = "d:\putty\psftp.exe"
$Prm1 = 'Saved Session Name'
$Prm2 = "-b"
$Prm3 = "d:\location.txt"
&$Path $Prm1 $Prm2 $Prm3