2014-12-24 126 views
1

我正在嘗試使用powershell和plink編寫腳本(基於一些Internet示例)執行一些telnet/ssh命令。但是我想實現的主要功能是將此命令的輸出捕獲到變量或文本文件中。我如何攔截特定命令的輸出?Powershell plink telnet命令輸出到var

例如:當我發送「get-status」命令時,它返回「Status is 01 02 03」。我可以將此字符串分配給var或文本文件嗎?也許,只有「01 02 03」沒有「狀態」文本?

$ps = New-Object -TypeName System.Diagnostics.Process 
$ps.StartInfo.UseShellExecute = $false 
$ps.StartInfo.RedirectStandardInput = $true 
$ps.StartInfo.FileName = "plink" 
$ps.StartInfo.Arguments = "-telnet XXX.XXX.XXX.XXX" 

[void]$ps.Start() 

$PlinkStreamWriter = $ps.StandardInput 

Start-Sleep -m 500 
$PlinkStreamWriter.Write("login`r") 
Start-Sleep -m 500 
$PlinkStreamWriter.Write("password`r") 
Start-Sleep -m 500 
$PlinkStreamWriter.Write("get-status") 
Start-Sleep -m 500 

Write-Host "Status string: " ..... 

$PlinkStreamWriter.Write("exit`r") 
$PlinkStreamWriter.Close(); 
if (!$ps.HasExited) { $ps.Kill() } 

回答

0

如果我理解正確的話,當你發送

$PlinkStreamWriter.Write("get-status") 

您會收到

Status is 01 02 03 

如果這是一貫的,您要分配這個值的變量,只要定義變量在您的命令開始處:

$result = $PlinkStreamWriter.Write("get-status") 

現在,如果你想刪除「狀態是」從存儲在$結果:

$result = $result -replace "Status is ","" 

現在$結果只包含"01 02 03"

現在,您可以更新您的write-host命令:

Write-Host "Status string: $result" 
+0

謝謝,但是當我使用這段代碼($ result = $ PlinkStreamWriter.Write(「get-status」))時,我得到一個空的$ result var。 – Wind

+0

好的,但那麼發送字符串「」狀態是01 02 03「'是什麼? –

+0

對不起,你是什麼意思「它是什麼」?我不知道,但也許應該有一些像「$ PlinkStreamWriter.Write」爲$ ps.StandardInput或可能輸出命令?捕獲的plink流不能分配給結果值。我嘗試了一些不同的變體。感謝您的關注。哦,也許你知道一些其他的方式來獲得PowerShell腳本工作,沒有新窗口,並在隱藏模式下,但與plink telnet或ssh命令執行? – Wind

-1

這可能很有用,您可以將錯誤消息和警告消息的輸出重定向到標準輸出。例如:

調用表達式 「CMD/C 'C:\程序文件(x86)\膩子\ plink.exe' $ plinkcmd 4> & 1 3> & 1 2> & 1」