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

Powershell 使用Export ModuleMember将脚本导出为函数或别名,powershell,Powershell,我有一个模块,试图在其中导出函数/别名。我试图导出的项是一个脚本文件foo.ps1,它没有声明命名函数,但我希望将其导出为会话中可用的,以便能够调用foo。这是否得到支持?如果是,如何配置导出模块成员调用 以下是文件最顶端的一个片段: [CmdletBinding(DefaultParameterSetName='default')] param( [Parameter(Position=0,Mandatory=$false,HelpMessage="You must specify whi

我有一个模块,试图在其中导出函数/别名。我试图导出的项是一个脚本文件foo.ps1,它没有声明命名函数,但我希望将其导出为会话中可用的,以便能够调用foo。这是否得到支持?如果是,如何配置导出模块成员调用

以下是文件最顶端的一个片段:

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

没有函数定义。函数名是文件名。

未测试,但尝试点源模块psm1文件中的脚本,并使用
导出模块成员
导出其函数。

未测试,但尝试点源模块psm1文件中的脚本,并使用
导出模块成员
导出其函数.

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

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

这是可行的,但还远远不够理想。

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

[string]$content = Get-Content $here\foo.ps1 -Delimiter ([Environment]::NewLine)
$block = [ScriptBlock]::Create($content)
Invoke-Expression "function foo { $block }"
Export-ModuleMember -function foo
这是可行的,但还远远不够理想。

试试这个

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
试试这个

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

dot-sourcing脚本执行我不想要的操作。如果脚本包含函数/别名,则不执行任何操作,内容应导入模块作用域。dot-sourcing脚本执行我不想要的操作。如果脚本包含函数/别名,则不执行任何操作,内容应导入模块作用域。我正要建议,这并不理想,但这是我能想到的唯一原因。我正要建议,这并不理想,但这是我能想到的唯一原因。