我尝试使用powershell和plink编写一个脚本(基于一些互联网示例)来执行某些telnet / ssh命令。但是我想要实现的主要功能是将此命令的输出捕获到变量或文本文件中。如何拦截特定命令的输出?
例如:当我发送" get-status"命令,它返回"状态为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 :(得分:0)
如果我理解正确,当你发送
$PlinkStreamWriter.Write("get-status")
你收到了
Status is 01 02 03
如果这是一致的并且您想将此值分配给变量,只需在命令开头定义变量:
$result = $PlinkStreamWriter.Write("get-status")
现在,如果你想删除"状态是"来自$ result中的值:
$result = $result -replace "Status is ",""
现在$ result只包含"01 02 03"
您现在可以更新write-host
命令:
Write-Host "Status string: $result"
答案 1 :(得分:-1)
这可能有用,您可以将错误消息和警告消息的输出重定向到标准输出。例如:
调用表达式“cmd / c”C:\ Program Files(x86)\ PuTTY \ plink.exe'$ plinkcmd 4>& 1 3>& 1 2>& 1“