2016-07-01 2 views
0

Использование Cmdlet, (и/или PSCmdlet), я могу создатьДать класс Powershell отозваны в PowerShell

[Cmdlet(VerbsCommunications.Read, "Blah", SupportsShouldProcess = true)] 
public class BlahBlah : PSCmdlet 
{ 
    /// ... 
} 

Тогда, в PowerShell, я могу затем вызвать команду

import-module .\Blah.dll -Verbose 
Read-Blah 
... 

И все, Это хорошо.

Но я хотел бы создать класс, а не функции таким образом я могу получить объект, а затем использовать его в PowerShell

Что-то вроде

import-module .\Blah.dll -Verbose 
$myClass = New-Object Blah 
$myClass.Read 
$myClass.Save -File x.txt 
$myClass.BlahBlah 
... 

Может выше быть сделано в C#? Если да, то как?

ответ

1

Если вы хотите импортировать класс из сборки .NET, вам нужно использовать Add-Type, а не Import-Module:

Add-Type -Path .\Blah.dll 

На данный момент, все общественные классы, определенные в сборке будут доступны с помощью PowerShell ,

+0

Хорошо, спасибо, но как создать сам класс? В примере, который я дал, создается только функция, а не класс. –

+0

@SimonGoodman: Я не уверен, что понимаю, что вы просите ... когда вы говорите о «функции», вы имеете в виду ваш класс «BlahBlah» CmdLet, правильно? Если вы хотите создать класс в C#, вам просто нужно объявить открытый класс, который не наследуется от CmdLet. Отвечает ли это на ваш вопрос? –

+0

Я имею в виду, когда я создаю функцию '' [Cmdlet (VerbsCommunications.Read, «Blah» ... »« Тогда я смогу использовать ее в powershell как «Read-Blah'», но теперь я хотел бы класс, который будет доступен, как в '' myClass = New-Object Blah'', или вы говорите, что он будет доступен для powershell до тех пор, пока он является общедоступным? –