Cómo crear alias permanentes de PowerShell
Quiero crear un alias
archivo cmdlet
que no caduque después de cerrar la sesión actual de Powershell, digamos que tengo este alias:
C:\Users\Aymen> New-Alias Goto Set-Location
Esto crea perfectamente el Goto
alias, pero quiero usarlo incluso después de cerrar la sesión actual, ¿cómo puedo lograrlo?
Nota:
El sistema de ayuda de PowerShell sugiere que puedo exportar los alias que creo e importarlos la próxima vez que abra una nueva sesión; en realidad, eso no es lo que estoy buscando, ¿existe una forma clara y directa de seguir teniendo un alias después de crearlo a través de diferentes sesiones
ACTUALIZADO - enero de 2021
Es posible almacenar en un profile.ps1
archivo cualquier código de PowerShell que se ejecutará cada vez que se inicie PowerShell. Existen al menos 6 rutas diferentes donde almacenar el código dependiendo de qué usuario tenga que ejecutarlo. Consideraremos sólo 2 de ellas: las rutas "todos los usuarios" y "solo su usuario" (siga el enlace anterior para obtener más opciones).
Para responder a tu pregunta solo debes crear un profile.ps1
archivo que contenga el código que deseas que se ejecute, es decir:
New-Alias Goto Set-Location
y guárdelo en la ruta adecuada:
"$Home\Documents"
(normalmenteC:\Users\<yourname>\Documents
): solo su usuario ejecutará el código. Esta es la ubicación recomendada. Puede encontrar rápidamente la ubicación de su perfil ejecutandoecho $profile
PowerShell.$PsHome
(C:\Windows\System32\WindowsPowerShell\v1.0
): cada usuario ejecutará este código
IMPORTANTE : recuerde que debe reiniciar sus instancias de PowerShell para aplicar los cambios.
CONSEJOS
Si ambas rutas contienen un
profile.ps1
archivo, primero se ejecuta la de todos los usuarios y luego la específica del usuario. Esto significa que los comandos específicos del usuario sobrescribirán las variables en caso de duplicados o conflictos.Coloque siempre el código en el perfil específico del usuario si no es necesario extender su ejecución a todos los usuarios. Esto es más seguro porque no contamina el espacio de otros usuarios (normalmente, no querrás hacerlo).
Otra ventaja es que no necesita derechos de administrador para agregar el archivo a su espacio de usuario (lo hace para cualquier cosa en C:\Windows\System32).Si realmente necesita ejecutar el código de perfil para cada usuario, tenga en cuenta que la
$PsHome
ruta es diferente para instancias de PowerShell de 32 y 64 bits. Debe considerar ambos entornos si desea ejecutar siempre el código del perfil.Los caminos son:
C:\Windows\System32\WindowsPowerShell\v1.0
para el entorno de 64 bitsC:\Windows\SysWow64\WindowsPowerShell\v1.0
para el de 32 bits (Sí, lo sé, el nombre de la carpeta es contradictorio, pero es correcto ).
No es una buena idea agregar este tipo de cosas directamente a sus $env:WINDIR
carpetas de PowerShell, a menos que realmente desee que su alias sea global.
La forma recomendada es agregarlo a tu perfil personal:
cd $env:USERPROFILE\Documents
md WindowsPowerShell -ErrorAction SilentlyContinue
cd WindowsPowerShell
New-Item Microsoft.PowerShell_profile.ps1 -ItemType "file" -ErrorAction SilentlyContinue
powershell_ise.exe .\Microsoft.PowerShell_profile.ps1
Ahora agregue su alias al archivo Microsoft.PowerShell_profile.ps1 que ahora está abierto:
function Do-ActualThing {
# do actual thing
}
Set-Alias MyAlias Do-ActualThing
Luego guárdelo y actualice la sesión actual con:
. $profile
Nota: Por si acaso, si obtiene un problema de permiso como
CategoryInfo: SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId: Acceso no autorizado
Pruebe el siguiente comando y actualice la sesión nuevamente.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Abra una ventana de Windows PowerShell y escriba:
notepad $profile
Luego cree una función, como por ejemplo:
function goSomewhereThenOpenGoogleThenDeleteSomething {
cd C:\Users\
Start-Process -FilePath "http://www.google.com"
rm fileName.txt
}
Luego escriba esto debajo del nombre de la función:
Set-Alias google goSomewhereThenOpenGoogleThenDeleteSomething
¡Ahora puede escribir la palabra "google" en Windows PowerShell y hacer que ejecute el código dentro de su función!