我想从我创建的二进制模块中导出别名。对于脚本模块,您可以使用
Export-ModuleMember
。是否有二进制模块的等价物?
我的清单(.psd1)看起来像这样:
@{
ModuleToProcess = 'MyModule.psm1'
NestedModules = 'MyModule.dll'
ModuleVersion = '1.0'
GUID = 'bb0ae680-5c5f-414c-961a-dce366144546'
Author = 'Me'
CompanyName = 'ACME'
Copyright = '© ACME'
}
编辑: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
那么,我在这里做错了什么?
答案 0 :(得分:2)
执行此操作的典型方法是将.PSM1设置为ModuleToProcess,并将Set-Alias / Export-ModuleMember -Alias *放在该PSM1文件中。然后将您的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',
...
)
}
答案 1 :(得分:1)
问题2:我混淆了函数和Cmdlet。我需要指定Export-ModuleMember -Cmdlet Get-TestCommand
,而不是Export-ModuleMember -Function Get-TestCommand
。这解释了为什么每次取消注释Export-ModuleMember
行时,我的ExportedCommand都会消失。 Keith Hill与PSCE文件的链接帮助我发现了这一点。
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 *
我将给予基思的答案。只是因为他的努力使我能够实现这一目标