【问题标题】:Posh-SSH and Cisco GearPosh-SSH 和 Cisco Gear
【发布时间】:2016-10-26 13:11:24
【问题描述】:

我一直致力于使用 Powershell 和 Posh-SSH 模块编写一些脚本。我主要连接到思科设备,但也有一些其他网络设备。我的问题似乎是我可以很好地连接到设备,但我的命令似乎没有运行。我尝试过 Invoke-SSHCommand 以及创建 New-SSHShellStream。奇怪的是,如果我打开 Powershell 并手动单步执行每个命令,它似乎工作得很好,但由于某种原因,在脚本中运行不会产生我正在寻找的结果。

我发现 plink.exe 工作得很好,但如果可能的话,我真的宁愿从 Powershell 编写所有这些代码。这些网络设备可能与 Linux 服务器不同吗?

代码:
New-SSHSession -ComputerName $fw-ip -Credential (Get-Credential) -Verbose<br/> $session = Get-SSHSession -Index 0<br/> $stream = $session.Session.CreateShellStream("dumb", 0, 0, 0, 0, 1000)<br/> $stream.Write("show ver")<br/> $stream.Read()


我得到了什么:
Type help or '?' for a list of available commands.<br/> FW/Admin>

【问题讨论】:

  • 您是否收到任何错误消息或脚本似乎成功完成但没有任何反应?你也可以发布你的代码示例吗?
  • 抱歉,试图回答您的问题,但我无法确定要在此处发布的代码的格式。请稍等。
  • 好的,看起来命令正在发送但设备无法识别它,会话识别不完整的“show ver”命令的方式可能有些奇怪,可以您尝试运行完整的“显示版本”,然后告诉我进展如何?
  • 当我运行完整版时,我什么也得不到。你是对的,看起来这些命令根本没有运行。谢谢您的帮助。我很感激。
  • 所以在运行“show version”而不是“show ver”时什么也得不到,这似乎意味着命令正在运行,或者至少没有失败,因为流是交互式的,也许当你调用 read() 时命令还没有输出数据?也许尝试在 write() 和 read() 之间加入一两秒的开始睡眠?

标签: powershell ssh cisco posh-ssh


【解决方案1】:

所以在与您一起在 cmets 中工作之后,看起来有两个问题,第一个是 SSH.NET 库支持的 SSH shell 似乎不支持部分命令,将“显示版本”交换为“显示版本” "纠正了这一点。此外,该命令的运行时间比脚本在流上调用其 read() 之前等待的时间要长一些,这可以通过在 write() 和 read() 之间添加 start-sleep -seconds 5 来解决。如果您打算将其用于可能需要更长时间或不确定它们需要多长时间的命令,您可能需要研究一些额外的处理,通过检查数据可用属性或创建一个来检查命令是否完成DataReceived 事件的侦听器,但如果您保持简单,则基本计时器将非常适合您。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多