7

PowerShell プロンプトから対話的に使用したいスクリプトがあります。スクリプトは、ローカル スクリプト モジュールを使用する必要があります。

現在のセッションにロードされたままにならないように、モジュールをインポート/使用する方法がわかりません。

モジュール (MyModule.psm1)...

function Test-Method
{
    write-host "Test-Method invoked"
}

... とスクリプト (script.ps1)

Import-Module .\MyModule
Test-Method

PowerShellプロンプトでスクリプトを実行しています...

PS C:\temp> Get-Module | % {$_.Name}
Microsoft.PowerShell.Management
Microsoft.PowerShell.Utility

PS C:\temp> .\script.ps1
Test-Method invoked

PS C:\temp> Get-Module | % {$_.Name}
Microsoft.PowerShell.Management
Microsoft.PowerShell.Utility
MyModule

MyModule.psm1 を呼び出し元の現在のセッションにロードしたままにせずに、スクリプトで MyModule.psm1 をインポートして使用するにはどうすればよいですか? 呼び出しによってモジュールが既にインポートされている可能性があり、スクリプトによってアンロードされたくない場合があることに注意してください (したがって、スクリプトの完了時にモジュールを単に削除するだけでは十分ではありません)。

モジュールをインポートするのではなくドットソーシングすることを検討しましたが、PowerShell Import-Module vs Dot Sourcingで説明されている理由でモジュールが必要です

4

4 に答える 4

8

あなたが望むものを疑似コードですでに説明しているようです。実際のコードは次のとおりです。

$checkCmds = Get-Commands -Module MyModule

Import-Module MyModule

# Do stuff here . . .

# unload only if we loaded it
if ($checkCmds -eq $null) { Remove-Module MyModule }
于 2013-10-02T02:56:35.463 に答える
-1

モジュールをインポートして、モジュール-Scope localをスクリプトのスコープに制限できます。モジュールがたまたまグローバル スコープにも読み込まれている場合は、スクリプトの終了後も引き続き使用できます。

于 2013-10-04T06:23:20.027 に答える