簡體   English   中英

如何在Windows上自動執行none-PATH plink(Putty Link)? 得到它的輸出?

[英]How can I automate none-PATH plink (Putty Link) on windows? and get its output?

我一直在嘗試使用我讀到的有關兩種標准PS1的內容:

ECHO y | plink .....

但是我的問題是plink被保存在網絡驅動器上。 我可以使用以下方式調用它:

$plink = "P:\path\plink.exe"
echo y | &$plink -ssh -l user-pw password $addrss exit
&$plink -ssh -l user -pw password -m "P:\path\SCOTDiagScript.txt" $addrss

我的問題是,如果我通過cmd手動運行plink,則會得到輸出,需要閱讀並可能顯示給用戶。 將最后一行插入Out-File沒有任何幫助,如果我嘗試調用cmd然后重定向到txt文件,則會收到錯誤消息,因為plink的路徑中有空格。 並且我使用引號。

我也嘗試使用.NET,但是執行.StandardOutput.ReadToEnd()會導致它掛起。 僵局也許? 即使我將其放置在出口之前,並且在任何類型的出口發生之前我都會讓它睡一會兒:

$ps = New-Object -TypeName System.Diagnostics.Process
$ps.StartInfo.UseShellExecute = $false
$ps.StartInfo.RedirectStandardInput = $true
$ps.StartInfo.RedirectStandardOutput = $true;
$ps.StartInfo.FileName = "P:\path\plink.exe"
$ps.StartInfo.Arguments = "-ssh -l user -pw password $addrss"

[void]$ps.Start() 

Start-Sleep -m 500
$ps.StandardInput.Write("cd c:/scot/bin`r")
Start-Sleep -m 500
$ps.StandardInput.Write("GetDiagFiles.exe`r")
Start-Sleep -m 500
$ps.StandardInput.Write("cd c:/temp`r")
Start-Sleep -m 500
$ps.StandardInput.Write("ls *.zip`r")
Start-Sleep -m 500
$ps.StandardInput.Write("cd c:/scot/monitor`r")
$Out = $ps.StandardOutput.ReadToEnd();
Start-Sleep -s 10
$ps.StandardInput.Write("exit`r")

$PlinkStreamWriter.Close();
if (!$ps.HasExited) { $ps.Kill() }
$Out

我確定我做錯了什么,但是我對MSDN上的所有內容一無所獲。

做您想做的事應該很簡單:

plink -ssh -l user -pw password -m script.txt > output.log

script.txt包含您的命令的位置:

cd c:/scot/bin
GetDiagFiles.exe
cd c:/temp
ls *.zip
cd c:/scot/monitor
exit

如果這不起作用(因為您聲稱您嘗試過類似的操作),請向我們提供有關該問題的更多詳細信息。

您尚未創建System.Diagnostics.ProcessStartInfo物體送入System.Diagnostics.Process對象。

您需要在命令的末尾添加`n而不是`r ,或者在使用.WriteLine方法時可以將其完全刪除

我使用一些cmd.exe測試了以下代碼,並進行了所需的更改,它應與plink.exe一起使用

$ProcessStartInfo = New-Object System.Diagnostics.ProcessStartInfo
$ProcessStartInfo.UseShellExecute = $false
$ProcessStartInfo.RedirectStandardError = $true
$ProcessStartInfo.RedirectStandardInput = $true
$ProcessStartInfo.RedirectStandardOutput = $true
$ProcessStartInfo.FileName = "P:\path\plink.exe"
$ProcessStartInfo.Arguments = "-ssh -l user -pw password $addrss"

$Process = New-Object System.Diagnostics.Process
$Process.StartInfo = $ProcessStartInfo
$Process.Start() | Out-Null

$Process.StandardInput.WriteLine("cd c:/scot/bin")
$Process.StandardInput.WriteLine("GetDiagFiles.exe")
$Process.StandardInput.WriteLine("cd c:/temp")
$Process.StandardInput.WriteLine("ls *.zip")
$Process.StandardInput.WriteLine("cd c:/scot/monitor")
$Process.StandardInput.WriteLine("exit")

$Process.WaitForExit()

$stdoutput = $Process.StandardOutput.ReadToEnd()
$erroutput = $Process.StandardError.ReadToEnd()

Write-Host "Standard Output: $stdoutput"
Write-Host "Error Output : $erroutput"
Write-Host "exit code: " + $Process.ExitCode

暫無
暫無

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

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