2013-02-11 5 views
0

essentiellement le code est de msdn.microsoft.comMon cmdlet ne peut pas être enregistré

Après je construis le code, j'ouvre l'invite de commande et tapez: path% de InstallUtil de%/Mycmdlets.dll

Le résultat indique que la phase d'installation s'est terminée avec succès et que la phase de validation s'est terminée correctement. Toutefois, si j'y vais:

Get-PSSnapin -Registered, seuls les sqlServerCmdletSnapin sont affichés, mais ma cmdlet n'est pas là. ajouter le pssnapin ne fonctionne pas aussi.

using System; 
using System.Management.Automation; 
using System.Management.Automation.Runspaces; 
using System.ComponentModel; 

namespace Mycmdlets 
{ 

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

[RunInstaller(true)] 
public class GetProcPSSnapIn01 : PSSnapIn 
{ 
    /// <summary> 
    /// Create an instance of the GetProcPSSnapIn01 class. 
    /// </summary> 
    public GetProcPSSnapIn01() 
     : base() 
    { 
    } 

    /// <summary> 
    /// Specify the name of the PowerShell snap-in. 
    /// </summary> 
    public override string Name 
    { 
     get 
     { 
      return "GetProcPSSnapIn01"; 
     } 
    } 

    /// <summary> 
    /// Specify the vendor for the PowerShell snap-in. 
    /// </summary> 
    public override string Vendor 
    { 
     get 
     { 
      return "Microsoft"; 
     } 
    } 

    /// <summary> 
    /// Specify the localization resource information for the vendor. 
    /// Use the format: resourceBaseName,VendorName. 
    /// </summary> 
    public override string VendorResource 
    { 
     get 
     { 
      return "GetProcPSSnapIn01,Microsoft"; 
     } 
    } 

    /// <summary> 
    /// Specify a description of the PowerShell snap-in. 
    /// </summary> 
    public override string Description 
    { 
     get 
     { 
      return "This is a PowerShell snap-in that includes the get-proc cmdlet."; 
     } 
    } 

    /// <summary> 
    /// Specify the localization resource information for the description. 
    /// Use the format: resourceBaseName,Description. 
    /// </summary> 
    public override string DescriptionResource 
    { 
     get 
     { 
      return "GetProcPSSnapIn01,This is a PowerShell snap-in that includes the get-proc cmdlet."; 
     } 
    } 
} 
} 

EDIT:

pour tous ceux qui l'intérêt de connaître la solution, la cause est tout simplement le système ne prend pas en charge 64 bits. La solution est simplement dans la propriété du projet C#, faire de la cible de la plate-forme «n'importe quel processeur» au lieu de x86 ou x64.

En outre, le Get-PSSnapin n'affichera pas le message d'erreur mais indiquera qu'il fonctionne correctement si vous l'exécutez à partir de l'invite de commandes de Visual Studio; cependant l'exécuter sur l'invite de commande powershell vous montrera le message défaillant.

+0

juste curieux, avez-vous PS2.0? Si oui, vous devriez regarder dans le module binaire. ils sont beaucoup plus faciles à utiliser. –

+0

@Graimer mine est 3.0, mais je ne suis pas sûr de ce que le module binaire est .. – jamesdeath123

+0

Découvrez http://csharpening.net/?p=738 et http://csharpening.net/?p=853. Je ne pense pas qu'il y ait beaucoup de différence entre eux et snapins, mais ils ne nécessitent pas d'être installé/enregistré. :-) Vous pouvez simplement les importer comme 'Importer-Module mymodule' si vous mettez votre dossier de module dans l'un des endroits spécifiés dans' $ env: PSModulePath' –

Répondre

0

Par Nacht commentaire je colle la réponse sur:

pour tous ceux qui l'intérêt de connaître la solution, la cause est tout simplement le système ne prend pas en charge 64 bits. La solution est simplement dans la propriété du projet C#, faire de la cible de la plate-forme «n'importe quel processeur» au lieu de x86 ou x64.

En outre, le Get-PSSnapin n'affichera pas le message d'erreur mais indiquera qu'il fonctionne correctement si vous l'exécutez à partir de l'invite de commandes de Visual Studio; cependant l'exécuter sur l'invite de commande powershell vous montrera le message défaillant.

Questions connexes