Запись в файл профиля после установки модуля PowerShell с помощью PowerShellGet - PullRequest
3 голосов
/ 03 февраля 2020

У меня есть пользовательский модуль PowerShell с двумя командлетами. Я успешно, но вручную развернул на моей машине. Однако я развернул его, поместив двоичный файл и манифест модуля в определенное место, а затем зарегистрировал модуль. Мне также пришлось вручную написать команду Import-Module в моем профиле «всех пользователей».

Теперь я уверен, что могу развернуть этот модуль с помощью Publish-Module, но как мне заставить Install-Module написать оператор Import-Module для файла профиля?

1 Ответ

2 голосов
/ 12 февраля 2020

Начиная с PowerShell 3.0, модуль автоматически импортируется при вызове команды из модуля. Это было блестяще со стороны Microsoft; однако для этого требовалось, чтобы модули находились в том месте, где PowerShell ищет модули по умолчанию. Имеет смысл. Вы можете увидеть эти места, выполнив следующую команду:

$env:PSModulePath -split ';'

Есть ли причина, по которой вы не хотите использовать один из путей, сохраненных в указанной выше переменной среды? Тем не менее, я бы оставил ваш код вне пути "C: \ Windows \ System32 ...". Другие варианты лучше: «C: \ Program Files \ PowerShell \ Modules» (AllUsers) и «C: \ Users \ tommymaynard \ Documents \ PowerShell \ Modules» (CurrentUser). В зависимости от версии / ОС PowerShell эти пути могут быть разными. Вам не нужно будет писать команду Import-Module в сценарии $ PROFILE, если вы поместите модуль в предпочтительное место. Возможно, вы уже знаете это, , но , возможно, нет.

Вы не получите Install-Module для записи в любой из сценариев $ PROFILE.

$PROFILE | Select-Object -Property *

Ну, не по умолчанию в любом случае. Вы можете написать свою собственную функцию Install-Module, которая выполняет функцию Install-Module PowerShellGet и включает в себя запись в различные сценарии $ PROFILE. Проблема в том, что вам нужно включить logi c, чтобы вы не сдували содержимое чьего-либо сценария $ PROFILE, если он не пустой, а только добавляли его.

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

Редактировать : мне пришло в голову, вы можете добавить значение / путь к переменной окружения $ env: PSModulePath. Это одна строка с разделителями-запятыми:

$env:PSModulePath.GetType().Name

Следовательно, это выглядело бы так:

$env:PSModulePath += ';C:\Another\Path'

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

...