Вывод команды 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"