Где псевдонимы по умолчанию определены в PowerShell? - PullRequest
7 голосов
/ 05 мая 2010

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

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

Ответы [ 6 ]

10 голосов
/ 12 мая 2010

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

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
----                -------------     ------ ----
7 голосов
/ 15 мая 2010

Закодировано, но доступно для извлечения (как и большинство вещей, скрытых в 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
...

; -)

1 голос
/ 30 сентября 2018

Другой способ найти встроенные псевдонимы с помощью исходного кода (C #) из GitHub:

https://github.com/PowerShell/PowerShell/blob/98cf44cdecd72ffc328c3b7ca216fae20a08f1e4/src/System.Management.Automation/engine/InitialSessionState.cs#L4549-L4714

internal static SessionStateAliasEntry[] BuiltInAliases {
    get {
            // Too many AllScope entries hurts performance because an entry is
            // created in each new scope, so we limit the use of AllScope to the
            // most commonly used commands - primarily so command lookup is faster,
            // though if we speed up command lookup significantly, then removing
            // AllScope for all of these aliases makes sense.

            const ScopedItemOptions AllScope = ScopedItemOptions.AllScope;
            const ScopedItemOptions ReadOnly_AllScope = ScopedItemOptions.ReadOnly | ScopedItemOptions.AllScope;
            const ScopedItemOptions ReadOnly = ScopedItemOptions.ReadOnly;

            return new SessionStateAliasEntry[] {
                new SessionStateAliasEntry("foreach", "ForEach-Object", string.Empty, ReadOnly_AllScope),
                new SessionStateAliasEntry("%", "ForEach-Object", string.Empty, ReadOnly_AllScope),
                new SessionStateAliasEntry("where", "Where-Object", string.Empty, ReadOnly_AllScope),
                new SessionStateAliasEntry("?", "Where-Object", string.Empty, ReadOnly_AllScope),
                new SessionStateAliasEntry("clc", "Clear-Content", string.Empty, ReadOnly),
                new SessionStateAliasEntry("cli", "Clear-Item", string.Empty, ReadOnly),
                new SessionStateAliasEntry("clp", "Clear-ItemProperty", string.Empty, ReadOnly),
                new SessionStateAliasEntry("clv", "Clear-Variable", string.Empty, ReadOnly),
                new SessionStateAliasEntry("cpi", "Copy-Item", string.Empty, ReadOnly),
                new SessionStateAliasEntry("cvpa", "Convert-Path", string.Empty, ReadOnly),
                new SessionStateAliasEntry("dbp", "Disable-PSBreakpoint", string.Empty, ReadOnly),
                new SessionStateAliasEntry("ebp", "Enable-PSBreakpoint", string.Empty, ReadOnly),
                new SessionStateAliasEntry("epal", "Export-Alias", string.Empty, ReadOnly),
                new SessionStateAliasEntry("epcsv", "Export-Csv", string.Empty, ReadOnly),
                new SessionStateAliasEntry("fl", "Format-List", string.Empty, ReadOnly),
                new SessionStateAliasEntry("ft", "Format-Table", string.Empty, ReadOnly),
                new SessionStateAliasEntry("fw", "Format-Wide", string.Empty, ReadOnly),
                new SessionStateAliasEntry("gal", "Get-Alias", string.Empty, ReadOnly),
                new SessionStateAliasEntry("gbp", "Get-PSBreakpoint", string.Empty, ReadOnly),
                new SessionStateAliasEntry("gc", "Get-Content", string.Empty, ReadOnly),
                new SessionStateAliasEntry("gci", "Get-ChildItem", string.Empty, ReadOnly),
                new SessionStateAliasEntry("gcm", "Get-Command", string.Empty, ReadOnly),
                new SessionStateAliasEntry("gdr", "Get-PSDrive", string.Empty, ReadOnly),
                new SessionStateAliasEntry("gcs", "Get-PSCallStack", string.Empty, ReadOnly),
                new SessionStateAliasEntry("ghy", "Get-History", string.Empty, ReadOnly),
                new SessionStateAliasEntry("gi", "Get-Item", string.Empty, ReadOnly),
                new SessionStateAliasEntry("gl", "Get-Location", string.Empty, ReadOnly),
                new SessionStateAliasEntry("gm", "Get-Member", string.Empty, ReadOnly),
                new SessionStateAliasEntry("gmo", "Get-Module", string.Empty, ReadOnly),
                new SessionStateAliasEntry("gp", "Get-ItemProperty", string.Empty, ReadOnly),
                new SessionStateAliasEntry("gpv", "Get-ItemPropertyValue", string.Empty,ReadOnly),
                new SessionStateAliasEntry("gps", "Get-Process", string.Empty, ReadOnly),
                new SessionStateAliasEntry("group", "Group-Object", string.Empty, ReadOnly),
                new SessionStateAliasEntry("gu", "Get-Unique", string.Empty, ReadOnly),
                new SessionStateAliasEntry("gv", "Get-Variable", string.Empty, ReadOnly),
                new SessionStateAliasEntry("iex", "Invoke-Expression", string.Empty, ReadOnly),
                new SessionStateAliasEntry("ihy", "Invoke-History", string.Empty, ReadOnly),
                new SessionStateAliasEntry("ii", "Invoke-Item", string.Empty, ReadOnly),
                new SessionStateAliasEntry("ipmo", "Import-Module", string.Empty, ReadOnly),
                new SessionStateAliasEntry("ipal", "Import-Alias", string.Empty, ReadOnly),
                new SessionStateAliasEntry("ipcsv", "Import-Csv", string.Empty, ReadOnly),
                new SessionStateAliasEntry("measure", "Measure-Object", string.Empty, ReadOnly),
                new SessionStateAliasEntry("mi", "Move-Item", string.Empty, ReadOnly),
                new SessionStateAliasEntry("mp", "Move-ItemProperty", string.Empty, ReadOnly),
                new SessionStateAliasEntry("nal", "New-Alias", string.Empty, ReadOnly),
                new SessionStateAliasEntry("ndr", "New-PSDrive", string.Empty, ReadOnly),
                new SessionStateAliasEntry("ni", "New-Item", string.Empty, ReadOnly),
                new SessionStateAliasEntry("nv", "New-Variable", string.Empty, ReadOnly),
                new SessionStateAliasEntry("nmo", "New-Module", string.Empty, ReadOnly),
                new SessionStateAliasEntry("oh", "Out-Host", string.Empty, ReadOnly),
                new SessionStateAliasEntry("rbp", "Remove-PSBreakpoint", string.Empty, ReadOnly),
                new SessionStateAliasEntry("rdr", "Remove-PSDrive", string.Empty, ReadOnly),
                new SessionStateAliasEntry("ri", "Remove-Item", string.Empty, ReadOnly),
                new SessionStateAliasEntry("rni", "Rename-Item", string.Empty, ReadOnly),
                new SessionStateAliasEntry("rnp", "Rename-ItemProperty", string.Empty, ReadOnly),
                new SessionStateAliasEntry("rp", "Remove-ItemProperty", string.Empty, ReadOnly),
                new SessionStateAliasEntry("rmo", "Remove-Module", string.Empty, ReadOnly),
                new SessionStateAliasEntry("rv", "Remove-Variable", string.Empty, ReadOnly),
                new SessionStateAliasEntry("rvpa", "Resolve-Path", string.Empty, ReadOnly),
                new SessionStateAliasEntry("sal", "Set-Alias", string.Empty, ReadOnly),
                new SessionStateAliasEntry("sbp", "Set-PSBreakpoint", string.Empty, ReadOnly),
                new SessionStateAliasEntry("select", "Select-Object", string.Empty, ReadOnly_AllScope),
                new SessionStateAliasEntry("si", "Set-Item", string.Empty, ReadOnly),
                new SessionStateAliasEntry("sl", "Set-Location", string.Empty, ReadOnly),
                new SessionStateAliasEntry("sp", "Set-ItemProperty", string.Empty, ReadOnly),
                new SessionStateAliasEntry("saps", "Start-Process", string.Empty, ReadOnly),
                new SessionStateAliasEntry("spps", "Stop-Process", string.Empty, ReadOnly),
                new SessionStateAliasEntry("sv", "Set-Variable", string.Empty, ReadOnly),
                // Web cmdlets aliases
                new SessionStateAliasEntry("irm", "Invoke-RestMethod", string.Empty, ReadOnly),
                new SessionStateAliasEntry("iwr", "Invoke-WebRequest", string.Empty, ReadOnly),
// Porting note: #if !UNIX is used to disable aliases for cmdlets which conflict with Linux / macOS
#if !UNIX
                // ac is a native command on macOS
                new SessionStateAliasEntry("ac", "Add-Content", string.Empty, ReadOnly),
                new SessionStateAliasEntry("compare", "Compare-Object", string.Empty, ReadOnly),
                new SessionStateAliasEntry("cpp", "Copy-ItemProperty", string.Empty, ReadOnly),
                new SessionStateAliasEntry("diff", "Compare-Object", string.Empty, ReadOnly),
                new SessionStateAliasEntry("gsv", "Get-Service", string.Empty, ReadOnly),
                new SessionStateAliasEntry("sleep", "Start-Sleep", string.Empty, ReadOnly),
                new SessionStateAliasEntry("sort", "Sort-Object", string.Empty, ReadOnly),
                new SessionStateAliasEntry("start", "Start-Process", string.Empty, ReadOnly),
                new SessionStateAliasEntry("sasv", "Start-Service", string.Empty, ReadOnly),
                new SessionStateAliasEntry("spsv", "Stop-Service", string.Empty, ReadOnly),
                new SessionStateAliasEntry("tee", "Tee-Object", string.Empty, ReadOnly),
                new SessionStateAliasEntry("write", "Write-Output", string.Empty, ReadOnly),
                // These were transferred from the "transferred from the profile" section
                new SessionStateAliasEntry("cat", "Get-Content"),
                new SessionStateAliasEntry("cp", "Copy-Item", string.Empty, AllScope),
                new SessionStateAliasEntry("ls", "Get-ChildItem"),
                new SessionStateAliasEntry("man", "help"),
                new SessionStateAliasEntry("mount", "New-PSDrive"),
                new SessionStateAliasEntry("mv", "Move-Item"),
                new SessionStateAliasEntry("ps", "Get-Process"),
                new SessionStateAliasEntry("rm", "Remove-Item"),
                new SessionStateAliasEntry("rmdir", "Remove-Item"),
                new SessionStateAliasEntry("cnsn", "Connect-PSSession", string.Empty, ReadOnly),
                new SessionStateAliasEntry("dnsn", "Disconnect-PSSession", string.Empty, ReadOnly),
#endif
                // Bash built-ins we purposefully keep even if they override native commands
                new SessionStateAliasEntry("cd", "Set-Location", string.Empty, AllScope),
                new SessionStateAliasEntry("dir", "Get-ChildItem", string.Empty, AllScope),
                new SessionStateAliasEntry("echo", "Write-Output", string.Empty, AllScope),
                new SessionStateAliasEntry("fc", "Format-Custom", string.Empty, ReadOnly),
                new SessionStateAliasEntry("kill", "Stop-Process"),
                new SessionStateAliasEntry("pwd", "Get-Location"),
                new SessionStateAliasEntry("type", "Get-Content"),
                // Native commands we keep because the functions act correctly on Linux
                new SessionStateAliasEntry("clear", "Clear-Host"),
// #if !CORECLR is used to disable aliases for cmdlets which are not available on OneCore or not appropriate for PSCore6 due to conflicts
#if !CORECLR
                new SessionStateAliasEntry("gwmi", "Get-WmiObject", string.Empty, ReadOnly),
                new SessionStateAliasEntry("iwmi", "Invoke-WMIMethod", string.Empty, ReadOnly),
                new SessionStateAliasEntry("ogv", "Out-GridView", string.Empty, ReadOnly),
                new SessionStateAliasEntry("ise", "powershell_ise.exe", string.Empty, ReadOnly),
                new SessionStateAliasEntry("rwmi", "Remove-WMIObject", string.Empty, ReadOnly),
                new SessionStateAliasEntry("sc", "Set-Content", string.Empty, ReadOnly),
                new SessionStateAliasEntry("swmi", "Set-WMIInstance", string.Empty, ReadOnly),
                new SessionStateAliasEntry("shcm", "Show-Command", string.Empty, ReadOnly),
                new SessionStateAliasEntry("trcm", "Trace-Command", string.Empty, ReadOnly),
                new SessionStateAliasEntry("lp", "Out-Printer"),
#endif
                // Aliases transferred from the profile
                new SessionStateAliasEntry("h", "Get-History"),
                new SessionStateAliasEntry("history", "Get-History"),
                new SessionStateAliasEntry("md", "mkdir", string.Empty, AllScope),
                new SessionStateAliasEntry("popd", "Pop-Location", string.Empty, AllScope),
                new SessionStateAliasEntry("pushd", "Push-Location", string.Empty, AllScope),
                new SessionStateAliasEntry("r", "Invoke-History"),
                new SessionStateAliasEntry("cls", "Clear-Host"),
                new SessionStateAliasEntry("chdir", "Set-Location"),
                new SessionStateAliasEntry("copy", "Copy-Item", string.Empty, AllScope),
                new SessionStateAliasEntry("del", "Remove-Item", string.Empty, AllScope),
                new SessionStateAliasEntry("erase", "Remove-Item"),
                new SessionStateAliasEntry("move", "Move-Item", string.Empty, AllScope),
                new SessionStateAliasEntry("rd", "Remove-Item"),
                new SessionStateAliasEntry("ren", "Rename-Item"),
                new SessionStateAliasEntry("set", "Set-Variable"),
                new SessionStateAliasEntry("icm", "Invoke-Command"),
                new SessionStateAliasEntry("clhy", "Clear-History", string.Empty, ReadOnly),
                // Job Specific aliases
                new SessionStateAliasEntry("gjb", "Get-Job"),
                new SessionStateAliasEntry("rcjb", "Receive-Job"),
                new SessionStateAliasEntry("rjb", "Remove-Job"),
                new SessionStateAliasEntry("sajb", "Start-Job"),
                new SessionStateAliasEntry("spjb", "Stop-Job"),
                new SessionStateAliasEntry("wjb", "Wait-Job"),
#if !CORECLR
                new SessionStateAliasEntry("sujb", "Suspend-Job"),
                new SessionStateAliasEntry("rujb", "Resume-Job"),
                // Remoting Cmdlets Specific aliases
                new SessionStateAliasEntry("npssc", "New-PSSessionConfigurationFile", string.Empty, ReadOnly),
                new SessionStateAliasEntry("ipsn", "Import-PSSession"),
                new SessionStateAliasEntry("epsn", "Export-PSSession"),
#endif
                new SessionStateAliasEntry("nsn", "New-PSSession"),
                new SessionStateAliasEntry("gsn", "Get-PSSession"),
                new SessionStateAliasEntry("rsn", "Remove-PSSession"),
                new SessionStateAliasEntry("etsn", "Enter-PSSession"),
                new SessionStateAliasEntry("rcsn", "Receive-PSSession", string.Empty, ReadOnly),
                new SessionStateAliasEntry("exsn", "Exit-PSSession"),
                // Win8: 121662/169179 Add "sls" alias for Select-String cmdlet
                //   - do not use AllScope - this causes errors in profiles that set this somewhat commonly used alias.
                new SessionStateAliasEntry("sls", "Select-String"),
            };
        }
}

Конечно, вышеупомянутые псевдонимы могут быть изменены, но доступ к ним таким образом может быть более удобным / информативным в некоторых ситуациях.

1 голос
/ 05 мая 2010

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

0 голосов
/ 03 мая 2019

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

# Get named aliases 
Get-Alias | 
Out-GridView -PassThru -Title 'Available aliases'

# Get cmdlet / function parameter aliases
(Get-Command Get-ADUser).Parameters.Values | 
where aliases | 
select Name, Aliases | 
Out-GridView -PassThru -Title 'Alias results for a given cmdlet or function.'
0 голосов
/ 13 мая 2010

Они жестко закодированы.

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