Как импортировать модули PowerShell, как босс

PowerShell – это феноменальный и надежный сценарный язык. Но чтобы раскрыть его потенциал, вам нужно знать, как импортировать правильные модули.

В этом руководстве вы узнаете все, что вам нужно знать, чтобы импортировать модули PowerShell как профессионал. Обладая глубоким пониманием командлетов, параметров и модулей, вы можете создавать более быстрые, эффективные и эффективные сценарии, чем когда-либо прежде.

Читайте далее, чтобы улучшить свои навыки PowerShell и поднять свою игру в написании сценариев на новый уровень!

Предварительные требования

Это руководство будет демонстрацией на практике. Чтобы следовать за нами, убедитесь, что у вас есть система с установленным PowerShell. В качестве примера в этом руководстве используются Windows 10 и PowerShell 5.1, но те же команды должны работать с большинством версий Windows и PowerShell.

Импорт одного модуля

Модули PowerShell содержат заранее созданный код, который вы можете использовать в своих сценариях PowerShell, экономя время и усилия. Когда вы импортируете модули PowerShell, вы используете готовый код вместо того, чтобы начинать с нуля.

Но каким образом можно импортировать модули PowerShell? Команда Import-Module является основным способом импорта модулей в PowerShell. Импорт одного модуля является одним из самых базовых использований команды Import-Module, что будет первым, что вы узнаете в этом учебнике.

Откройте PowerShell от имени администратора и выполните следующую команду Import-Module, чтобы найти модуль PSDiagnostics и загрузить его в память. Если успешно, модуль будет импортирован, но команда не выведет вывода.

Import-Module PSDiagnostics

Импорт модулей из онлайн-репозиториев с помощью команды Install-Module настоятельно рекомендуется всякий раз, когда это возможно. Эта команда заботится о зависимостях и управлении версиями за вас.

После импорта модуля вы можете использовать любые из его cmdlets или функций, чтобы помочь вам диагностировать и устранять проблемы. Команда Enable-PSTrace – всего лишь один пример cmdlet, предоставленный модулем PSDiagnostics, который позволяет выполнять трассировку в PowerShell.

Теперь выполните следующую команду Enable-PSTrace, чтобы выполнить трассировку диагностики и сохранить результаты в указанный -TraceFilePath (C:\\MyTrace.log). Эта команда не выводит результаты в консоль, так как они сохраняются в файл.

Enable-PSTrace -TraceLevel 1 -TraceFilePath C:\MyTrace.log

Некоторым модулям может потребоваться дополнительная конфигурация или настройка перед их использованием. Обязательно ознакомьтесь с документацией, предоставленной с модулем, чтобы понять любые предварительные требования или требования.

Импорт нескольких модулей сразу

Импорт одного модуля работает нормально. Но когда вам часто нужно импортировать несколько модулей за один раз, эту задачу также можно выполнить с помощью cmdlet Import-Module.

Импорт нескольких модулей – отличный способ экономить время и усилия в PowerShell. Но как именно? Вы указываете имена модулей, разделенные запятыми.

Запустите следующую команду для поиска нескольких модулей (Dism, PowerShellGet, PSReadline) и загрузите их в память. Как и при импорте отдельного модуля, эта команда не предоставляет вывода.

Import-Module Dism, PowerShellGet, PSReadline

Отображение сведений об импорте модуля

Как уже упоминалось, успешный импорт модуля не предоставляет вывода. Но признайтесь, вы были бы скептически настроены относительно того, был ли модуль действительно импортирован или нет.

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

Выполните следующую команду для импорта модуля SmbShare, добавив параметр -Verbose для вывода подробной информации о импорте модуля.

Import-Module SmbShare -Verbose

Как видно ниже, параметр -Verbose предоставляет подробную информацию о загружаемом файле модуля и различных функциях, импортированных из модуля. Эта информация может помочь понять внутреннее устройство модуля.

В данном случае модуль SmbShare предоставляет командлеты для управления SMB-ресурсами на компьютерах с Windows. Эти командлеты включают, но не ограничиваются, командлетами New-SmbShare (создание новых ресурсов) и Remove-SmbShare (удаление существующих ресурсов).

Displaying module import details

Повторный импорт модуля в ту же сессию

Будь то из-за проблем с модулем или просто для обеспечения использования самой последней версии модуля, повторный импорт PowerShell-модуля полезен. Как? Добавив параметр -Force к команде Import-Module.

Этот параметр -Force позволяет вам продолжать использовать cmdlets и функции, предоставляемые модулем, без необходимости закрывать и заново открывать вашу сессию PowerShell.

Один из обычных случаев повторного импорта модуля – это разработка и внесение изменений в модуль. Вы можете повторно импортировать модуль в текущую сессию, чтобы протестировать эти изменения перед их завершением.

Запустите следующую команду, чтобы -Force PowerShell удалил и повторно импортировал модуль SmbShare из его оригинального расположения.

Параметр -Prefix позволяет указать префикс для cmdlets и функций, импортированных из модуля. В этом случае все импортированные cmdlets и функции будут предшествовать New. Этот параметр может быть полезен для избегания конфликтов с существующими cmdlets или функциями в вашей сессии.

