web-dev-qa-db-ja.com

別のスクリプトでPowerShell関数を呼び出す

いくつかの関数(関数だけでなく他のコードも)を含むスクリプトがあります。メインスクリプトの関数の1つを使用する別のスクリプトを作成したいと思います。これが私がやろうとしていることのサンプルです。私のtest.ps1スクリプトでは:

function Test1 {Write-Host “This is test1”}
function Test2 {Write-Host “This is test2”}

Test1
Test2

そしてtesttest.ps1スクリプトの内部:

. ".\test.ps1"
Test1

test.ps1を実行すると、出力は次のようになります。

This is test1
This is test2

testtest.ps1を実行すると、出力は次のようになります。

This is test1
This is test2
This is test1

私がやりたいのは、私のtest.ps1スクリプトから私のtest.ps1スクリプトでTest1関数を呼び出すことだけです。私の条件の1つは、test.ps1スクリプトを変更せず(アクセス許可の問題、読み取りフォルダーアクセスと書き込みフォルダーアクセスのため)、スクリプトコードを複製したくないことです(これが私がコードを再利用しようとしています)。

必要なソリューションが見つかりません。PowerShellを使用したドットソーシングについて誰もが話します。それで、ドットソーシングはこれを行う適切な方法ですか、それとも別のPowerShellスクリプトの残りのコードを実行せずに(のみ)関数を使用する他の方法はありますか?

ありがとう

2
STGdb

私はこれを行う方法を考え出したので、他の誰かに役立つ場合に備えて投稿します。確かに、元のPSスクリプトを編集する必要がありましたが、加えられた変更はごくわずかであり、スクリプトの一次処理にはまったく影響しません。

test.ps1スクリプトの内容:

Param ([int]$Local)

function Test1 {Write-Host “This is test1”}
function Test2 {Write-Host “This is test2”}

If ($Local -eq 1) {Exit}

Test1
Test2

testtest.ps1スクリプトの内容:

. ".\test.ps1" -Local 1
Test1

test.ps1を実行すると、次のようになります。

This is test1
This is test2

しかし今(変更を加えて)、testtest.ps1を実行すると、次のようになります。

This is test1

このようにして、スクリプトはtest.ps1から関数をメモリにロードしましたが(使用できるように)、スクリプトの残りの部分は処理しません(終了するため)。これで、元のソーススクリプトの処理に影響を与えることなく、必要に応じてこのスクリプトにある関数を使用できます。

フィードバックをありがとうございました!!

2
STGdb