Вывод команды telnet Powershell plink в var

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

Например: когда я посылаю команду "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() }

3 ответа

Если я вас правильно понимаю, когда вы отправляете

$PlinkStreamWriter.Write("get-status")

Вы получите

Status is 01 02 03

Если это не противоречит, и вы хотите присвоить это значение переменной, просто определите переменную в начале вашей команды:

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

Теперь, если вы хотите удалить "Status is" из значения, сохраненного в $result:

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

Теперь $ result содержит только "01 02 03"

Теперь вы можете обновить свой write-host команда:

Write-Host "Status string: $result"

Простое перенаправление ( >) это все, что нужно. Я проверил, что это работает для меня в PowerShell v5.1.22000.282. Вот мой подход для тех, кто в нем нуждается.

      $filepath = "$PSScriptRoot"
$PUTTY="$Env:ProgramFiles\PuTTY\plink.exe"

$commands = @"
y
vncserver -geometry 1920x1080
exit"@

#echoes yes onto putty prompt if it exists and spits output to out.txt

echo $commands | & $PUTTY -ssh $IP -l $USER -pw $PW > "$filepath/out.txt"

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

Вызвать выражение "cmd /c 'C:\Program Files (x86)\PuTTY\plink.exe'$plinkcmd 4>&1 3>&1 2>&1"

Другие вопросы по тегам