4

I want to execute the PowerShell command in C + + programming. I've edited the command statement that needs to be run.PowerShell_CMDXML_File

2
  • 1
    How about something like system("powershell 'echo \"hello from powershell\"'");? I don't know how practical it is from anything more elaborate than that though... Commented Mar 7, 2019 at 7:25
  • 1
    I think it might be prudent to dump out a temporary ps1 file for something as complicated as what is shown in your image. Then @Blaze's answer could be adjusted to system("powershell -f temp.ps1"); Commented Mar 7, 2019 at 7:46

1 Answer 1

2

My assumption here is that you're trying to add -auto to the arguments. After reviewing the supplied image I would change the PowerShell code as well.

$task = Get-ScheduledTask "Test"
$items = @{}
if ($task.Actions.Execute -ne $null) {$items.Add('Execute', "$($task.Actions.Execute)")} 
$items.Add('Argument', "$($task.Actions.Arguments) -auto") 
if ($task.Actions.WorkingDirectory -ne $null) {$items.Add('WorkingDirectory',"$($task.Actions.WorkingDirectory)")} 
$action = New-ScheduledTaskAction @items
$task.Actions = $action
Set-ScheduledTask -InputObject $task


Far simpler and easier to understand.

To run this in c++ you should dump the code to a temporary file.

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    ofstream file;
    file.open("test.ps1");

    string newArg = "-auto";
    string powershell;
    powershell = "$task = Get-ScheduledTask \"Test\"\n";
    powershell += "$items = @{}\n";
    powershell += "if ($task.Actions.Execute -ne $null) {$items.Add('Execute', \"$($task.Actions.Execute)\")} \n";
    powershell += "$items.Add('Argument', \"$($task.Actions.Arguments) " + newArg + "\") \n"; // 'Argument' not a typo
    powershell += "if ($task.Actions.WorkingDirectory -ne $null) {$items.Add('WorkingDirectory',\"$($task.Actions.WorkingDirectory)\")} \n";
    powershell += "$action = New-ScheduledTaskAction @items\n";
    powershell += "$task.Actions = $action\n";
    powershell += "Set-ScheduledTask -InputObject $task\n";
    file << powershell << endl;
    file.close();

    system("powershell -ExecutionPolicy Bypass -F test.ps1");

    remove("test.ps1");
}
Sign up to request clarification or add additional context in comments.

9 Comments

I call system () to execute when the script is disabled, I've changed the settings with the command--"Set-executionpolicy remotesigned", but I can do it when I right-click the PowerShell
So you're saying we can't use -f file.ps1 ?
Yes, I do not know why I use System () to perform the prompt to disable, manually right-click to do it.
I uploaded another XML file diagram, want to increase the red part of the node, without PowerShell implementation,can you help me write the command statement to increase this node?
I've added a bypass for the ExecutionPolicy and made it copy over existing values if they exist. This should run and add any parameter you like in the newArg string.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.