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;
...
...
}
}
}
我该如何测试? -
在 Visual Studio → 项目 → 设置 → 调试,我启动一个外部程序(“C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe”)并在启动选项中添加以下参数:-noexit -command "&{ import-module .\MyCmdlets.dll -详细}"
启动后,我在当前打开的PowerShell控制台中填写一些变量进行测试
我终于调用了我的 cmdlet。
其他测试...
- PowerShell ISE → Import-Module → *...
- PowerShell 控制台 → Import-Module → ...
...具有相同的效果。 MyInvocation.PSSCriptRoot、ScriptName、... 为空。我该如何使用它?
好的!我找到了解决办法!
InvocationInfo 处理正确。但只有 1 倍。现在我将信息保存在一个静态变量中,然后只使用它。
我正在编写 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;
...
...
}
}
}
我该如何测试? -
在 Visual Studio → 项目 → 设置 → 调试,我启动一个外部程序(“C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe”)并在启动选项中添加以下参数:-noexit -command "&{ import-module .\MyCmdlets.dll -详细}"
启动后,我在当前打开的PowerShell控制台中填写一些变量进行测试
我终于调用了我的 cmdlet。
其他测试...
- PowerShell ISE → Import-Module → *...
- PowerShell 控制台 → Import-Module → ...
...具有相同的效果。 MyInvocation.PSSCriptRoot、ScriptName、... 为空。我该如何使用它?
好的!我找到了解决办法!
InvocationInfo 处理正确。但只有 1 倍。现在我将信息保存在一个静态变量中,然后只使用它。