ImportTestScript.psm1
function Import-Script { [CmdletBinding()] param ( [Parameter(Mandatory)] [String] $Path, [Hashtable] $Parameters = @{}, [Object[]] $Arguments = @(), [String] $EntryPoint = 'Main' ) $sb = { param ($__c, $__arguments, $__parameters) function __placeholder () { } Set-Alias -Name $__c.EntryPoint -Value '__placeholder' . $__c.Path @__arguments @__parameters Remove-Item "alias:\$($__c.EntryPoint)" -Force Remove-Item 'function:\__placeholder' -Force Remove-Variable -Scope Local -Name '__c', '__arguments', '__parameters' } $__c = @{ Path = $Path EntryPoint = $EntryPoint } Set-ScriptBlockScope -SessionState $PSCmdlet.SessionState -ScriptBlock $sb . $sb $__c $Arguments $Parameters } function Set-ScriptBlockScope { param ( [Parameter(Mandatory)] [Management.Automation.SessionState] $SessionState, [Parameter(Mandatory)] [ScriptBlock] $ScriptBlock ) $flags = [System.Reflection.BindingFlags]'Instance,NonPublic' $SessionStateInternal = $SessionState.GetType().GetProperty('Internal', $flags).GetValue($SessionState, $null) # attach the original session state to the wrapper scriptblock # making it invoke in the caller session state $ScriptBlock.GetType().GetProperty('SessionStateInternal', $flags).SetValue($ScriptBlock, $SessionStateInternal, $null) } Export-ModuleMember -Function Import-Script |