2016-02-16 1 views
0

Il y a projet multiple dans ma solution, l'une qui contient une classe = essentiellement un module C# pour être utilisé via la console d'alimentation Shell:importé C# cmdlet ne fonctionne pas

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); 
    // } 
    //} 
    } 
} 

Ce que je l'ai fait:

  1. construit la solution et copier le chemin du AddUser.dll

  2. a ouvert la console PS en tant qu'administrateur

  3. importé avec succès le AddUser.dll -> lorsque je le vérifie via la commande Get-Module, AddUser est présent dans la colonne Nom. Bien qu'il n'y ait rien dans la colonne ExportedCommands dans la même ligne ... cela pourrait-il être le problème?

  4. Quand j'écris la commande Add-utilisateur, je me attends à afficher la "chaîne de test", mais je reçois cette erreur:

Add-utilisateur: Le terme 'Add-User' est pas reconnu comme le nom d'une cmdlet, d'une fonction, d'un fichier de script ou d'un programme utilisable. Vérifiez l'orthographe du nom, ou, si un chemin a été inclus, vérifiez que le chemin est correct et réessayez. À la ligne: 1 Caractère: 1 + Ajouter utilisateur + ~~~~~~~~ + CategoryInfo: ObjectNotFound: (Add-utilisateur: String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException

Répondre

1

classe L'implémentation de la cmdlet doit être public ou elle ne sera pas exportée en tant que commande. Comme vous n'utilisez aucun modificateur d'accès explicite, votre classe AddUser est internal. Vous devriez le faire public:

public class AddUser : Cmdlet 
+0

Merci, l'homme. J'essayais de trouver le bogue toute la journée d'hier ... ça doit être l'erreur la plus stupide et la plus stupide que j'ai jamais faite ... merci encore. – PaxForce