簡體   English   中英

Powershell Putty 連接和自動化任務

[英]Powershell Putty Connection and Automating Tasks

我想使用 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 完成此操作?

所有你需要的是plink

plink 'Saved Session Name'

您不一定需要 Start-Process。

當您嘗試從 Powershell 運行d:\\putty\\psftp.exe 'Saved Session Name' -bd:\\location.txt時會發生什么? 我做的第一件事就是像從命令行運行它一樣嘗試它。

最大的問題是路徑名中是否有空格。 您可能需要使用引號和調用運算符( &"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 "call operator"的更多主題,請參閱Get-Help about_OperatorsGet-Help "call operator" 有關這方面Get-Help Start-Process請參閱Get-Help Start-Process

添加以下 Technet Wiki 鏈接,其中包含在 PowerShell 中運行可執行文件的各種方法。

PowerShell:運行可執行文件

嘗試這個:

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

&$Path $Prm1 $Prm2 $Prm3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM