Другой альтернативой является создание полноценного модуля PowerShell.Вот быстрый способ сделать это:
- Создать новое решение для библиотеки классов
- NuGet в
Microsoft.PowerShell.5.ReferenceAssemblies
- Создать простой класс POCO (просто как демонстрационный пример)) нравится:
Мой класс приветствия:
public class GreetingClass
{
public string Greeting { get; set; }
public string ToWhom { get; set; }
}
Затем создайте класс Cmdlet, который наследуется от
System.Management.Automation.Cmdlet
и поставляется с несколькими атрибутами PowerShell:
Вот мой:
[Cmdlet(VerbsCommon.New, "Greeting")]
[OutputType(typeof(GreetingClass))]
public class NewGreeting : Cmdlet
{
[Parameter(Mandatory = true)]
public string Greeting { get; set; }
[Parameter]
[Alias("Who")]
public string ToWhom { get; set; } = "World";
protected override void ProcessRecord()
{
base.ProcessRecord();
WriteVerbose("Creating and returning the Greeting Object");
var greeting = new GreetingClass {Greeting = Greeting, ToWhom = ToWhom};
WriteObject(greeting);
}
}
Чтобы его отладить, откройте вкладку
Debug
свойства проекта и установите:
- Запустить внешнюю программу:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
- Аргументы командной строки:
-noprofile -noexit -command "import-module .\yourProjectName.dll
Теперь нажмите F5
.Появится консоль PowerShell.Поскольку вы импортировали свой модуль, командлет New-Greeting
загружен.Так что все это работает:
PS C:\> New-Greeting -Greeting "hello there" -ToWhom World
, что приводит к:
Greeting ToWhom
-------- ------
hello there World
Но ваш командлет является полноценным командлетом PowerShell, поэтому он может попасть в конвейер.Это:
PS C:\> New-Greeting -Greeting "What's new" -ToWhom Pussycat | Format-List
В результате:
Greeting : What's new
ToWhom : Pussycat
Поскольку вы запускаете сеанс PowerShell, когда нажимаете F5
и загружаете свой модуль, вы можете установить точки останова в своем коде,пошаговый и т. д. в отладчике.
Вы получаете все обычные преимущества PowerShell.Вы можете использовать -Who
в качестве псевдонима для -ToWhom
.Параметр -Greeting
описывается как обязательный, поэтому, если вы забудете его, консоль предложит вам.
Вы также можете предоставить методы для вашего класса POCO.Например, если вы добавите этот метод к GreetingClass
:
public void SayHello()
{
Console.WriteLine($"{Greeting} {ToWhom}");
}
Вы можете сделать это в PowerShell:
PS C:\> $greet = New-Greeting -Greeting Hello -Who World
PS C:\> $greet.SayHello()
и получить в результате:
Hello World
Я многому научился из этого: https://www.red -gate.com / simple-talk / dotnet / net-development / using-c-to-create-powershell-cmdlets-the-basics /
Вы автоматически получаете базовую Get-Help
помощь из PowerShell, но если вы будете следовать демонстрациям Red-Gate (по ссылке выше), вы узнаете, как получить помощь Get-Help
из стандартного C # XML Comments (из пакета XmlDoc2CmdletDoc
NuGet).