导入的 c# cmdlet 不工作

imported c# cmdlet not working

我的解决方案中有多个项目,其中一个包含一个 class = 基本上是一个通过 Power Shell 控制台使用的 C# 模块:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Management.Automation;
using System.Management;
using EDZ.DAL;
using EDZ.Model;
using System.Collections;

namespace AddUser
{
  [Cmdlet(VerbsCommon.Add, "User")]
  class AddUser : Cmdlet
  {
    protected override void ProcessRecord()
    {
      WriteObject("test string");
    }
    //public AddUser(IRepository<IEntity> irepo)
    //{
    //  repoUser = (RepositoryBase<User>)irepo;
    //}
    //RepositoryBase<User> repoUser;

    //RepositoryBase<User> repoUser = new RepositoryBase<User>();

    //[Parameter(Mandatory = false, Position = 1)]
    //public Guid UserID { get; set; }

    //[Parameter(Mandatory = false, Position = 2)]
    //public string FirstName { get; set; }

    //[Parameter(Mandatory = false, Position = 3)]
    //public string LastName { get; set; }

    //[Parameter(Mandatory = false, Position = 4)]
    //public string Title { get; set; }

    //[Parameter(Mandatory = false, Position = 5)]
    //public string Email { get; set; }

    //[Parameter(Mandatory = false, Position = 6)]
    //public Guid ExpertId { get; set; }

    //[Parameter(Mandatory = false, Position = 7)]
    //public Guid IdentityId { get; set; }
    //protected override void ProcessRecord()
    //{
    //  //try {
    //    User user = new User() { FirstName = this.FirstName, LastName = this.LastName, Title = this.Title, Email = this.Email, ExpertId = this.ExpertId, IdentityId = this.IdentityId };

    //    repoUser.Add(UserID, user);
    //  //}
    //  //catch(Exception ex)
    //  //{
    //  //  WriteObject("something's wrong: " + ex.Message);
    //  //}
    //  IEnumerable tempList = repoUser.GetAll();
    //  foreach(User u in tempList)
    //  {
    //    WriteObject(u);
    //  }
    //}
  }
}

我做了什么:

  1. 构建解决方案并复制 AddUser.dll

  2. 的路径
  3. 以管理员身份打开了 PS 控制台

  4. 已成功导入 AddUser.dll -> 当我通过 Get-Module 命令检查它时,AddUser 出现在名称列中。虽然,同一行的 ExportedCommands 列中没有任何内容...这可能是问题所在吗?

  5. 当我写 Add-User 命令时,我希望显示 "test string",但我得到这个错误:

Add-User:术语 'Add-User' 未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名字的拼写, 或者如果包含路径,请验证路径是否正确并重试。 在 line:1 char:1 + 添加用户 + ~~~~~~~~ + CategoryInfo:ObjectNotFound:(添加用户:字符串)[],CommandNotFoundException + FullyQualifiedErrorId:CommandNotFoundException

Class 执行 cmdlet 应该是 public 否则它不会作为命令导出。由于您不使用任何显式访问修饰符,因此您的 AddUser class 是 internal。你应该做到 public:

public class AddUser : Cmdlet