使用Export-ModuleMember将脚本导出为函数或别名

时间:2012-09-26 15:56:06

标签: powershell

我有一个模块,我试图导出一个函数/别名。我试图导出的项目是一个脚本文件foo.ps1,它没有声明一个命名函数,但我想将它导出为会话中可用的,因为它能够调用foo。这支持吗?如果是,如何配置Export-ModuleMember呼叫?

以下是文件顶部的摘录:

[CmdletBinding(DefaultParameterSetName='default')]
param(
  [Parameter(Position=0,Mandatory=$false,HelpMessage="You must specify which task to     execute.")]
  [ValidateSet('install','update', 'uninstall', 'outdated', 'init', 'help', '?')]
  ....

没有功能定义。而是函数名称是文件名。

3 个答案:

答案 0 :(得分:1)

我能够将脚本内容加载到ScriptBlock中并从中创建一个函数。

[string]$content = Get-Content $here\foo.ps1 -Delimiter ([Environment]::NewLine)
$block = [ScriptBlock]::Create($content)
Invoke-Expression "function foo { $block }"
Export-ModuleMember -function foo

这很有效,但远非理想。

答案 1 :(得分:0)

未经过测试,但尝试在模块psm1文件中点源脚本,并使用Export-ModuleMember导出其功能。

答案 2 :(得分:0)

试试这个

PS II> # UNTESTED
PS II> $excmd = gcm G:\inventory.ps1
PS II> set-item function:$($excmd.name.replace('.','_')) -val $excmd.scriptblock
PS II> inventory_ps1