Reputation: 409
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
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