PowerShell: обязательно ли сохранять скрипт-модуль под тем же именем, что и каталог - PullRequest
1 голос
/ 07 апреля 2020

В отношении модулей, Do c упоминает его предпочтительное

Сохранение сценария PowerShell с расширением .psm1. Используйте одно и то же имя для сценария и каталога, в котором сохранен сценарий.

Чтобы установить и запустить модуль, сохраните модуль по одному из соответствующих путей PowerShell и используйте Import-Module.

Пути PowerShell -> расположены в $env:PSModulePath

Я не следовал за ними и не сохранил Script Module chart_gui.psm1 в одной из локальных папок, и я все еще мог Import-Module и вызывать функции в нем, но Remove-Module выдает ошибку.

Import-Module 'H:\path_x\chart_gui.psm1'
#Call the function
$selectedCharts = selectCharts     
Remove-Module 'H:\path_x\chart_gui.psm1'

моя ошибка:

Remove-Module : No modules were removed. Verify that the specification of modules to remove is correct and those modules exist in the runspace.

моя $env:PSModulePath

PS C:\Users\xxx> $env:PSModulePath
C:\Users\xxx\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\Windo
wsPowerShell\v1.0\Modules

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

Remove-Module не предназначен для приема путей к файлам для идентификации удаляемого модуля.

Вместо этого используйте один из следующих методов :

# By simple name.
# If your module is just a stand-alone *.psm1 file, the module name
# is the base name of that file (the file name without extension).
Remove-Module -Name chart_gui  # -Name is optional

# Example of a fully qualified module name, which assumes a module 
# that has a manifest file (*.psd1).
# Again, the base name of that file is implicitly the module name, and,
# typically, modules with *.psd1 files are placed in folders of the same
# name.
# Use the values specific to your module.
# To eliminate all ambiguity, you can also add a 'Guid' key with the GUID
# from your manifest.
Remove-Module -FullyQualifiedName @{ ModuleName = 'chart_gui'; ModuleVersion = '1.0.0' }

# By PSModuleInfo object, as reported by Get-Module or Import-Module -PassThru
Get-Module -Name chart_gui | Remove-Module  # -Name is optional
  • Обычно в сеанс загружается только один модуль с заданным именем, но можно загружать несколько модулей рядом друг с другом. Именно тогда вам необходим параметр -FullyQualifiedName (который поддерживают Get-Module и Remove-Module) для устранения неоднозначности.

  • Простой способ избежать неоднозначности должен использовать -PassThru при вызове Import-Module (с явным путем), который выводит экземпляр System.Management.Automation.PSModuleInfo, описывающий модуль, который вы можете позже передать Remove-Module.

# Load (import) the module; -PassThru passes the
# imported module through as a PSModuleInfo object, which you can later pass
# to Remove-Module.
$module = Import-Module -PassThru 'H:\path_x\chart_gui.psm1'

# ... work with the module

# Unload it again.
$module | Remove-Module
0 голосов
/ 07 апреля 2020

Это может быть не совсем правильным способом, но я могу избежать ошибки, используя

Remove-Module 'chart_gui'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...