2014-01-05 3 views
1

В настоящее время я пытаюсь создать свой первый PowerShell Snapin. Я следовал этому руководству: How to create a PowerShell Snapin, и все работает нормально, пока я не попытаюсь вызвать свой пользовательский командлет. Кроме того, я добавил «Post Build Event» для регистрации сборки.PowerShell Snapin Cmdlet CommandNotFoundException

"C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe" $(TargetPath) 

Затем я добавил и модуля управления работал как шарм:

Add-PSSnapin CustomSrv.Commands 

Путь к сборке для справки System.Automation:

C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0\System.Management.Automation.dll 

Как моей целевой платформы я выбрал x86, и я также выполняю все в x86 PowerShell. Платформа устанавливается на «Активный (Any CPU)»

Это мой Командлет код:

namespace CustomSrv.Commands 
{ 
    [Cmdlet(VerbsCommunications.Connect, "CustomSrv")] 
    public class TestCmdlet1 : Cmdlet 
    { 
     protected override void BeginProcessing() 
     { 
      WriteObject("BeginProcessing() method - Execution has begun"); 
     } 
     protected override void ProcessRecord() 
     { 
      WriteObject("ProcessRecord() method - Executing the main code"); 
     } 
     protected override void EndProcessing() 
     { 
      WriteObject("EndProcessing() method - Finalizing the execution"); 
     } 
    } 
} 

Это ошибка, я получаю, когда я пытаюсь вызвать команду:

PS C:\WINDOWS\system32> Connect-CustomSrv 
Connect-CustomSrv: The term 'Connect-CustomSrv' is not recognized as the name of a cmdlet, function, script file, or 
operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try 
again. 
At line:1 char:1 
+ Connect-CustomSrv 
+ ~~~~~~~~~~~~~~~ 
    + CategoryInfo   : ObjectNotFound: (Connect-CustomSrv:String) [], CommandNotFoundException 
    + FullyQualifiedErrorId : CommandNotFoundException 

Что я делаю неправильно, есть ли что-то неправильное в отношении платформы таргетинга (x86)?

+2

Вы должны знать, что оснастки устарели (и были с тех пор, как v2); вы должны создавать модули вместо этого. И да, вы [можете создавать двоичные модули] (http://csharpening.net/?p=738) – alroc

+0

Что такое версия powershell, которую вы используете? Сделайте $ PSVersionTable, чтобы убедиться. И какая версия .Net вы используете для своей сборки? И, как говорит алкрок. Snapins устарели, посмотрите модули. У вас могут быть чистые модули PowerShell, поэтому вам даже не нужна Visual Studio или не заботитесь о целевых объектах, а что нет. –

+0

Поскольку я намереваюсь использовать Snapin с Pash, который поддерживает Snapins, к сожалению, переход на модули не является для меня вариантом ... Я использую .NET Version 3.5 и PowerShell Version 4. –

ответ

1

Если вы выберете x86 как свою платформу, вам также необходимо убедиться, что вы используете версию PowerShell x86. См. here о том, как это сделать. Вероятно, вы используете версию powershell x64, которая по умолчанию. См. here.

Или измените цель на AnyCPU и зарегистрируйте snapin с помощью installutil дважды. Один раз с 32-битной версией, а также с 64-битной версией (C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ installutil.exe).

+0

Спасибо, он, наконец, работает. –

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