Как модули PowerShell (особенно PSReadline) автоматически загружаются в V5?

Я недавно установил Windows 10, которая включает в себя V5 PowerShell, или 5.1.14393.206 если быть точным ($PSVersionTable.PSVersion).

На новые компьютеры я устанавливаю PSReadline. Тем не менее, Windows 10 поставляется с уже установленным.

У меня вопрос, как PSReadline загружается автоматически, когда нет профиля для его импорта (или вызова из него команды)?

В качестве доказательства я запустил этот код:

$PROFILE | Get-Member -MemberType NoteProperty | % {
    $path = $PROFILE.$($_.Name);
    $exists = Test-Path $path;
    [pscustomobject]@{ Path = $path; Exists = $exists }
}

Чтобы получить это:

Path                                                                        Exists
----                                                                        ------
C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1                       False
C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1  False
C:\Users\tahir\Documents\WindowsPowerShell\profile.ps1                       False
C:\Users\tahir\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1  False

Я прошел все /questions/17003227/powershell-v4-ne-importiruet-modul-avtomaticheski/17003242#17003242:

  • Нет звонка Import-Module для PSReadline сделан потому что нет профилей для его вызова.
  • В модуле PSReadline команды не выполняются, поскольку, как и раньше, нет профилей для его вызова.

Может кто-нибудь объяснить это поведение?

2 ответа

Решение

В хосте консоли есть специальный код для загрузки PSReadline, если процесс является интерактивным. Вы можете увидеть код здесь.

PSReadline находится в предопределенной папке модуля C:\Program Files\WindowsPowerShell\Modulesпотому что именно здесь PowerShell автоматически обнаруживает и загружает модуль, а затем загружает модуль и загружает его при вызове любых функций внутри него. Этот процесс добавлен в PS v3.

Другие вопросы по тегам