AutomationIoC.PSCmdlets 2.0.0-preview1

This is a prerelease version of AutomationIoC.PSCmdlets.
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package AutomationIoC.PSCmdlets --version 2.0.0-preview1                
NuGet\Install-Package AutomationIoC.PSCmdlets -Version 2.0.0-preview1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="AutomationIoC.PSCmdlets" Version="2.0.0-preview1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add AutomationIoC.PSCmdlets --version 2.0.0-preview1                
#r "nuget: AutomationIoC.PSCmdlets, 2.0.0-preview1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install AutomationIoC.PSCmdlets as a Cake Addin
#addin nuget:?package=AutomationIoC.PSCmdlets&version=2.0.0-preview1&prerelease

// Install AutomationIoC.PSCmdlets as a Cake Tool
#tool nuget:?package=AutomationIoC.PSCmdlets&version=2.0.0-preview1&prerelease                

Nuget Version Nuget Downloads Continuous Integration

AutomationIoC.PSCmdlets

Dependency Injection Framework for C# PowerShell Cmdlets

Requirements

Getting Started

Installation

dotnet add package AutomationIoC.PSCmdlets

Development

See Sample Projects for a full sample solution

Add the following to your .csproj file

<PropertyGroup>
    
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>

Add a Startup class

public class Startup : IoCStartup
{
    // Add any configuration sources or data needed
    public override void Configure(IConfigurationBuilder configurationBuilder)
    {
        // AutomationEnvironment class allows retrieving global PowerShell
        // variables during service configuration.
        var environment =
            AutomationEnvironment.GetVariable<string>("AppEnvironment");

        var appSettings = new Dictionary<string, string>()
        {
            ["TestOptionsConfig:TestProperty"] = "This is an example",
            ["AppEnvironment"] = environment
        };

        configurationBuilder.AddInMemoryCollection(appSettings);
    }

    // Configure services/lifetimes
    public override void ConfigureServices(IServiceCollection services)
    {
        services.Configure<TestOptions>(Configuration.GetSection("TestOptionsConfig"));

        services.AddTransient<ITestDependencyOne, TestDependencyOne>();
        services.AddTransient<ITestDependencyTwo, TestDependencyTwo>();
        // ...
        // other services, client, etc.
    }
}

Add a PowerShell Command with Dependencies Injected

Synchronous process example

[Cmdlet(VerbsLifecycle.Submit, "Data")]
public class SubmitData : IoCShell<Startup>
{
    [Parameter(Mandatory = true)]
    public string Id { get; set; }

    [AutomationDependency]
    protected ITestDependencyOne TestDependencyOne { get; set; }

    [AutomationDependency]
    protected ITestDependencyTwo testDependencyTwo { get; set; }

    [AutomationDependency]
    private ILogger<RequestCard> logger { get; set; }

    protected override void ProcessRecord()
    {
        base.ProcessRecord();

        TestDependencyOne.PushTestId(Id);

        TestData testData = testDependencyTwo.GetTestData(Id);

        logger.LogInformation("Auto Generated Data: {Id} - {Name}", Id, testData.Name);

        WriteObject(testData);
    }
}

Asynchronous process example

[Cmdlet(VerbsLifecycle.Submit, "DataAsync")]
public class SubmitDataAsync : IoCShellAsync<Startup>
{
    [Parameter(Mandatory = true)]
    public string Id { get; set; }

    [AutomationDependency]
    protected ITestDependencyOne TestDependencyOne { get; set; }

    [AutomationDependency]
    protected ITestDependencyTwo testDependencyTwo { get; set; }

    [AutomationDependency]
    private ILogger<RequestCard> logger { get; set; }

    protected override async Task ProcessRecordAsync()
    {
        await TestDependencyOne.PushTestIdAsync(Id);

        TestData testData = await testDependencyTwo.GetTestDataAsync(Id);

        logger.LogInformation("Auto Generated Data: {Id} - {Name}", Id, testData.Name);

        WriteObject(testData);
    }
}

Execution

In PowerShell terminal run the following:

Import-Module <path-to-your-dll>/<your-assembly>.dll -V

You should see your custom commands listed in the verbose output (signaled by -v).

Now you are ready to run your own custom commands!

The following example is based on command name from above:

Submit-Data -id "ThisIsATestId"

See Project - launch.json for a sample on launching your module through VS Code

Resources

Package Description
AutomationIoC.PSCmdlets.Tools Tooling for running/testing C# PowerShell Cmdlets
AutomationIoC Framework Runtime for AutomationIoC Console Applications and PowerShell Cmdlets
AutomationIoC.Consoles Dependency Injection Framework for C# Console Applications
Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on AutomationIoC.PSCmdlets:

Package Downloads
AutomationIoC.PSCmdlets.Tools

Development tools for running/testing Cmdlets built with AutomationIoC framework

GitHub repositories

This package is not used by any popular GitHub repositories.