2014-12-24 5 views
1

Я пытаюсь написать сценарий (на основе некоторых интернет-примеров) для выполнения команды telnet/ssh, используя powershell и plink. Но основная функция, которую я хотел бы реализовать, - это вывести вывод этой команды в переменную или текстовый файл. Как я могу перехватить вывод конкретной команды?Вывод команды telnet командной строки Powershell в var

Например: когда я отправляю команду «получить статус», он возвращает «Статус 01 02 03». Могу ли я передать эту строку в файл var или text? Может быть, только «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

ОК, но тогда что это такое, что отправляет строку '' Status is 01 02 03 "'? –

+0

Извините, что вы имеете в виду «что это такое»? Я не уверен, но, возможно, должна быть какая-то команда вроде «$ PlinkStreamWriter.Write» для $ ps.StandardInput или, может быть, Output? Этот захваченный поток plink не может быть назначен для результата результата. Я пробовал несколько разных вариантов. Спасибо за внимание. О, и, может быть, вы знаете некоторые другие способы заставить скрипт powershell работать без новых окон и в скрытом режиме, но с выполнением команд plink telnet или ssh? – Wind

-1

Это может быть полезно, вы можете перенаправить выходы из сообщений об ошибках и предупреждающих сообщений в стандартную версию. Пример:

Invoke-Выражение "CMD/с 'C: \ Program Files (x86) \ PuTTY \ plink.exe' $ plinkcmd 4> & 1 3> & 1 2> 1 &"