问题
In my case, I needed to call a powershell script from a c or c++ code source, found few links which were pretty clumsy and not good with c++, I simply want a roadmap if its possible invoking a powershell script which lists directory contents from a code snippet written in c or c++
回答1:
C++ code :
#include<iostream>
#include <io.h> // For access().
#include <sys/types.h> // For stat().
#include <sys/stat.h> // For stat().
#include <string>
using namespace std;
void main()
{
string strPath = "d:\\callPowerShell.ps1";
//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)
{
system("start powershell.exe Set-ExecutionPolicy RemoteSigned \n");
system("start powershell.exe d:\\callPowerShell.ps1");
system("cls");
}
else
{
system("cls");
cout << "File is not exist";
system("pause");
}
}
回答2:
First error :
#include <io.h> // For access().
access is in this lib:
#include <cstdlib>
Next :
error: 'system' was not declared in this scope
#include <unistd.h>
And finally :
The caractere '\'
is a special caractere for C/C++ then you have to add another '\'
like :
system("start powershell.exe C:\\users\\sqtk-mal\\script1.ps1");
回答3:
In C++
#include <cstdlib>
std::system("command");
In c
#include <stdlib.h>
system("command");
回答4:
#include<iostream>
#include <io.h> // For access().
#include <sys/types.h> // For stat().
#include <sys/stat.h> // For stat().
#include <string>
using namespace std;
int main()
{
string strPath = "C:\users\sqtk-mal\script1.ps1";
//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)
{
system("start powershell.exe Set-ExecutionPolicy RemoteSigned \n");
system("start powershell.exe C:\users\sqtk-mal\script1.ps1");
system("cls");
}
else
{
system("cls");
cout << "File is not exist";
system("pause");
}
}
On using this code, codeblocks gives an error
-------------- Build: Debug in may3_1 (compiler: GNU GCC Compiler)---------------
mingw32-g++.exe -Wall -fexceptions -g -c C:\Users\sqtk-mal\Documents\codeblocks\may3_1\main.cpp -o obj\Debug\main.o
C:\Users\\Documents\codeblocks\may3_1\main.cpp: In function 'int main()':
C:\Users\\Documents\codeblocks\may3_1\main.cpp:11:25: error: incomplete universal character name \u
string strPath = "C:\users\sqtk-mal\script1.ps1";
^
C:\Users\\Documents\codeblocks\may3_1\main.cpp:11:25: warning: unknown escape sequence: '\s'
C:\Users\\Documents\codeblocks\may3_1\main.cpp:11:25: warning: unknown escape sequence: '\s'
C:\Users\\Documents\codeblocks\may3_1\main.cpp:18:80: error: 'system' was not declared in this scope
system("start powershell.exe Set-ExecutionPolicy RemoteSigned \n");
^
C:\Users\\Documents\codeblocks\may3_1\main.cpp:19:22: error: incomplete universal character name \u
system("start powershell.exe C:\users\sqtk-mal\script1.ps1");
^
C:\Users\\Documents\codeblocks\may3_1\main.cpp:19:22: warning: unknown escape sequence: '\s'
C:\Users\\Documents\codeblocks\may3_1\main.cpp:19:22: warning: unknown escape sequence: '\s'
C:\Users\\Documents\codeblocks\may3_1\main.cpp:24:27: error: 'system' was not declared in this scope
system("cls");
^
Process terminated with status 1 (0 minute(s), 0 second(s))
4 error(s), 4 warning(s) (0 minute(s), 0 second(s))
来源:https://stackoverflow.com/questions/43678273/how-to-call-a-powershell-script-from-a-c-code