我想使用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完成此操作?
您不一定需要启动过程。
[当您尝试从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 -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
以获得帮助。
尝试一下:
$Path = "d:\putty\psftp.exe"
$Prm1 = 'Saved Session Name'
$Prm2 = "-b"
$Prm3 = "d:\location.txt"
&$Path $Prm1 $Prm2 $Prm3
添加下面的Technet Wiki链接,其中包含在PowerShell中运行可执行文件的各种方法。
仅需'plink'已保存的会话名称'