Ответ 1
Это становится намного проще с .NET Core 2.0 SDK
и Visual Studio 2017 Update 15.3
(или выше). Если у вас нет VS, вы можете сделать это из командной строки с помощью .NET Core 2.0 SDK.
Важным битом является добавление пакета PowerShellStandard.Library 3.0.0-preview-01
(или выше) NuGet в файл проекта (.csproj).
Вот пример простой командной строки:
cd $home
dotnet new classlib --name psmodule
cd .\psmodule
dotnet add package PowerShellStandard.Library --version 3.0.0-preview-01
Remove-Item .\Class1.cs
@'
using System.Management.Automation;
namespace PSCmdletExample
{
[Cmdlet("Get", "Foo")]
public class GetFooCommand : PSCmdlet
{
[Parameter]
public string Name { get; set; } = string.Empty;
protected override void EndProcessing()
{
this.WriteObject("Foo is " + this.Name);
base.EndProcessing();
}
}
}
'@ | Out-File GetFooCommand.cs -Encoding UTF8
dotnet build
cd .\bin\Debug\netstandard2.0\
ipmo .\psmodule.dll
get-foo
Для получения этой же команды для запуска в Windows PowerShell 5.1 требуется немного больше работы. Перед тем, как команда будет работать, вам необходимо выполнить следующее:
Add-Type -Path "C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.netcore.app\2.0.0\ref\netcoreapp2.0\netstandard.dll"