C# 二进制 CmdLet this.MyInvocation.PSScriptRoot 为空

C# Binary CmdLet this.MyInvocation.PSScriptRoot is empty

我正在编写 C# cmdlet 以通过脚本以标准化方式安装和卸载各种产品。这包括一个在运行时创建和填充的日志文件(通过 NLog)。 PSScriptRoot 和 ScriptName 列在日志文件的 header 中,在其他步骤中也需要。

我以为我可以使用 this.MyInvocation,但不幸的是 object 总是空的。

这是一个例子:

namespace MyCmdlet
{
    [Cmdlet(VerbsData.Update, "Environment")]
    [OutputType(typeof(UpdateEnvironment))]
    public partial class UpdateEnvironment : PSCmdlet
    {
    # Some parameters

        protected override void ProcessRecord()
        {
            base.ProcessRecord();
            string currentTime   = DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss");
            string toReturn      = string.Empty;
            InvocationInfo iInfo = this.MyInvocation;

            // For testing
            var a = PSCmdlet.MyInvocation.PSScriptRoot;

            // Should be filled
            GlobalProps.psScriptRoot = this.MyInvocation.PSScriptRoot;
            GlobalProps.psScriptName = this.MyInvocation.ScriptName;
            ...
            ...
        }
    }
}

我该如何测试? -

其他测试...

...具有相同的效果。 MyInvocation.PSSCriptRoot、ScriptName、... 为空。我该如何使用它?

好的!我找到了解决办法!

InvocationInfo 处理正确。但只有 1 倍。现在我将信息保存在一个静态变量中,然后只使用它。