从 C++ 应用程序获取 PowerShell 脚本输出

Posted

技术标签:

【中文标题】从 C++ 应用程序获取 PowerShell 脚本输出【英文标题】:Get PowerShell script output from C++ App 【发布时间】:2020-10-09 16:20:39 【问题描述】:

哪种方法是使用 C++ 应用程序读取 PowerShell 脚本输出的更好方法。尝试使用以下代码,但无法获得输出。从控制台执行相同的 PowerShell 脚本是完全可以的,但希望获得 PowerShell 脚本的输出以在应用程序中使用相同的脚本。

system("start powershell.exe Set-ExecutionPolicy RemoteSigned \n");
system("start powershell.exe d:\\callPowerShell.ps1");
system("cls");

【问题讨论】:

【参考方案1】:

同样的问题也发生在我身上,以下是我的解决方法:将powershell的输出重定向到一个文本文件中,exe完成后,从文本文件中读取其输出。

std::string psfilename = "d:\\test.ps1";
std::string resfilename = "d:\\res.txt";
std::ofstream psfile;
psfile.open(psfilename);

//redirect the output of powershell into a text file
std::string powershell = "ls > " + resfilename + "\n";
psfile << powershell << std::endl;
psfile.close();

system("start powershell.exe Set-ExecutionPolicy RemoteSigned \n");
//"start": run in background
//system((std::string("start powershell.exe ") + psfilename).c_str());
system((std::string("powershell.exe ") + psfilename).c_str());
system("cls");

remove(psfilename.c_str());

//after the exe finished, read the result from that txt file
std::ifstream resfile(resfilename);
std::string line;
if (resfile.is_open()) 
    std::cout << "result file opened" << std::endl;
    while (getline(resfile, line)) 
        std::cout << line << std::endl;
    
    resfile.close();
    remove(resfilename.c_str());

【讨论】:

以上是关于从 C++ 应用程序获取 PowerShell 脚本输出的主要内容,如果未能解决你的问题,请参考以下文章

从 Powershell 获取 Azure Active Directory 访问令牌

从 Powershell 启动 vNext 构建并获取工件

powershell 此SharePoint PowerShell从Web应用程序中的所有站点获取使用特定内容类型的列表的URL。

powershell 从Tridion Sites Core Service获取所有应用程序ID

c# - 如何在运行时从模块代码中获取 PowerShell 模块版本

PowerShell - HTML 解析:从网站获取信息