1

我正在尝试使用 C 程序自动从 Linux 执行一些 powershell 脚本。我正在使用libexpect将命令发送到 Windows 并获取 powershell 终端的文件描述符并写入它以运行 powershell 脚本/命令。它工作正常。但我的要求是我希望能够从我的 C 程序中读取 powershell 脚本的输出。

C 程序如下所示:

  fd = exp_spawnl( "sh", "sh", "-c", "telent -l username machine", (char*)0);

  exp_expectl( fd, exp_glob, "password: ", 1, exp_end);
  write(fd, "password\r", NUM_BYTES);

  exp_expectl( fd, exp_glob, ".*>", 1, exp_end);
  write(fd, "powershell \path\script.ps1\r", NUM_BYTES);

如上所述,不可能获得powershell script.ps1在 Windows 上执行的标准输出/标准错误。

linux-windows-powershell-linux 的整个设置都在本地网络中。因此,我现在不太担心使用 telnet。但我对任何有助于实现我的目标的解决方案(无论是否使用 ssh)持开放态度。

如果有其他选择,我也愿意不使用 libexpect。基本上我可以用这种方法改变任何东西。我正在使用它,因为我不知道有任何其他方式可以按照预期(libexpect)将用户名/密码和命令发送到远程 shell。

只要满足我的主要目标,即自动执行powershell脚本/命令并获取它们的stdout和stderr以及它们的退出状态$?。请注意,我不需要文件指针本身,如果我可以在 a中获取char[](如OUTPUT=$(ls)在 bash 中),我会非常高兴。

4

1 回答 1

1

一个(不是很方便)的解决方案:expect 的手册说:“如果 exp_loguser 不为零,expect 将任何输出从生成的进程发送到标准输出。” (这里)。因此,如果您在管道的写入端临时重定向您的标准输出,您可以使用日志记录功能通过读取管道的读取端来实际拦截生成的进程的输出。输出可能会与输入混合(交互式程序用于回显其输入),因此您需要确定重定向流中的相关数据。

于 2013-10-29T20:55:03.820 回答