This concept based on specific script call (mask is: . .\script.ps1). Due such execution, all variables that used in script.ps1 will exist in current context (from where you calling script1.ps1). Notice, that when script executes ordinarily, it has mask: .\script.ps1. **Example:**For example, we have script:
$answer=42
write-output ultimate answer is $answer
Lets see how it will be executed ordinarily:
PS D:\temp> .\script.ps1
ultimate answer is 42
PS D:\temp> $answer
And execution as dot-sourced:
PS D:\temp>. .\script.ps1
ultimate answer is 42PS D:\temp>$answer42
As you can see, after ordinarily execution, internal variable $answer do not exists in parent context. In dot sourcing it does. ## Modules
This concept based on 2 entities: module manifest and module. Module contains all logic of PowerShell script (such as functions, that you want be exported). Module manifest - easy format to describe this module (which functions will be exported, from where and so on). Let see module in details. For example, i have my Web.psm1 module in powershell-sharepoint repo:
## Module manifest for module 'Web'## Generated by: administrator## Generated on: 14.08.2019#@{# Script module or binary module file associated with this manifest.RootModule = '.\Web.psm1'# Version number of this module.ModuleVersion = '1.0'# Supported PSEditions# CompatiblePSEditions = @()# ID used to uniquely identify this moduleGUID = 'd187c4b7-7b8e-4285-a750-6e87477e6a33'# Author of this moduleAuthor = 'administrator'# Company or vendor of this moduleCompanyName = 'Unknown'# Copyright statement for this moduleCopyright = '(c) 2019 administrator. All rights reserved.'# Description of the functionality provided by this module# Description = ''# Minimum version of the Windows PowerShell engine required by this module# PowerShellVersion = ''# Name of the Windows PowerShell host required by this module# PowerShellHostName = ''# Minimum version of the Windows PowerShell host required by this module# PowerShellHostVersion = ''# Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only.# DotNetFrameworkVersion = ''# Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only.# CLRVersion = ''# Processor architecture (None, X86, Amd64) required by this module# ProcessorArchitecture = ''# Modules that must be imported into the global environment prior to importing this module# RequiredModules = @()# Assemblies that must be loaded prior to importing this module# RequiredAssemblies = @()# Script files (.ps1) that are run in the caller's environment prior to importing this module.# ScriptsToProcess = @()# Type files (.ps1xml) to be loaded when importing this module# TypesToProcess = @()# Format files (.ps1xml) to be loaded when importing this module# FormatsToProcess = @()# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess# NestedModules = @()# Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.FunctionsToExport = @('Get-List-On-Web')# Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.CmdletsToExport = @()# Variables to export from this moduleVariablesToExport = '*'# Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.AliasesToExport = @()# DSC resources to export from this module# DscResourcesToExport = @()# List of all modules packaged with this module# ModuleList = @()# List of all files packaged with this module# FileList = @()# Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.PrivateData = @{ PSData = @{# Tags applied to this module. These help with module discovery in online galleries.# Tags = @()# A URL to the license for this module.# LicenseUri = ''# A URL to the main website for this project.# ProjectUri = ''# A URL to an icon representing this module.# IconUri = ''# ReleaseNotes of this module# ReleaseNotes = ''}# End of PSData hashtable}# End of PrivateData hashtable# HelpInfo URI of this module# HelpInfoURI = ''# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.# DefaultCommandPrefix = ''}
FunctionsToExport - array of function names that will be exported from module
You can type wildcard * here, but it's not recommended
Basic scenario that uses logic function from external module listed below:
Add-PSSnapin Microsoft.Sharepoint.Powershell
.\Load-Module.ps1 Web
$siteUrl = http://bot-sp2016/
$webUrl = http://bot-sp2016/SalesManagement/
$list = Sale
$web = Get-SPWeb$webUrl$list = Get-List-On-Web $web$list
LoadModule.ps1 - is helper script for easy Import-Module using from 1 central utility storage: