Это может быть глупым вопросом, но является псевдонимами по умолчанию (например, CD) hardcoded в PowerShell или определенный в скрытом сценарии "профиля" где-нибудь?
У меня нет набора профилей (в расчете на пользователя или в масштабе всей системы), таким образом, я просто задаюсь вопросом, куда по умолчанию прибывают из.
Они «встроены», но не неизменны. Примечание:
PS > (Get-Alias dir).Options AllScope PS > (Get-Alias gci).Options ReadOnly, AllScopePS > 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 > slDirectory: C:\Users\Jay
Mode LastWriteTime Length Name ---- ------------- ------ ----
Хотя я не знаю технических деталей, я бы сказал, что они жестко запрограммированы и не подлежат настройке. Их можно переопределить или удалить, но исходный набор не находится под нашим контролем.
Жестко запрограммировано, но доступно для восстановления (как и большинство вещей, «скрытых» в 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
...
; -)