2010-05-05 24 views
7

Esto puede ser una pregunta estúpida, pero ¿los alias predeterminados (por ejemplo, cd) están codificados en PowerShell o están definidos en un script oculto de "perfil" en alguna parte?¿Dónde se definen los alias predeterminados en PowerShell?

No tengo ningún conjunto de perfiles (por usuario o sistema) así que me pregunto de dónde vienen los predeterminados.

Respuesta

10

Están "integrados" pero no inmutables. Nota:

 
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...}

Como se puede ver, hay cierta división de alias por la opción ReadOnly. Los ReadOnly son idiomáticos en PowerShell, mientras que los mutables son para personas familiarizadas con otros shells. He visto personas modificar dir para agregar más funcionalidad, manteniendo gci como alias directo al Get-ChildItem.

Para una amplia compatibilidad, solo uso los alias ReadOnly en mis scripts.

Además, debido a dir en CMD, ls en UNIX y gci en PowerShell cada obra a su manera, entreno a mí mismo que usar el comando nativo, y no un alias. dir tiende a funcionar en todas partes, ¡pero dir -Recurse no funciona!

Como un ejercicio de entrenamiento, y para poner a prueba mis guiones para la compatibilidad, a veces me quito el no ReadOnly alias:

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

hay un enfoque más suave, donde se reemplaza cada alias con un nuevo comando que se advierte que está utilizando uno de los alias de compatibilidad, pero le permite seguir funcionando.

Además, puede cambiar los alias ReadOnly si realmente quiere, pero por las razones anteriores me gustaría recomendar en contra de ella:

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

Directory: C:\Users\Jay

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

+1

¡Gracias (y otros también) por una gran explicación! – Xerion

+1

En realidad, la parte que etiquetó como '# BAD!' Es exactamente lo que estaba golpeando mi cabeza contra la pared tratando de averiguar cómo hacerlo - anular un alias de ReadOnly. De hecho, he probado ** - Force ** y ** - Option AllScope ** por separado, y por supuesto ninguno de los dos funcionó. Por alguna razón, no se me ocurrió que cada uno aborda un obstáculo diferente, ambos se aplican a los alias de ReadOnly, por lo que deben usarse juntos ... ¡duh! –

+0

Si tiene que saberlo, quería alias ** sl ** a ** Push-Location ** para poder cambiar el comportamiento sin cambiar mis hábitos. También puede ser útil tener una referencia de alias incorporada como un comando proxy del comando al que normalmente hace referencia. De nuevo, para cambiar el comportamiento del comando sin cambiar sus hábitos. Entonces ... no siempre es necesariamente '# BAD!'.;) –

1

Aunque no conozco los detalles técnicos, diría que están codificados y no son configurables. Se pueden redefinir o eliminar, pero el conjunto inicial no está bajo nuestro control.

+0

¿Qué es una buena cosa, en mi humilde opinión. – Joey

0

Son codificado.

6

Hardcoded, pero recuperable (como la mayoría de las cosas "oculta" en 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 
... 

;-)

+2

get-alias funciona también, por supuesto, pero el código anterior es definitivo independientemente de otros módulos/snapins que añadan los suyos a la mezcla. – x0n

Cuestiones relacionadas