代码之家  ›  专栏  ›  技术社区  ›  Rno

如何将自定义类型作为参数传递给编译的cmdlet?

  •  0
  • Rno  · 技术社区  · 4 年前

    我将用一个例子来详细说明,这样您就可以了解我的设置了,从 Tuples .

    C位:

    [Cmdlet(VerbsCommon.Get, "FooValues")]
    public class GetFooValues : PSCmdlet
    {
        private IEnumerable<Tuple<string, string, string>> relatedColumns;
        [Parameter(Position = 0)]
        public IEnumerable<Tuple<string, string, string>> RelatedColumns
        {
            get { return relatedColumns; }
            set { relatedColumns = value; }
        }
        
        protected override void ProcessRecord()
        {
            var retval = Helper.GetValues(relatedColumns);
            WriteObject(retval, false)
        }
    }
        
    

    在哪里? Helper MyDll :

    static class Helper
    {
        List<List<string>> GetValues(IEnumerable<Tuple<string, string, string> cols)
        {
            using (var x = new MyDll.Foo())
            {
                foreach (var c in cols)
                {
                    x.DoSomething(c.Item1, c.Item2, c.Item3)
                }
                return x.GetSomething();
            }
        }
    }
        
    

    这可以工作,我可以创造 多元组 把它们传给 Get-FooValues Tuple 很重要,所以我想改为使用自定义类型并使用适当的属性值传递给

    假设 RelatedColumn 类型:

    class RelatedColumn
    {
    public string Connection { get; set; }
    public string ToCategory { get; set; }
    public string Name { get; set; }
    }
    

    private IEnumerable<RelatedColumn> relatedColumns;
    [Parameter(Position = 0)]
    public IEnumerable<RelatedColumn> RelatedColumns
    {
        get { return relatedColumns; }
        set { relatedColumns = value; }
    }
    

    这就是我开始有问题的地方。我如何让Powershell意识到 是否需要?我怎么知道它是什么样子的呢?我需要在Powershell中重新创建类型it吗?

    0 回复  |  直到 4 年前
        1
  •  0
  •   Konrad Botor    4 年前

    只需将元组替换为自定义类。只要它与Cmdlet在同一个DLL文件中,它就可以正常工作,因为PowerShell允许从任何加载的二进制模块创建任何类。

    本文详细介绍从模块导入自定义类: https://info.sapien.com/index.php/scripting/scripting-classes/import-powershell-classes-from-modules