Last active
July 5, 2023 12:27
-
-
Save miteshsureja/f9cbc2f09264a01277a6555a7425debc to your computer and use it in GitHub Desktop.
How to execute PowerShell script or cmdlets from C# code?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Tried the above steps to log the error.
However error = process.StandardError.ReadToEnd(); gives no information.Any clues here will be helpful.