Например, cmdlet Get-SmbShare в оригинальном модуле станет Get-NewSmbShare в повторно импортированном модуле.

Import-Module SmbShare -Force -Prefix New

Теперь выполните Get-Command ниже, чтобы получить список всех cmdlets и функций, предоставляемых выбранным модулем SmbShare (Select-Object) по имени.

Get-Command -Module SmbShare | Select-Object Name

Ниже вы можете видеть, что к именам cmdlet модуля SmbShare теперь добавлен префикс New. Этот вывод подтверждает успешную повторную загрузку модуля.

Verifying the SmbShare module has been reimported

Использование пакетов NuGet для ручной установки модулей PowerShell

До сих пор вы успешно импортировали модули из галереи PowerShell. Но что делать, если нужного вам модуля там нет?

Вы можете ручным образом устанавливать и импортировать модули PowerShell из пакета NuGet. В контексте PowerShell пакет NuGet представляет собой набор файлов, который включает в себя модуль PowerShell, а также все зависимые модули или библиотеки, необходимые для работы модуля.

Чтобы импортировать модуль из пакета NuGet, вам необходимо ручным образом загрузить, извлечь и установить пакет NuGet следующими шагами:

1. Перейдите на страницу Azure галереи PowerShell модуля Az.Automation.

2. Затем перейдите на вкладку Ручная загрузкаЗагрузить исходный файл nupkg, чтобы загрузить пакет. В данном руководстве в качестве примера используется модуль Az.Automation 1.9.1 из галереи Azure PowerShell, но те же шаги применимы и к другим пакетам NuGet.

Downloading the raw NuGet package (nupkg) file

3. После загрузки выполните следующую команду Unblock-File, которая не предоставляет вывод, но разблокирует загруженный файл .nupkg. Обязательно замените путь к файлу на тот, где вы загрузили пакет.

Разблокировка пакета необходима. Почему? PowerShell может не разрешать выполнение файлов, загруженных из Интернета, в качестве меры безопасности для предотвращения выполнения потенциально вредных сценариев

Unblock-File -Path C:\PSModules\az.automation.1.9.1.nupkg

4. Теперь разархивируйте загруженный файл .nupkg в папку на вашем локальном компьютере. Вам может потребоваться инструмент для сжатия/распаковки, такой как 7-zip или WinRAR, для разархивации пакета. Пакет NuGet – это ZIP-архив, содержащий набор файлов, составляющих модуль.

5. Удалите следующие содержимое из извлеченной папки.

Извлеченное содержимое пакета NuGet включает некоторые метаданные и файлы, которые не нужны для ручной установки модуля.

Name Type
_rels Folder
Package Folder
[Content_Types].xml XML File
Az.Automation.nuspec XML Manifest File
Deleting unnecessary contents from the extracted NuGet package folder

6. Переименуйте извлеченную папку более описательным именем, например, az.automation, чтобы избежать возможных ошибок. Помните о том, чтобы сохранить все буквы в нижнем регистре и воздерживаться от использования специальных символов в имени папки.

7. Затем выполните команду $env:PSModulePath ниже, чтобы найти пути к вашим текущим модулям оболочки. Эта команда возвращает список всех путей модулей по умолчанию на вашей системе. PowerShell ищет эти пути для автоматической загрузки модулей, когда имя модуля указано в сценарии или команде.

$env:PSModulePath

Обратите внимание на эти пути, так как они понадобятся на следующем этапе.

Finding out where your modules’ paths are located

8. Скопируйте вновь названную папку (az.automation) в один из каталогов, отмеченных в шаге семь. Это определяет область модуля (конкретного пользователя или всех пользователей).

Path Function
C:\Users\admin\Documents\WindowsPowerShell\Modules Makes the module available for the specific user account (admin). This tutorial uses this location as an example.
C:\Program Files\WindowsPowerShell\Modules Makes the module available for all user accounts on your local machine.

9. Теперь выполните нижеследующую команду для установки и импорта модуля (az.automation) в вашу сессию PowerShell. Обязательно замените az.automation на фактическое название вашего модуля.

Import-Module -Name az.automation -Verbose
Installing and importing a module from a NuGet package

10. Наконец, выполните следующую команду Get-Module, чтобы проверить, был ли модуль (az.automation) успешно импортирован.

Get-Module -Name az.automation
Verifying the module has been imported successfully

Возможно, вам не хочется полагаться на автоматическое обнаружение. В таком случае укажите точное местоположение файла (C:\az.automation) при импортировании модуля.

Import-Module -Name C:\az.automation -Verbose
Specifying the exact file location when importing a module

Заключение

Совмещая функции или группируя код, модули PowerShell изменяют игру. И в этом руководстве вы узнали об изобилии способов импорта модулей PowerShell в ваши сеансы, включая ручное импортирование модулей из пакета NuGet. Вы также коснулись различных параметров, контролирующих процесс импорта.

Овладев этими техниками, вы легко сможете импортировать и использовать модули для улучшения ваших скриптов автоматизации. Но обучение не обязательно должно заканчиваться здесь. Почему бы не поднять свои навыки управления модулями PowerShell на новый уровень, изучив экспорт членов модуля?

Source:
https://adamtheautomator.com/import-powershell-modules/