2

作成したバイナリ モジュールからエイリアスをエクスポートしたいと考えています。スクリプト モジュールの場合は、 Export-ModuleMember. バイナリモジュールに相当するものはありますか?

私のマニフェスト (.psd1) は次のようになります。

@{
    ModuleToProcess = 'MyModule.psm1'
    NestedModules = 'MyModule.dll'
    ModuleVersion = '1.0'
    GUID = 'bb0ae680-5c5f-414c-961a-dce366144546'
    Author = 'Me'
    CompanyName = 'ACME'
    Copyright = '© ACME'
} 

EDIT : Keith Hillはいくつかの助けを提供しましたが、それでも役に立ちませんでした。関連するすべてのファイルは次のとおりです

私のモジュール スクリプト (.psm1):

export-modulemember -function Get-TestCommand -alias gtc

最後に、DLL のコード:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Management.Automation;
using System.Text;
using System.Threading.Tasks;

namespace MyModule
{
    [Cmdlet(VerbsCommon.Get, "TestCommand")]
    [OutputType(typeof(string))]
    public class GetTestCommand : PSCmdlet
    {
        protected override void ProcessRecord()
        {
            WriteObject("One");
            WriteObject("Two");
            WriteObject("Three");
        }
    }
}

これを持って PowerShell を起動しimport-module MyModule、最後に を実行するget-moduleと、次のようになります。

ModuleType Name                      ExportedCommands
---------- ----                      ----------------
Script     MyModule                  {}

psm1 ファイルのビットをコメント アウトしexport-modulememberて上記の手順を繰り返すと、次のようになります。

ModuleType Name                      ExportedCommands
---------- ----                      ----------------
Script     MyModule                  Get-TestCommand

それで、私はここで何が間違っていますか?

4

2 に答える 2

2

これを行う一般的な方法は、.PSM1 を ModuleToProcess にして、その PSM1 ファイルに Set-Alias / Export-ModuleMember -Alias * を配置することです。次に、DLL 参照を PSD1 の NestedModules メンバーに入れます。

@{
    ModuleToProcess = 'MyModule.psm1'
    NestedModules   = 'MyModule.dll'
    ModuleVersion = '1.0'
    GUID = 'bb0ae680-5c5f-414c-961a-dce366144546'
    Author = 'Me'
    CompanyName = 'ACME'
    Copyright = '© ACME'
    FormatsToProcess = 'MyModule.format.ps1xml'
    AliasesToExport = '*'
    CmdletsToExport = @(
        'Get-Foo',
        'Set-Foo',
        ...
    )
} 
于 2013-01-08T16:08:42.623 に答える
1

わかりました、私は今それを働かせました。私が犯したいくつかの間違いがあり、そのすべてが問題の原因であることがわかりました。

  • 問題 1: PowerShell について、思ったほどよく理解できていません。
  • 問題 2: 関数とコマンドレットを混同していました。Export-ModuleMember -Cmdlet Get-TestCommandではなくを指定する必要がありましExport-ModuleMember -Function Get-TestCommandた。これは、行のコメントを外すたびに ExportedCommand が消えた理由を説明していExport-ModuleMemberます。PSCE ファイルへの Keith Hill のリンクは、私がそれを発見するのに役立ちました。

    Functionality in a DLL = -Cmdlet
    Functionality in .psm1 = -Function
    
  • 問題 3: エイリアスを定義していない場合、エイリアスをエクスポートしても役に立ちません。最初にエイリアスを設定しSet-Alias、次にエクスポートする必要がありますExport-Module。これは私の愚かな間違いでした

したがって、最終的に、.psm1ファイルを以下に示すものに変更すると、問題が修正されました

Set-Alias gtc Get-TestCommand
Export-ModuleMember -Alias * -Function * -Cmdlet *

答えはキースの功績だと思います。私がこれをやり遂げることができたのは、彼の努力のおかげです

于 2013-01-09T04:18:55.110 に答える