Принудительно установить модуль для постоянной установки в пользовательские папки - PullRequest
0 голосов
/ 14 февраля 2020

Я хочу заставить PowerShell всегда устанавливать модули в пространство пользователя. Как ни странно, у Microsoft есть возможность принудительной установки в системные папки, требующие администратора с Install-Module <Name> -Scope AllUser, но у нет есть способ принудительной установки в пользовательские папки.

$ModulePath = "$(Split-Path $Profile)\Modules"   # Want all modules here.
$ModulePathTest = foreach ($i in ($env:PSModulePath).split(";")) { if ($i -like $ModulePath) { $True } }   # $ModulePathTest will be $true if $ModulePath is on the $env:PSModulePath
if ($ModulePathTest -eq $null) { <do stuff> }

Итак, я получил это далеко и сейчас застрял. Если я вошел в систему с правами администратора, я думаю, что он устанавливается по умолчанию на C:\Program Files, и, если он является обычным пользователем, он будет go до $ModulePath.

• Существует ли быстрый способ добавления $ ModulePath в $ env: PSModulePath (и навсегда, так что я думаю, что это означает, что он должен быть помещен в реестр правильно? Я не вижу команду PowerShell, которая может навсегда обновить переменную среды - если я ошибаюсь, будет полезно знать)?

• Есть ли способ, которым кто-то может придумать, чтобы Install-Module всегда устанавливался в $ModulePath в вышеприведенном (то есть C:\Users\<Username>\Documents\WindowsPowerShell\Modules)?

1 Ответ

0 голосов
/ 18 февраля 2020

Почему бы просто не установить глобальное предпочтение.

О параметрах Значения по умолчанию

Краткое описание Описывает, как задать пользовательские значения по умолчанию для параметров командлета и расширенные functions.

Подробное описание Переменная предпочтения $ PSDefaultParameterValues ​​позволяет указывать пользовательские значения по умолчанию для любого командлета или расширенной функции. Командлеты и расширенные функции используют пользовательское значение по умолчанию, если в команде не указано другое значение.

Синтаксис Переменная $ PSDefaultParameterValues ​​представляет собой таблицу ha sh, которая проверяет формат ключей как тип объекта System.Management. .Automation.DefaultParameterDictionary. Хеш-таблица содержит пары ключ / значение. Ключ находится в формате CmdletName: ParameterName. Значение - это DefaultValue или ScriptBlock, назначенный клавише.

Синтаксис предпочтительной переменной $ PSDefaultParameterValues ​​следующий:

$PSDefaultParameterValues=@{"CmdletName:ParameterName"="DefaultValue"}
$PSDefaultParameterValues=@{ "CmdletName:ParameterName"={{ScriptBlock}} }
$PSDefaultParameterValues["Disabled"]=$True | $False

Использование $ PSDefaultParameterValues ​​в PowerShell

Допустим, мы хотим убедиться, что не случайно остановили какие-либо процессы, используя Stop-Process. Мы можем заставить WhatIf всегда использоваться с Stop-Process, чтобы лучше защитить себя:

$PSDefaultParameterValues.Add("Stop-Process:WhatIf",$True)

Итак, для чего вы хотите, ...

Что входит в переменную предпочтения PowerShell $ PSDefaultParameterValues?

$PSDefaultParameterValues = @{
    'Out-Default:OutVariable' = 'LastResult'
    'Out-File:Encoding' = 'utf8'
    'Export-Csv:NoTypeInformation' = $true
    'ConvertTo-Csv:NoTypeInformation' = $true
    'Receive-Job:Keep' = $true
    'Install-Module:Scope' = 'CurrentUser'
    'Install-Module:AllowClobber' = $true
    'Install-Module:Force' = $true
    'Install-Module:SkipPublisherCheck' = $true
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...