2016-02-16 4 views
0

Есть несколько проектов в моем решении, один из которых содержит класс = в основном C# модуль для использования с помощью 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 присутствует в столбце Name. Хотя в столбце ExportedCommands в той же строке ничего нет, может быть, проблема?

  4. Когда я пишу команду Add-User, я ожидаю, чтобы отобразить "тестовую строку", но я получаю эту ошибку:

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

ответ

1

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

public class AddUser : Cmdlet 
+0

Спасибо, человек. Я пытался найти ошибку весь день вчера ... это должна быть самая медленная ошибка, которую я когда-либо делал ... еще раз спасибо. – PaxForce

Смежные вопросы