импортированный командлет С# не работает

В моем решении есть несколько проектов, один из которых содержит класс = в основном модуль С#, который будет использоваться через консоль Power Shell:

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. открыл консоль PS от имени администратора

  3. успешно импортировал AddUser.dll -> когда я проверяю его с помощью команды Get-Module, AddUser присутствует в столбце «Имя». Хотя в столбце ExportedCommands в той же строке ничего нет... может быть проблема в этом?

  4. Когда я пишу команду «Добавить пользователя», я ожидаю отобразить «тестовую строку», но получаю эту ошибку:

Add-User : термин «Add-User» не распознается как имя командлета, функции, файла сценария или исполняемой программы. Проверьте правильность написания имени или, если был указан путь, убедитесь, что путь указан правильно, и повторите попытку. В строке: 1 символ: 1 + Add-User + ~~~~~~~~ + CategoryInfo : ObjectNotFound: (Add-User:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException


person PaxForce    schedule 16.02.2016    source источник


Ответы (1)


Класс, реализующий командлет, должен быть public, иначе он не будет экспортирован как команда. Поскольку вы не используете явный модификатор доступа, ваш класс AddUser равен internal. Вы должны сделать это public:

public class AddUser : Cmdlet
person user4003407    schedule 16.02.2016
comment
Спасибо чувак. Я пытался найти ошибку весь вчерашний день... это должно быть самая глупая, самая глупая ошибка, которую я когда-либо совершал... еще раз спасибо. - person PaxForce; 17.02.2016