いくつかの関数(関数だけでなく他のコードも)を含むスクリプトがあります。メインスクリプトの関数の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スクリプトの残りのコードを実行せずに(のみ)関数を使用する他の方法はありますか?
ありがとう
私はこれを行う方法を考え出したので、他の誰かに役立つ場合に備えて投稿します。確かに、元の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から関数をメモリにロードしましたが(使用できるように)、スクリプトの残りの部分は処理しません(終了するため)。これで、元のソーススクリプトの処理に影響を与えることなく、必要に応じてこのスクリプトにある関数を使用できます。
フィードバックをありがとうございました!!