1

我有一个模块,我试图在其中导出函数/别名。我要导出的项目是一个脚本文件 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', '?')]
  ....

没有函数定义。相反,函数名是文件名。

4

3 回答 3

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

这可行,但远非理想。

于 2012-09-26T18:15:44.333 回答
0

未经测试,但尝试对模块 psm1 文件中的脚本进行点源处理,并Export-ModuleMember用于导出其函数。

于 2012-09-26T17:03:59.610 回答
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
于 2012-09-27T04:31:42.780 回答