Область применения модуля в PowerShell Studio 2018
Я работаю с активно разработанным модулем для интерфейса PowerShell Studio. Я довольно новичок в WinForms, поэтому у меня возникли проблемы с пониманием того, как работает область видимости. Ниже приведен мой файл Globals.ps1:
#--------------------------------------------
# Declare Global Variables and Functions here
#--------------------------------------------
Import-Module "C:\MyFiles\Git\PTI-Core\PowerShell\CoreModules\PTI.TMT" -Force
Import-Module pti.Forms
$TFW_ADO = Get-PTIADOConn 'TMT'
#Sample function that provides the location of the script
function Get-ScriptDirectory
{
[OutputType([string])]
param ()
if ($null -ne $hostinvocation)
{
Split-Path $hostinvocation.MyCommand.path
}
else
{
Split-Path $script:MyInvocation.MyCommand.Path
}
}
#Sample variable that provides the location of the script
[string]$ScriptDirectory = Get-ScriptDirectory
Как видите, я импортирую свои модули и глобальное ADO-соединение. Модуль, который импортируется из пути к файлу, является модулем, над которым активно ведется работа.
Вот где я запутался, хотя. Переходя к моей основной форме, вы можете увидеть, что я вызываю функцию Get-Schemas
часть этого модуля. Он выделен серым цветом, говоря, что он неизвестен, но когда я запускаю графический интерфейс, он просто отлично захватывает данные:
Это заселяется прямо в MainForm_Load
функция. К глобальному соединению ADO также обращаются очень хорошо.
$MainForm_Load={
#Import-Module "C:\MyFiles\Git\PTI-Core\PowerShell\CoreModules\PTI.TMT" -Force
# display the combo box with vendor schemas
$Schemas = Get-Schemas $TFW_ADO
$cb_Schemas.DataSource = $Schemas.SchName
# displays current user
$labelUser.Text = $env:USERNAME
}
Теперь я начинаю сталкиваться с проблемами. Интерфейс строится с помощью контроллера вкладок, который соответствует тому, что выбрано в поле со списком. Но прежде чем я это понял, я пытался заставить данные отображаться на вкладке. Я могу сделать это с закомментированным кодом, но когда я пытаюсь запустить функцию из модуля, который делает то же самое (я просто извлек SQL для тестирования), я не могу получить доступ к функции модуля.
$TabController_SelectedIndexChanged={
if ($TabController.SelectedTab -eq $tabJobCodes)
{
#$ADO = Get-PTIADOConn 'TMT'
#$sql = "select DST_COLNAME as Name,
# OLD_VALUE as OldValue,
# NEW_VALUE as NewValue
# from DBXREF
# where DST_COLNAME in ('COMPCODE', 'REPREASON', 'COMPLAINT')
# and DBSCHID = 1
# order by DST_COLNAME"
#
#$ds_Codes = Start-AutoPreparedSQLQuery $TFW_ADO $sql -ReturnsDataset
#$Codes = $ds_Codes.Tables[0]
$Codes = Get-JobCodesByVendor $TFW_ADO
$dgv_JobCodes.DataSource = $Codes
}
}
Есть ли что-то, чего мне не хватает в том, как работает область в PowerShell Studio? Насколько я понимаю, что-нибудь в globals.ps1 должно быть доступно по всему приложению.