2016-10-06 22 views
12

İkili bir Cmdlet iç yapısına sahip temel bir PowerShell Modülü oluşturmaya çalışıyorum, PowerShell'de yazı yazmak, C# 'de olduğu kadar uygun görünmüyor..NET Core ile PowerShell ikili cmdlet'i yazabilir miyim?

this kılavuz ardından, görünüşe mecbur gibi:

  • hedefleyen, RootModule ile, gerekli olan benim cmdlet sınıfı
  • bildirim dosyasını yazma niteliklerini benim project.json
  • işaretine Microsoft.PowerShell.SDK eklemek benim .dll
  • adresinin tamamını ekleyin Ben Import-Module çalışıyorum PSModulePath

ama, altında PowerShell çekirdek eksik çalışma zamanı üzerinde yakınır:

Import-Module : Could not load file or assembly 'System.Runtime, Version=4.1.0.0, 
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system 
cannot find the file specified. 
At line:1 char:1 

ben yanlış mı yapıyorum, ya da bu tür hileli işler henüz yanı desteklenmez?

+0

Projenizi paylaşabilir misiniz? – Ben

+0

Bunun yardımcı olup olmadığını görün! http://stackoverflow.com/q/38310518/5212566 http://stackoverflow.com/a/37639003/5212566 –

+0

Üzgünüz, bu şimdilik şu an için mevcut değil – brutallord

cevap

0

.NET Core'da bir PowerShell CmdLet yazmak için PowerShell Core kullanmanız gerekir. Bir rehber için düzeltmeler de dahil olmak üzere burada bulunmaktadır

senin project.json: https://github.com/PowerShell/PowerShell/tree/master/docs/cmdlet-example

Eğer project.json

"dependencies": { 
     "Microsoft.PowerShell.5.ReferenceAssemblies": "1.0.0-*" 
    }, 

    "frameworks": { 
     "netstandard1.3": { 
      "imports": [ "net40" ], 
      "dependencies": { 
       "Microsoft.NETCore": "5.0.1-*", 
       "Microsoft.NETCore.Portable.Compatibility": "1.0.1-*" 
      } 
     } 
    } 
4

aşağıdaki ihtiyaç Özetlemek gerekirse bu .NET Core 2.0 SDK ve Visual Studio 2017 Update 15.3 (veya üstü ile çok daha kolay olur). VS'niz yoksa, bunu .NET Core 2.0 SDK ile komut satırından yapabilirsiniz.

Önemli bit, proje dosyanıza (.csproj) PowerShellStandard.Library 3.0.0-preview-01 (veya daha yüksek) NuGet paketini eklemektir.

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 çalıştırmak için bu aynı komutu almak için biraz daha fazla çalışma gerektirir:

Burada basit bir komut satırı örneğidir. Komut çalışmaya başlamadan önce aşağıdakileri yürütmelisiniz:

Add-Type -Path "C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.netcore.app\2.0.0\ref\netcoreapp2.0\netstandard.dll" 
+0

Add-Type bölümü, .NET Standard lib'in PowerShell'e yüklenmesine yardımcı oldu, teşekkürler çok! –

İlgili konular