[英]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.