【问题标题】:How to fetch output of command of powershell with C++?如何使用 C++ 获取 powershell 命令的输出?
【发布时间】:2014-08-02 13:22:18
【问题描述】:

我在 powershell scrpit 的帮助下实现了网络统计程序。该程序运行成功,并给了我完美的输出。下面是我的程序。

int main(int argc, char *argv[])
{
       string strPath = "C:\\Get-NetworkStatistics.ps1";
      char str[50] =  "C:\\Get-NetworkStatistics.ps1";

       char command[500];

//access function:
       //The function returns 0 if the file has the given mode.
       //The function returns –1 if the named file does not exist or does not have the given mode
       if(access(strPath.c_str(),0) == 0)
       {


_snprintf(command, sizeof(command), "Start Powershell.exe -noexit Set -executionpolicy;.'%s';Get-NetworkStatistics",str);
system(command);



       }

       else 
       {
              system("cls");
              cout << "File is not exist";
              system("pause");
        }
return 0;
}

here is the output of above program

如您所见,输出位于 powershell 窗口中。我想获取 powershell 输出的所有这些数据并希望在控制台中显示它。怎么可能?

请帮帮我..

【问题讨论】:

    标签: c++ visual-c++ powershell cmd console


    【解决方案1】:

    除非您需要在信息可用时实时显示信息,否则只需将其重定向到一个文件,然后从 C++ 中读取该文件。

    由于netstat 是在 Windows XP SP 2 或附近进行脑叶切除的,因此我可以使用 Powershell 理解。

    可能只是netstat 将满足您的需求,然后您就不必处理任何复杂的问题。


    顺便说一句,我建议使用脚本语言来编写脚本任务。当然,默认情况下禁用 Powershell 脚本会很复杂,否则会指示使用 Powershell 脚本工具。但是例如在这种情况下,[cmd.exe] 批处理文件将比从 C++ 中执行它的工作更自然。

    可从 JScript 和 VBScript 获得的 Windows Script Host shell 对象提供了用于处理输出抓取的功能。

    您必须轮询输出,但我认为这仍然比在 C/C++ API 级别执行此操作更容易。

    【讨论】:

    • 感谢回复我发现 netstat 的问题是它无法在第一个命令中获取进程名称,要获取进程名称首先必须运行命令 netstat -ano 然后根据 PID 编写另一个命令 tasklist /svc /fi "2010,特别是当您同时需要端口和进程名称时,我发现它非常复杂。
    • well netstat -a -b -n -o 在提升的命令行中似乎显示了可执行文件。
    • 尝试给它单独选项,每个选项都以连字符为前缀。
    • 它可以工作,但主要问题是,当你想要所有具有特定进程名称或端口的信息时,它不起作用,当我尝试 netstat -a -b -n -o | findstr mysql 它只给出进程名称 mysql 而不是端口和地址的名称,并且 PID 不是重新检索..:(
    猜你喜欢
    • 2021-07-10
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 2010-10-03
    相关资源
    最近更新 更多