我希望使用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完成这一任务?
发布于 2015-06-29 14:59:14
你不一定需要启动过程。
当您尝试从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
参数,因为默认情况下,启动进程不需要等待就会继续到下一行,因为它实际上产生了一个单独的进程。-Wait
迫使Powershell,嗯,等等,这是人们通常希望在一个非交互式脚本。
有关呼叫运算符的帮助,请参阅Get-Help about_Operators
或Get-Help "call operator"
获得更多主题。有关这方面的帮助,请参见Get-Help Start-Process
。
发布于 2020-06-01 21:36:09
你只需要plink
plink 'Saved Session Name'
发布于 2015-06-29 17:33:52
添加以下Technet链接,其中包含在PowerShell中运行可执行文件的各种方式。
https://stackoverflow.com/questions/31118062
复制相似问题