我希望能够像我的c ++程序一样运行30行PowerShell脚本。我听说这是一个糟糕的主意,我不在乎。我仍然想知道如何。
我只想直接在C ++程序中编码,我不想从外部调用PowerShell脚本。有什么办法吗?如果不可能,那就说不。
例如
void runPScode() {
//command to tell compiler the following is PowerShell code
//a bunch of PowerShell code
}
谢谢!
我一直在寻找执行此操作的命令,并且已经阅读了几个“相似”问题。
答案 0 :(得分:3)
这只是出于完整性的考虑
PowerShell具有API-请参见System.Management.Automation.PowerShell。该API是受管理的(即,基于.NET的)。可以构建一个混合模式的C ++应用程序,并从被管理部分调用所述API。
将以下内容放入单独的C ++文件中:
#include "stdafx.h"
#include <vcclr.h>
#using <mscorlib.dll>
#using <System.dll>
#using <System.Management.Automation.dll>
using namespace System;
using namespace System::Management::Automation;
void RunPowerShell(LPCWSTR s)
{
PowerShell::Create()->AddScript(gcnew String(s))->Invoke();
}
在“项目属性”的VC ++目录下,将C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\3.0
添加到参考目录(您的路径可能会有所不同)。
仅为该文件设置以下编译器选项 :
您需要/clr
才能从C ++调用.NET,但是/clr
与许多其他C ++选项不兼容。如果您错过了某些内容,编译器错误消息将让您知道。
在项目的非托管部分中将void RunPowerShell(LPCWSTR)
声明为常规外部函数,根据需要调用。
也就是说,无论您的Powershell做什么,C ++ / Win32都可以做到。
答案 1 :(得分:2)
//command to tell compiler the following is PowerShell code
不!没有这样的命令可以告诉编译器,并且
//a bunch of PowerShell code ...
被内联执行。
您可以使用CreateProcess()
函数选择您的外壳,并为其提供适当的代码来执行。
答案 2 :(得分:0)
您有两个选择:使用系统或CreateProcess
。系统文档位于:
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/system-wsystem?view=vs-2019
使用此方法可以传递字符串命令。一个示例,如文档中所示:
system( "type crt_system.txt" );
CreateProcess文档位于:
使用此命令比较棘手,我不建议在简单命令中使用它。
有关其他信息,请参见: how can we use a batch file in c++?