powersharp: dotnet core C# powershell library

  |   Source


powersharp is a dotnet core c# library which has the capability to run powershell scripts and process the resulting objects.

powersharp supports 3 different types of runspaces:

  • Local sessions
  • Remote Sessions: Import or Enter session modes

The library runs fine on major operating systems:

  • Windows10
  • Linux Debian 10
  • MacOS X Catalina

Let's have a look at a sample code:

Get-Process | Get-Member

Handles                    AliasProperty  Handles = Handlecount
Name                       AliasProperty  Name = ProcessName
NPM                        AliasProperty  NPM = NonpagedSystemMemorySize64
PM                         AliasProperty  PM = PagedMemorySize64
SI                         AliasProperty  SI = SessionId
VM                         AliasProperty  VM = VirtualMemorySize64

<<<<<<< HEAD Let's then get 2 fields, Name and VM

Get-Process | Select-Object -Property ProcessName, VM
Let's then get 2 fields, **Name** and **Id**

Get-Process | Select-Object -Property Id, Name
>>>>>>> c40f1ec... powersharp 1/xxx
class Process
    [PSMember("Id", typeof(int))]
    public int Id {get; set; }

    [PSMember("Name", typeof(string))]
    public String Name {get; set; }

var shell = new LocalShellInfo();

var initializer = new LocalPSSessionInitializer(shell);
PSProcessor<Process> processor = new PSProcessor<Process>(process => 
    Console.WriteLine($"{process.Id}: {process.Name}");

using (var powershell = new PowershellRunner(initializer))
        await powershell.run("Get-Process", processor);
    catch (Exception ex)

The output:

4001 bash
 4957 bash
 7620 bash
 9321 bash
11630 bash
14585 bash

This sample outputs on console, but we could imagine to send data to a queue system for logging purpose so that user could make some analytics.

Here I show a sample to run local PowerShell commands, but the library allows user to connect to a remote office365 endpoint to perform scripts over Exchange, Sharepoint, Teams, ....

I plan to release this library as open source in the coming weeks under MIT license and will be available through a nuget repository.

Stay tuned !

Comments powered by Disqus