2012-09-26 61 views
1

我有一個模塊,我試圖導出一個函數/別名。我試圖導出的項目是一個腳本文件foo.ps1,它沒有聲明一個命名函數,但我想將它導出爲會話中可用的,因爲它可以調用foo。這是否支持?如果是這樣,我該如何配置Export-ModuleMember調用?使用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', '?')] 
    .... 

有沒有函數定義。而功能名稱是文件名。

回答

0

未經測試,但嘗試點源模塊psm1文件中的腳本和使用Export-ModuleMember來導出其功能。

+0

點採購的腳本執行它,我不想要的。 –

+0

如果腳本包含函數/別名,則不執行任何操作,則內​​容應導入模塊範圍。 –

+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 

這個工作,但遠非理想。

+0

我正要提出,這不是理想的,但它是我能想到的唯一原因。 –

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 
相關問題