Во-первых, у меня есть похожий вопрос здесь , но у меня не было направления по решению проблемы.С идеей от автора Энди Арисменди Я придумаю возможное решение, и это новая проблема:
Я запускаю приведенный ниже скрипт, который связывает приведенный ниже блок кода с событием FileChanged,Когда файл модуля .psm1 изменяется, блок кода проверяет, загружен ли файл, и пытается перезагрузить его.Если нет, он импортирует модуль.Однако я придерживаюсь мнения, что событие каким-то образом не связано с текущей рабочей средой, в которой выполняется начальный сценарий, который связывает событие.Я перечислил две проблемы ниже кода:
# create a FileSystemWatcher on the currect directory
$filter = '*.psm1'
$folder = $PWD
$watcher = New-object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $false; EnableRaisingEvents = $true; NotifyFilter = [IO.NotifyFilters]'LastWrite'}
Register-ObjectEvent $watcher Changed -SourceIdentifier FileChanged -Action {
$folder = $PWD
$name = $Event.SourceEventArgs.Name
$filename = $name.Remove($name.IndexOf('.'), 5)
Write-Host $PWD
$loadedModule = Get-Module | ? { $_.Name -eq $filename }
write-host $filename
if ($loadedModule) {
write-host "Reloading Module $folder\$($filename)"
Reload-Module $filename
} else {
write-host "Importing Module $folder\$($filename)"
Import-Module .\$filename
}
}
Проблемы: 1) При изменении файла .psm1 событие запускается дважды (для одного сохранения файла)
2) Дажехотя он выполняет команды перезагрузки / импорта, он должен работать в другой среде, поскольку они никогда не загружаются.Но все выходные данные отправляются в текущую рабочую среду, в которой сценарий связывает событие.
Как я уже говорил, я убежден, что каким-то образом блок кода не связан с текущим сеансом.