Windows Dev. Site

PowerShell C# Cmdlet

ひさしぶりのPowerShellのネタです。
PowerShellを使っていて、ふとコマンドレットって、自分でどうやって作るの? と思い、作ってみました。
いきなりですがテスト結果です。
PowerShell01
このようにヘッダがあり、検索ができる形のオブジェクトを出力したかったのですが、調べてみるといろんなやり方がありそうです。結果、anonymous typeを使って実現する方法が簡単で自分の求めていた形になりました。

using System;
using System.Collections.Generic;
using System.Management.Automation;

namespace SumTest
{
    [Cmdlet(VerbsCommon.Get, "Sum")]
    public class Get_DemoNames: PSCmdlet
    {
        protected override void ProcessRecord()
        {
            List<object> list = new List<object>();

            int sum = 0;
            for(int i=10 ; i<16;i++){
                sum += i;
                var data = new {Sum = sum,  Num = "No" + i, Name = "Name" + i};

                list.Add(data);
            }

            this.WriteObject(list, true);
        }
    }
}

パッケージのインストールが必要です。

PM> Install-Package System.Management.Automation

環境 : VisualStudio 2010 / Windows 7

プロジェクトは、アプリケーションではなく、クラスライブラリのようです。