我一直使用的是什麼我也讀到了嘗試使用了標準PS1:如何在Windows上自動運行非PATH plink(Putty Link)?並得到它的輸出?
ECHO y | 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砰砰手動運行,我得到的輸出,我需要閱讀和可能顯示給用戶。將最後一行管道輸出到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和什麼都沒有。
您是否連接到運行Cygwin的Windows服務器?調用'.exe'文件,但使用* nix命令('ls')的組合不常見。如果在SSH終端(PuTTY)中手動輸入命令序列,該命令序列是否工作? –