Как модули 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.