Powershell油灰连接和自动化任务

问题描述 投票:0回答:4

我想使用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 batch-file putty
4个回答
0
投票

您不一定需要启动过程。

[当您尝试从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_OperatorsGet-Help "call operator",以获取更多有关呼叫操作员的帮助的主题。请参阅Get-Help Start-Process以获得帮助。


0
投票

尝试一下:

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

&$Path $Prm1 $Prm2 $Prm3

0
投票

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

PowerShell: Running Executables


0
投票

仅需'plink'已保存的会话名称'

© www.soinside.com 2019 - 2024. All rights reserved.