Вы когда-нибудь запускали команду PowerShell и получали ужасное сообщение об ошибке “Термин не распознан как имя cmdlet”? Вот загвоздка: проблема может быть настолько простой, как отсутствующий или не импортированный модуль. Даже в современных версиях PowerShell понимание работы с модулями имеет ключевое значение для диагностики и устранения этих проблем.
Хорошая новость? В этом руководстве рассматривается все, начиная с проверки, какие модули в настоящее время импортированы в PowerShell, и заканчивая освоением способов их импорта, удаления и повторного импорта. К концу вы станете мастером в управлении модулями PowerShell, будь то устранение неожиданных ошибок или работа с пользовательскими модулями.
Погрузитесь в это и позвольте модулям PowerShell помочь вам оптимизировать рабочий процесс с уверенностью!
Проверка импортированных модулей
Команды PowerShell могут завершаться криптическими сообщениями об ошибках, когда модули не загружены правильно. Например, попытка запустить Get-ADUser без предварительного импорта модуля ActiveDirectory приведет к ошибке “команда не найдена”. Точно так же для использования команд Azure требуется наличие модуля Az в вашей сессии.
PowerShell должен импортировать соответствующий модуль, чтобы обеспечить работу команд как ожидается и сделать их команды доступными.
Для просмотра в настоящее время импортированных модулей используйте:
Get-Module
Когда вы запускаете Get-Module, вы увидите вывод, подобный этому:
ModuleType Version Name ExportedCommands ---------- ------- ---- ---------------- Manifest 7.0.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Content, Checkpoint-Computer...} Manifest 7.0.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type, Clear-Variable...} Script 2.0.0 PSReadline {Get-PSReadLineKeyHandler, Get-PSReadLineOption...} Binary 1.0.0.1 SmbShare {Get-SmbShare, Set-SmbShare, Remove-SmbShare...}
Это отображает список всех в настоящее время загруженных модулей в вашей сессии PowerShell, показывая их тип (Manifest, Script или Binary), номер версии, имя модуля и краткое описание команд, которые они предоставляют. Столбец ExportedCommands показывает, какие cmdlet-ы доступны из каждого модуля.
Затем изучите команды из модуля, который можно импортировать:
Get-Module -Name SmbShare -ListAvailable | Select exportedcommands
Когда вы запускаете эту команду, вы увидите вывод, в котором перечислены все доступные команды в модуле SmbShare. Например:
ExportedCommands ---------------- {Get-SmbShare, New-SmbShare, Remove-SmbShare, Set-SmbShare, Get-SmbShareAccess, Grant-SmbShareAccess, Block-SmbShareAccess, Revoke-SmbShareAccess, Get-SmbMapping}
Этот вывод показывает все командлеты, которые можно использовать из модуля SmbShare. Каждая команда служит определенной цели для управления SMB-ресурсами:
- Get-SmbShare: Список всех SMB-ресурсов в системе
- New-SmbShare: Создание нового SMB-ресурса
- Remove-SmbShare: Удаление существующего SMB-ресурса
- Set-SmbShare: Изменение свойств существующего ресурса
Понимание доступных команд помогает выбрать правильный инструмент для вашей задачи. Вы можете использовать аналогичные команды для изучения возможностей других модулей.
Автоматическое импортирование модулей
Чтобы увидеть, как PowerShell динамически обрабатывает модули, вот пример динамической загрузки модуля:
PS> Get-Module ModuleType Version Name ExportedCommands ---------- ------- ---- ---------------- Manifest 7.0.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Content...} Manifest 7.0.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type...} Script 2.0.0 PSReadline {Get-PSReadLineKeyHandler...} PS> Get-SmbShare PS> Get-Module ModuleType Version Name ExportedCommands ---------- ------- ---- ---------------- Manifest 7.0.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Content...} Manifest 7.0.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type...} Script 2.0.0 PSReadline {Get-PSReadLineKeyHandler...} Binary 1.0.0.1 SmbShare {Get-SmbShare, Set-SmbShare...}
Как показано выше, когда вы запускаете Get-SmbShare, PowerShell автоматически импортирует модуль SmbShare. Вы можете увидеть, что этот модуль появляется в списке после выполнения команды.
Удаление и повторное импортирование модулей
Вам может понадобиться очистить модуль из памяти, например, при тестировании новых конфигураций или разрешении конфликтов. Если это так, не волнуйтесь; PowerShell позволяет удалить модуль без его деинсталляции, позволяя вам сбросить или обновить сеанс по мере необходимости.
Для удаления модуля из памяти:
Remove-Module -Name SmbShare
Команда Remove-Module
очищает модуль из памяти, но не удаляет его с вашей системы. Хотя удаление модулей редко используется в повседневной практике, оно полезно для определенных сценариев.
Чтобы вручную импортировать модуль обратно:
Import-Module -Name SmbShare
Ручное импортирование может быть полезным при устранении неполадок или работе в настраиваемых средах.
Повторный импорт модулей после изменений
При работе над модулем в разработке вы можете столкнуться с ситуациями, когда внесенные вами изменения не сразу вступают в силу. Старые данные или конфигурации могут все еще загружаться в модуль, вызывая такое поведение.
Повторный импорт модуля гарантирует, что PowerShell использует последнюю версию. Если вы изменяете модуль, над которым работаете, вы должны повторно его импортировать.
Вы можете использовать как Remove-Module
, так и Import-Module
, или упростить процесс с помощью параметра Force
:
Import-Module -Name SmbShare -Force
Параметр Force
выгружает и загружает модуль одним шагом, что делает его идеальным для рабочих процессов разработки и тестирования.
Вывод
В этом руководстве вы узнали, как управлять модулями PowerShell—проверять импорт и импортировать, удалять и повторно импортировать модули. Вы также изучили, как PowerShell динамически импортирует модули и как контролировать загрузку для устранения неполадок или тестирования пользовательских конфигураций вручную.
Теперь примените эти навыки, экспериментируя с пользовательскими модулями в ваших сценариях. Исследуйте разработку модулей и используйте параметр Force
, чтобы гарантировать вступление изменений в силу.
Улучшите свою отладку, разработку сценариев и общий рабочий процесс PowerShell с помощью модулей PowerShell!
Source:
https://adamtheautomator.com/powershell-modules-guide-2/