Powershell ohne Fenster aufrufen



  • Hi,

    damit rufe ich powershell auf:

    LPWSTR command=(_TEXT("powershell.exe -Executionpolicy bypass -File \"%deploy%\\psscript.ps1\" -Filename psscript -Folderpath \"%HOMEDRIVE%\\deployment\""));
    
    CreateProcess(NULL, command, NULL, NULL, NULL, CREATE_NO_WINDOW, NULL, NULL, NULL, NULL);
    

    Leider wird trotzdem eine Konsole geöffnet 😞
    Wenn ich das richtig verstehe, wird der Befehl selbst ohne Fenster ausgeführt und die powershell.exe macht sein eigenes auf.

    Wie kriege ich den Befehl durch, ohne Fenster?
    Das ist das letzte Stückchen Code in meinem Projekt bei dem das Fenster verschwinden muss.

    Danke!



  • muss mich korrigieren,
    ich hatte darüber die alte zeile mit system(...);
    Jetzt öffnet sich kein Fenster mehr, allerdings läuft das Skript auch nicht 😮



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Habe ein paar Fehler gefunden und damit hoffentlich gefixt:

    LPWSTR PSPath = env(_TEXT("SystemRoot"));
    	LPWSTR TEMP2 = env(_TEXT("TEMP"));
    	LPWSTR HOMEDRIVE = env(_TEXT("HOMEDRIVE"));
    	LPWSTR PSPathexe = (_TEXT("%s\\system32\\WindowsPowerShell\\v1.0\\powershell.exe -Executionpolicy bypass -File \"%s\\psscript.ps1\" -Filename psscript -Folderpath \"%s\\deployment\""),PSPath,TEMP2, HOMEDRIVE);
    	CreateProcess(NULL, PSPathexe, NULL, NULL, NULL, CREATE_NO_WINDOW, NULL, NULL, NULL, NULL);
    

    läuft noch immer nicht aber näher am ziel



  • Was soll zeile 4 bitte machen?



  • alle teile zusammensetzen damit die ausgeführt werden



  • ERFOLG! So startet es:

    LPWSTR PSPath = env(_TEXT("SystemRoot"));
    	LPWSTR TEMP2 = env(_TEXT("TEMP"));
    	LPWSTR HOMEDRIVE = env(_TEXT("HOMEDRIVE"));
    	LPWSTR PSPathexe = (_TEXT("powershell.exe")); 
    	LPWSTR PSArg = (_TEXT("-Executionpolicy bypass -File \"C:\\Users\\tet\\AppData\\Local\\Temp\\psscript.ps1\" -Filename psscript -Folderpath \"C:\\deployment\""));
    
    	STARTUPINFO si;
    	PROCESS_INFORMATION pi;
    
    	ZeroMemory(&si, sizeof(si));
    	si.cb = sizeof(si);
    	ZeroMemory(&pi, sizeof(pi));
    	ShellExecute(NULL, NULL, PSPathexe, PSArg, NULL, SW_HIDE);
    

    Aber, wie bekomme ich die festen Pfade raus? Bisher kriege ich die nicht erfolgreich durch...



  • Das kannst du zB mit sprintf bzw wsprintf oder std::stringstream bzw std::wstringstream erledigen.



  • std::stringstream BuildPath;
    	BuildPath << "-noexit -Executionpolicy bypass -File (($env:temp) + '\\psscript.ps1') -Filename psscript -Folderpath (($env:systemdrive)+ '\\deployment')";
    	std::string s = BuildPath.str();
    	LPWSTR a = s.c_str();
    
    1>PSLoaderv2.cpp(54): error C2440: "Initialisierung": "const char *" kann nicht in "LPWSTR" konvertiert werden
    1>  PSLoaderv2.cpp(54): note: Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
    1>PSLoaderv2.cpp(63): error C2664: "HINSTANCE ShellExecuteW(HWND,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,INT)" : Konvertierung von Argument 4 von "std::string" in "LPCWSTR" nicht möglich
    1>  PSLoaderv2.cpp(63): note: Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
    

    das will so nicht und ich probier doch schon alles 😡


Anmelden zum Antworten