1. ホーム
  2. powershell

[解決済み] Powershell ISE 内の別の PS1 スクリプトから PowerShell スクリプト PS1 を呼び出す

2022-03-01 15:55:48

質問

Powershell ISE内の2番目のmyScript2.ps1スクリプト内でmyScript1.ps1スクリプトの実行を呼び出したいです。

MyScript2.ps1内の次のコードは、Powershell Administrationからは正常に動作しますが、PowerShell ISE内では動作しません。

#Call myScript1 from myScript2
invoke-expression -Command .\myScript1.ps1

PowerShell ISE から MyScript2.ps1 を実行すると、以下のエラーが発生します。

「.myScript1.ps1」という用語は、コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれている場合はパスが正しいかどうかを確認して、もう一度やり直してください。

解決方法は?

スクリプトの場所を探すには Split-Path $MyInvocation.MyCommand.Path (必ずスクリプトコンテキストで使用してください)。

他のものでなく、それを使うべき理由は、このスクリプトの例で説明できます。

## ScriptTest.ps1
Write-Host "InvocationName:" $MyInvocation.InvocationName
Write-Host "Path:" $MyInvocation.MyCommand.Path

以下はその結果です。

PS C:\UsersJasonAr> .\ScriptTest.ps1
起動名:. \ScriptTest.ps1
パス C:\UsersJasonArttpd.ps1

PS C:\UsersJasonAr> . .\ScriptTest.ps1
起動名:.
パス C:\UsersJasonArttpd.ps1

PS C:\UsersJasonAr> & ".\ScriptTest.ps1"
InvocationName: &
Path: C:\UsersJasonAr

ScriptTest.ps1

PowerShell 3.0 という自動変数を使用することができます。 $PSScriptRoot :

## ScriptTest.ps1
Write-Host "Script:" $PSCommandPath
Write-Host "Path:" $PSScriptRoot

PS C:\Usersjarcher> .\ScriptTest.ps1
スクリプトです。C:\Usersjarcher

ScriptTest.ps1 パス C:\Usersjarcher