如何从不从`Cmdlet`继承的类中`WriteVerbose` /`WriteDebug` / ...

时间:2018-09-26 02:40:09

标签: c# powershell

我正在尝试为PowerShell编写一个二进制模块。但是我有一个问题,因为我想将常用功能导出到一个辅助方法中:

class Foo {
    Bar DoBaz() {
        if (bazzed) {
            WriteWarning(this.ToString() + " already bazzed");
            return baz;
        }
        // ...
    }
}

这当然不起作用,因为WriteVerboseCmdlet的一种方法。我可以将其作为lambda传递,但这似乎是一种非常round回的方式。

1 个答案:

答案 0 :(得分:2)

您必须将Cmdlet(或更常见的是PSCmdlet)实例传递给helper方法。这是一个例子

using System.Management.Automation;

[Cmdlet(VerbsDiagnostic.Test, "Cmdlet")]
public class TestCmdletCommand : PSCmdlet
{
    protected override void ProcessRecord()
    {
        HelperMethods.WriteFromHelper(this, "message");
    }
}

public static class HelperMethods
{
    public static void WriteFromHelper(PSCmdlet cmdlet, string message)
    {
        cmdlet.WriteVerbose(message);
    }
}