2013-06-14 4 views
3

Я начал изучать Powershell и писал модуль (psm1) для хранения моих функций. Затем я вставил этот код в модуль для того, чтобы перезагрузить модуль, когда я изменить его:Перенос команды сценария Powershell

function reload 
{ 
    Remove-Module init 
    Import-Module F:\Script\init.psm1 
} 

В результате этой функции появляется немного странно для меня:

PS F:\Script> Get-Module 

ModuleType Name        ExportedCommands 
---------- ----        ---------------- 
Script  init        {cpu, ie, lol, outlook...} 
Manifest Microsoft.PowerShell.Management  {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Content...} 
Manifest Microsoft.PowerShell.Utility  {Add-Member, Add-Type, Clear-Variable, Compare-Object...} 


PS F:\Script> reload 
PS F:\Script> Get-Module 

ModuleType Name        ExportedCommands 
---------- ----        ---------------- 
Manifest Microsoft.PowerShell.Management  {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Content...} 
Manifest Microsoft.PowerShell.Utility  {Add-Member, Add-Type, Clear-Variable, Compare-Object...} 


PS F:\Script> 

Почему второй команды в функции не действует? Я также заметил, что модуль появляется в списке, если я вставляю «Get-Module» в конце моей функции, точно так же, как модуль «запускает» в другом экземпляре/сеансе Powershell. Если да, есть ли способ сделать эффекты постоянными?

Спасибо!

EDIT:

я временно решена путем добавления параметра в функции импорта для того, чтобы указать область, в которой, чтобы загрузить модуль:

Import-Module F:\Script\init.psm1 -Global 

Является ли это правильный способ справиться с размаху ?

ответ

2

Возможно, это связано с тем, что функция из модулей выполняется в объеме модуля.

Здесь под красными стрелками показана последовательность разрешения разрешения.

Функция вызова функции F2 Функция F2 вызывает функцию Внутри модуля. Функции F1 и F2 принимают свои значения в области по умолчанию. Функция FMOD использует область модуля.

Это может объяснить, почему Get-Module показывает Ini при вызове внутри функции.

enter image description here

+0

Спасибо за вашу диаграмму, это очень полезно. Теперь, как я могу импортировать модуль в нужную область? – brutus8890

0

Вместо того, чтобы добавить функцию перезагрузки, просто используйте параметр -Force, где вы изначально использовать Import-Module. Это заставит модуль быть повторно импортированным, подбирая любые изменения, внесенные вами с момента последнего импорта.

Смежные вопросы