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 に答える