src/cmdlet/Import-Script.ps1
# Copyright 2019, Adam Edwards # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. function Import-Script { [cmdletbinding()] param ( [parameter(mandatory=$true)] $Path, $Parent = $null, [switch] $AnyExtension ) $root = if ( $Parent -eq $null ) { CallerScriptRoot } else { $Parent } $erroractionpreference = 'stop' ValidateIncludePath($Path) $extension = if ( ! $AnyExtension.IsPresent ) { '.ps1' } else { '' } $relativePath = "$($Path)$extension" $relativeNormal = $relativePath.ToLower() $fullPath = (join-path ($root) $relativePath | get-item).Fullname $canonical = $fullPath.ToLower() if ( $included[$canonical] -eq $null ) { $included[$canonical] = @($root, $relativeNormal) $includes[$canonical] = $false $fullPath } else { {} } } # This needs to be in this file so that relative paths work as expected function CallerScriptRoot { $callstack = get-pscallstack $caller = $null $thisScript = $callstack[0].scriptname for ($current = 1; $current -lt $callstack.length; $current++) { $currentScriptRoot = $callstack[$current].scriptname if ( $currentScriptRoot -ne $null -and $currentScriptRoot.length -gt 0 ) { if ( $currentScriptRoot -ne $thisScript ) { $caller = $currentScriptRoot break } } } if ( $caller -eq $null ) { throw "Unable to determine calling script's directory" } split-path $caller } |