Powershell Putty 连接和自动化任务
Powershell Putty Connection and Automating Tasks
我想使用 PowerShell 连接到 PuTTY "saved session",然后指定一个包含一些批处理命令的文件。使用 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 完成此操作?
您不一定需要 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
。
试试这个:
$Path = "d:\putty\psftp.exe"
$Prm1 = 'Saved Session Name'
$Prm2 = "-b"
$Prm3 = "d:\location.txt"
&$Path $Prm1 $Prm2 $Prm3
添加以下 Technet Wiki link,其中包含在 PowerShell 中 运行 可执行文件的各种方法。
你只需要 plink
:
plink 'Saved Session Name'
我想使用 PowerShell 连接到 PuTTY "saved session",然后指定一个包含一些批处理命令的文件。使用 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 完成此操作?
您不一定需要 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
。
试试这个:
$Path = "d:\putty\psftp.exe"
$Prm1 = 'Saved Session Name'
$Prm2 = "-b"
$Prm3 = "d:\location.txt"
&$Path $Prm1 $Prm2 $Prm3
添加以下 Technet Wiki link,其中包含在 PowerShell 中 运行 可执行文件的各种方法。
你只需要 plink
:
plink 'Saved Session Name'