Skip to content

Instantly share code, notes, and snippets.

@miteshsureja
Last active July 5, 2023 12:27
Show Gist options
  • Save miteshsureja/f9cbc2f09264a01277a6555a7425debc to your computer and use it in GitHub Desktop.
Save miteshsureja/f9cbc2f09264a01277a6555a7425debc to your computer and use it in GitHub Desktop.
How to execute PowerShell script or cmdlets from C# code?
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using System.Management.Automation;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace PowerShellScriptExecutor
{
class Program
{
static void Main(string[] args)
{
using (PowerShell PowerShellInst = PowerShell.Create())
{
string criteria = "system*";
PowerShellInst.AddScript("Get-Service -DisplayName " + criteria);
Collection<PSObject> PSOutput = PowerShellInst.Invoke();
foreach (PSObject obj in PSOutput)
{
if (obj != null)
{
Console.Write(obj.Properties["Status"].Value.ToString() + " - ");
Console.WriteLine(obj.Properties["DisplayName"].Value.ToString());
}
}
Console.WriteLine("Done");
Console.Read();
}
}
}
}
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using System.Management.Automation;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace PowerShellScriptExecutor
{
class Program
{
static void Main(string[] args)
{
//Execute PS1(PowerShell script) file
using (PowerShell PowerShellInst = PowerShell.Create())
{
string path = System.IO.Path.GetDirectoryName(@"C:\Temp\") + "\\Get-EventLog.ps1";
if (!string.IsNullOrEmpty(path))
PowerShellInst.AddScript(System.IO.File.ReadAllText(path));
Collection<PSObject> PSOutput = PowerShellInst.Invoke();
foreach (PSObject obj in PSOutput)
{
if (obj != null)
{
Console.Write(obj.Properties["EntryType"].Value.ToString() + " - ");
Console.Write(obj.Properties["Source"].Value.ToString() + " - ");
Console.WriteLine(obj.Properties["Message"].Value.ToString() + " - ");
}
}
Console.WriteLine("Done");
Console.Read();
}
}
}
}
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using System.Management.Automation;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace PowerShellScriptExecutor
{
class Program
{
static void Main(string[] args)
{
//execute powershell cmdlets or scripts using command arguments as process
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.FileName = @"powershell.exe";
//execute powershell script using script file
//processInfo.Arguments = @"& {c:\temp\Get-EventLog.ps1}";
//execute powershell command
processInfo.Arguments = @"& {Get-EventLog -LogName Application -Newest 10 -EntryType Information | Select EntryType, Message}";
processInfo.RedirectStandardError = true;
processInfo.RedirectStandardOutput = true;
processInfo.UseShellExecute = false;
processInfo.CreateNoWindow = true;
//start powershell process using process start info
Process process = new Process();
process.StartInfo = processInfo;
process.Start();
Console.WriteLine("Output - {0}", process.StandardOutput.ReadToEnd());
Console.WriteLine("Errors - {0}", process.StandardError.ReadToEnd());
Console.Read();
}
}
}
@miteshsureja
Copy link
Author

image

@miteshsureja
Copy link
Author

image
image

@miteshsureja
Copy link
Author

image

@jaevibing
Copy link

thank you, you beautiful indian man

@casrxs
Copy link

casrxs commented Nov 12, 2020

Hi, I used every method described above, it works fine on my local machine but when I create task scheduler on production server PowerShell script does not get executed.

Any help would be appreciated.

Thanks
Rupinder

@pramodRayanna
Copy link

Hi, i am having the same issue. i am invoking powershell script on a button click. its working fine on my local machine. but when the code is deployed to Dev environment, its not working. is this an issue with IIS User vs local user? please help.

Thanks in advance,
Pramod.

@shunyh
Copy link

shunyh commented Feb 8, 2021

Same issue here, anyone can help with this? It works fine on dev machine, but it will not execute the PS after deploying to the Windows server.

@shunyh
Copy link

shunyh commented Feb 19, 2021

Same issue here, anyone can help with this? It works fine on dev machine, but it will not execute the PS after deploying to the Windows server.

I resolved this issue.
Set those properties:

RedirectStandardError = true; error = process.StandardError.ReadToEnd();

write the error to a .txt file, it is the important info for troubleshooting.

The error for me is logon server failed due to missing the domain before the username. Hope it helps

@christinezuzart2022
Copy link

christinezuzart2022 commented Sep 22, 2022

Tried the above steps to log the error.
However error = process.StandardError.ReadToEnd(); gives no information.Any clues here will be helpful.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment