Где псевдонимы по умолчанию определяются в PowerShell?

Это может быть глупым вопросом, но является псевдонимами по умолчанию (например, CD) hardcoded в PowerShell или определенный в скрытом сценарии "профиля" где-нибудь?

У меня нет набора профилей (в расчете на пользователя или в масштабе всей системы), таким образом, я просто задаюсь вопросом, куда по умолчанию прибывают из.

7
задан Peter Mortensen 23 June 2017 в 23:20
поделиться

4 ответа

Они «встроены», но не неизменны. Примечание:

PS >  (Get-Alias dir).Options
AllScope
PS >  (Get-Alias gci).Options
ReadOnly, AllScope

PS > Get-Alias | group Options

Count Name Group ----- ---- ----- 91 ReadOnly, AllScope {%, ?, ac, asnp...} 46 AllScope {cat, cd, chdir, clear...}

Как видите, существует некоторое разделение псевдонимов с помощью параметра ReadOnly . Команды ReadOnly идиоматичны в PowerShell, а изменяемые предназначены для людей, знакомых с другими оболочками. Я видел, как люди изменяли dir , чтобы добавить больше функциональности, сохраняя при этом gci как прямой псевдоним для Get-ChildItem .

Для большей совместимости я использую в своих скриптах только псевдонимы ReadOnly .

Кроме того, поскольку dir в CMD, ls в UNIX и gci в PowerShell работают по-своему, я учусь использовать собственный команда, а не псевдоним. dir обычно работает везде, а dir -Recurse - нет!

В качестве обучающего упражнения и для проверки совместимости своих скриптов я иногда удаляю псевдонимы, отличные от ReadOnly :

Get-Alias | ? { ! ($_.Options -match "ReadOnly") } | % { Remove-Item alias:$_ }

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

Кроме того, вы можете изменить псевдонимы ReadOnly , если хотите, но по указанным выше причинам я бы не рекомендовал это:

PS >  Set-Alias -Name sl -Value Get-ChildItem -Force -Option AllScope     # BAD!
PS >  sl

Directory: C:\Users\Jay

Mode LastWriteTime Length Name ---- ------------- ------ ----

10
ответ дан 6 December 2019 в 09:58
поделиться

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

1
ответ дан 6 December 2019 в 09:58
поделиться

Жестко запрограммировано, но доступно для восстановления (как и большинство вещей, «скрытых» в PowerShell)

PS> [Management.Automation.Runspaces.InitialSessionState].getproperty(
        "BuiltInAliases", [reflection.bindingflags]"NonPublic,Static").getvalue(
             $null, @()) | format-table -auto

Definition           Description            Options CommandType Visibility Name    PSSnapIn Module
----------           -----------            ------- ----------- ---------- ----    -------- ------
Add-Content                      ReadOnly, AllScope       Alias     Public ac
Add-PSSnapIn                     ReadOnly, AllScope       Alias     Public asnp
Clear-Content                    ReadOnly, AllScope       Alias     Public clc
Clear-Item                       ReadOnly, AllScope       Alias     Public cli
Clear-ItemProperty               ReadOnly, AllScope       Alias     Public clp
Clear-Variable                   ReadOnly, AllScope       Alias     Public clv
...

; -)

7
ответ дан 6 December 2019 в 09:58
поделиться

Они жестко запрограммированы.

0
ответ дан 6 December 2019 в 09:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: