В вашем модуле, если вы назначаете объект службы для переменной области действия сценария, все функции в модуле могут получить доступ к переменной. Вот пример:
$module = {
function StartNewService {
$script:service = 'MyService'
}
function UpdateService {
"Updating service: " + $script:service
}
Export-ModuleMember -Function StartNewService, UpdateService
}
$null = New-Module $module
# StartNewService creates the service variable.
StartNewService
# UpdateService accesses the service variable created by StartNewService.
UpdateService
Если вы объявите переменную как $global:service
, вы также можете получить доступ к переменной вне модуля.
Редактировать: Чтобы обратиться к комментариям ниже, вот более практичный пример, который показывает подходящую ситуацию для разделения переменной среди функций в модуле. В этом случае все функции в модуле зависят от одного и того же экземпляра переменной $Locations
. В этом примере переменная создается вне функций и является конфиденциальной, поскольку она не включена в команду Export-ModuleMember
.
Вот упрощенная версия моего LocationName.psm1
$Locations = @{}
function Save-LocationName {
param(
[parameter(Mandatory=$true)]
[string]$Name
)
$Locations[$Name] = $PWD
}
function Move-LocationName {
param(
[parameter(Mandatory=$true)]
[string]$Name
)
if($Locations[$Name]) {
Set-Location $Locations[$Name]
}
else {
throw ("Location $Name does not exist.")
}
}
New-Alias -Name svln -Value Save-LocationName
New-Alias -Name mvln -Value Move-LocationName
Export-ModuleMember -Function Save-LocationName, Move-LocationName -Alias svln, mvln
С помощью этого модуля пользователь может дать имя каталогу и переместиться в это место, используя данное имя. Например, если я нахожусь на \\server01\c$\Program Files\Publisher\Application\Logs
, я могу сохранить местоположение, введя svln logs1
. Теперь, если я изменил свое местоположение, я могу вернуться в каталог журналов с помощью mvln logs1
. В этом примере было бы нецелесообразно использовать хеш-таблицу положений для ввода и вывода, поскольку функции всегда работают с одним и тем же экземпляром.