gpt4 book ai didi

c# - 托管的 PowerShell 在同一程序集中看不到 Cmdlet

转载 作者:太空狗 更新时间:2023-10-29 17:40:45 25 4
gpt4 key购买 nike

我正在尝试从我的 C# 代码运行 PowerShell 脚本,这将使用运行它们的程序集中的自定义 Cmdlet。这是代码:

using System;
using System.Management.Automation;

[Cmdlet(VerbsCommon.Get,"Hello")]
public class GetHelloCommand:Cmdlet
{
protected override void EndProcessing()
{
WriteObject("Hello",true);
}
}

class MainClass
{
public static void Main(string[] args)
{
PowerShell powerShell=PowerShell.Create();
powerShell.AddCommand("Get-Hello");
foreach(string str in powerShell.AddCommand("Out-String").Invoke<string>())
Console.WriteLine(str);
}
}

当我尝试运行它时,我收到 CommandNotFoundException。我的 Cmdlet 写错了吗?我需要做些什么才能在 PowerShell 或运行空间中注册我的 Cmdlet 吗?

最佳答案

使用您当前的代码片段执行此操作的最简单方法如下:

using System; 
using System.Management.Automation;

[Cmdlet(VerbsCommon.Get,"Hello")]
public class GetHelloCommand:Cmdlet
{
protected override void EndProcessing()
{
WriteObject("Hello",true);
}
}

class MainClass
{
public static void Main(string[] args)
{
PowerShell powerShell=PowerShell.Create();

// import commands from the current executing assembly
powershell.AddCommand("Import-Module")
.AddParameter("Assembly",
System.Reflection.Assembly.GetExecutingAssembly())
powershell.Invoke()
powershell.Commands.Clear()

powershell.AddCommand("Get-Hello");
foreach(string str in powerShell.AddCommand("Out-String").Invoke<string>())
Console.WriteLine(str);
}
}

这假定 PowerShell v2.0(您可以使用 $psversiontable 或版权日期检查您的控制台,版权日期应该是 2009 年。)如果您使用的是 win7,则您使用的是 v2。

关于c# - 托管的 PowerShell 在同一程序集中看不到 Cmdlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7560728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com