【问题标题】:Powershell plink telnet command output into varPowershell plink telnet 命令输出到 var
【发布时间】:2015-02-22 16:53:57
【问题描述】:

我正在尝试使用 powershell 和 plink 为一些 telnet/ssh 命令执行编写脚本(基于一些互联网示例)。但我想实现的主要功能是将这个命令的输出捕获到变量或文本文件中。如何拦截特定命令的输出?

例如:当我发送“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() }

【问题讨论】:

    标签: powershell ssh scripting telnet plink


    【解决方案1】:

    如果我理解正确,当您发送时

    $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"
    

    【讨论】:

    • 谢谢,但是当我使用此代码 ($result = $PlinkStreamWriter.Write("get-status")) 时,我得到一个空的 $result var。
    • 好的,但是发送字符串"Status is 01 02 03"的是什么?
    • 抱歉,“它是什么”是什么意思?我不确定,但也许应该有一些命令,如 $ps.StandardInput 或输出的“$PlinkStreamWriter.Write”?捕获的 plink 流无法分配给结果值。我尝试了一些不同的变体。感谢您的关注。哦,也许你知道一些其他的方法来让 powershell 脚本在没有新窗口和隐藏模式下工作,但是通过 plink telnet 或 ssh 命令执行?
    【解决方案2】:

    只需要一个简单的重定向 (>)。我在 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"
    

    【讨论】:

    • 这是一个有用的答案,但请注意您的格式。我已经为您修复了它,但请务必在以后发布帖子时探索代码的格式选项。
    【解决方案3】:

    这可能很有用,您可以将错误消息和警告消息的输出重定向到标准输出。示例:

    调用表达式 "cmd /c 'C:\Program Files (x86)\PuTTY\plink.exe'$plinkcmd 4>&1 3>&1 2>&1"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      • 2018-10-31
      • 2015-03-05
      • 2016-04-30
      • 2015-02-28
      相关资源
      最近更新 更多