我试图通过 VB.NET 从命令获取结果,它返回空字符串,如下面的代码所示:
Dim connInfo As New Renci.SshNet.PasswordConnectionInfo(serverip, user, pass)
Dim sshClient As New Renci.SshNet.SshClient(connInfo)
Dim cmd As Renci.SshNet.SshCommand
Using sshClient
sshClient.Connect()
cmd = sshClient.RunCommand("opmnctl status -l")
MsgBox(cmd.Result)
sshClient.Disconnect()
End Using
当我尝试使用正常命令时,例如"ls -ltr"
它成功返回结果。
还有另一种获取结果字符串的方法吗?或者是opmnctl
Renci 不支持 OPMN Oracle 引擎的命令?任何帮助,将不胜感激。
If the opmnctl
由于某种原因失败,它可能会在错误输出上生成一条消息。
所以还要检查一下cmd.Error
and cmd.ExitStatus
.
请注意,.RunCommand
方法使用非交互式终端,这可能会导致某些命令出现问题。
特别地,当使用非交互式终端时,可以设置不同的环境,因为执行不同的启动脚本集和/或采取脚本中的不同分支(基于a的值)TERM
环境变量)。
就你而言,似乎opmnctl
不包含在PATH
在非交互式终端上。
当您在 SSH 客户端中强制使用非交互式终端时,您应该会遇到同样的问题。
例如:
-
使用 OpenSSH 命令行ssh
客户端,使用-T
开关(禁用伪 tty 分配)。
ssh -T user@host opmnctl status -l
-
与 PLink 相同(来自 PuTTY 包)
plink.exe -T user@host opmnctl status -l
(The -T
无论如何,当在命令行上指定命令时应该是隐式的)
解决办法是:
- 修复您的启动脚本以包含
opmnctl
to PATH
即使在非交互式终端上(首选)
- 使用完整路径
opmnctl
在你的指挥下。
- 修改SSH.NET代码来发出
SendPseudoTerminalRequest
请求在.RunCommand
实现(我没有测试这个)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)