ThomasE
ThomasE

Reputation: 409

PowerShell - Including .ps1 files - invoke from other folder

Im struggling with a PowerShell challenge, the setup is as follows:

In the C:\update folder I have ReInstall.ps1 powershell script, that will try to run a script in a folder on another drive:

q:\test\install.ps1

In the q:\test folder, I have a Powershell file callled Install.ps1 that tries to include another ps file called InstallFunctions.ps1

. .\installfunctions.ps1

The two Install ps files works nicely when executed from the q:\test\folder.

But if I try to run the ReInstall.ps1 script from the c:\Update folder, it nicely starts the q:\install.ps1, but then fails because it can't find the Installfunctions.ps1.

It tries to find the InstallFunctions.ps1 in the c:\update folder, instead of the q:\test folder.

The term '.\installfunctions.ps1' is not recognized as the name of a cmdlet, >function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path >is correct and try again.

Since the Install ps files are inside a ISO file, and must work in any scenario, I can't change them. So I have to figure out a way to make the Install.ps1 believe it runs from q:\test folder.

Upvotes: 1

Views: 560

Answers (1)

sodawillow
sodawillow

Reputation: 13176

You have to retrieve the script folder like this (PS 2.0):

$scriptPath = Split-Path $MyInvocation.MyCommand.Definition

. "$scriptPath\installfunctions.ps1"
#or . (Join-Path $scriptPath "installfunctions.ps1")

In PS 3.0 $PSScriptRoot holds the info you need:

. "$PSScriptRoot\installfunctions.ps1"
#or . (Join-Path $PSScriptRoot "installfunctions.ps1")

Upvotes: 1

Related Questions