Cómo crear alias permanentes de PowerShell

142

Quiero crear una aliasde una cmdletque 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 Gotoalias, 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, ¿hay una forma clara y directa de seguir teniendo un alias después de crearlo a través de diferentes sesiones

AymenDaoudi
fuente
En mi opinión, es mucho mejor poner guiones en la RUTA. De esa manera, el comando estará disponible instantáneamente para todos sus shells abiertos y si lo cambia, el cambio se propagará a todos los usos posteriores sin tener que recargar $ profile o algo así.
masterxilo

Respuestas:

112

ACTUALIZADO - Enero 2017

Es posible almacenar en un profile.ps1archivo cualquier código de PowerShell que se ejecutará cada vez que se inicie PowerShell. Hay al menos 6 rutas diferentes donde almacenar el código dependiendo de qué usuario tenga que ejecutarlo. Solo podemos considerar 2 de ellos: las rutas "todos los usuarios" y "solo su usuario".

Entonces, para responder a su pregunta, solo tiene que crear un profile.ps1archivo que contenga el código que desea ejecutar, es decir

New-Alias Goto Set-Location

y guárdelo en la ruta correcta:

  • "$Home\Documents" (C: \ Users \ yourname \ Documents): solo su usuario ejecutará el código.
  • $PsHome (C: \ Windows \ System32 \ WindowsPowerShell \ v1.0): cada usuario ejecutará el código.

Para aplicar los cambios, cierre todas las instancias de PowerShell abiertas y reinícielas.

CONSEJOS

  • Si ambas rutas contienen un profile.ps1archivo, primero se ejecuta el usuario completo, luego los usuarios específicos.

  • Siempre coloque el código en el perfil específico del usuario si no es necesario extender su ejecución a cada usuario. No necesita derechos de administrador para agregar el archivo a su espacio de usuario (de lo contrario, sí lo hace) y no contamina el espacio de otros usuarios.

  • ¡RECUERDA! La $PsHomeruta es diferente entre instancias de 32 bits y 64 bits de powershell, por lo que debe tener en cuenta ambos entornos si desea ejecutar siempre el código de perfil. Por lo general, las rutas son C:\Windows\System32\WindowsPowerShell\v1.0para el entorno de 64 bits y C:\Windows\SysWow64\WindowsPowerShell\v1.0para el de 32 bits.

Naigel
fuente
9
no hay error, simplemente no funcionó, no estoy seguro de si se trata de un problema de permisos. Realmente lo puse a trabajar (debería comentar antes). Tuve que crear la carpeta \Users\{ME}\Documents\WindowsPowerShelly luego agregar que Microsoft.PowerShell_profile.ps1ninguna de las otras rutas funciona para mí.
2
Según el artículo vinculado, el uso "$HOME\Documents\WindowsPowerShell"y la asignación de nombres Microsoft.PowerShell_profile.ps1restringen el alcance a los que no son ISE y al host actual, pero no deberían ser una cuestión de permisos (lo mismo "$Home\Documents\profile.ps1" should apply). Tal vez no sea realmente así, lo intentaré, gracias por la información
Naigel
2
Hola @Naigel, debo usar este enfoque para que funcione: superuser.com/questions/516700/…, así que la solución final para mí fue crear el archivo para el perfil: New-Item -path $profile -type file -forceque creó la carpeta y el archivoDocuments\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Eagle
57
La mejor manera de obtener la ubicación del perfil podría ser ejecutar "echo $ profile" en su ventana de PowerShell.
Rahul Jha
2
¡Recuerde hacer una copia de seguridad de su archivo profile.ps1, ya que Windows Creators Update parece borrar el archivo en su ubicación predeterminada!
gooleem
109

No es una buena idea agregar este tipo de cosas directamente a sus $env:WINDIRcarpetas de PowerShell.
La forma recomendada es agregarlo a su 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: UnauthorizedAccess

Pruebe el siguiente comando y actualice la sesión nuevamente.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Chase Florell
fuente
1
Gran comentario Muy claro, aunque mi PowerShell no tiene toque.
JustinB
9
Para permitir la ejecución de mi script de perfil, tuve que hacer un paso adicional. Ejecute Powershell como administrador y ejecútelo Set-ExecutionPolicy RemoteSigned -Scope CurrentUser. La -Scopeopción lo hace un poco más seguro.
zombat
2
Este es un gran método! Tenga en cuenta que la función en sí misma también está disponible en el shell, por lo que realmente no necesita la parte Set-Alias. Solo llama a la función MyAlias. Además, para transmitir argumentos, use @Args, por ejemplofunction gs { git status @Args }
Automatico
3
@Automatico Me gusta ser explícito sobre el Set-Aliasporque me gusta nombrar mis métodos usando las convenciones de PS apropiadas con los verbos apropiados. Pero sí, si no eres exigente, puedes nombrar tu método como quieras invocar.
Chase Florell
1
@zombat Esto es exactamente con lo que estaba luchando, durante horas. Gracias, ya he terminado.
Jawad Mansoor
28

2018, Windows 10

Puede vincular a cualquier archivo o directorio con la ayuda de un simple script de PowerShell.

Escribir un script de acceso directo a un archivo

Abra Windows PowerShell ISE. En el panel de script, escriba:

New-Alias ${shortcutName} ${fullFileLocation}

Luego dirígete al panel de línea de comandos. Encuentre su dirección de perfil de usuario de PowerShell con echo $profile. Guarde el script en esta dirección.

ingrese la descripción de la imagen aquí

El script en la dirección de perfil de PowerShell se ejecutará cada vez que abra powershell. El acceso directo debería funcionar con cada nueva ventana de PowerShell.

Escribir una secuencia de comandos de acceso directo de directorio

Requiere otra línea en nuestro script.

function ${nameOfFunction} {set-location ${directory_location}}
New-Alias ${shortcut} ${nameOfFunction} 

El resto es exactamente igual.

ingrese la descripción de la imagen aquí

Habilitar scripts de PowerShell

Por defecto, los scripts de PowerShell están bloqueados. Para habilitarlos, abra la configuración -> Actualización y seguridad -> Para desarrolladores. Seleccione el modo de desarrollador (puede requerir reiniciar). Selección del modo desarrollador Windows 10.

Desplácese hacia abajo hasta la sección PowerShell, marque la opción "Cambiar política de ejecución ..." y aplique.

Habilitar scripts de PowerShell

Ben Carp
fuente
2
echo $profilees un consejo increíble para ayudar a encontrar la ubicación correcta para agregar el archivo. Gracias por la respuesta integral
Pedro Martins Timóteo da Costa
19

Sencillo. Por ejemplo...

Abra una ventana de Windows PowerShell y escriba:

notepad $profile

Luego cree una función, como:

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!

Sterling Bourne
fuente
$ profile no parece ser una variable de entorno predeterminada en Windows 10. ¿A qué se supone que apunta?
wordsforthewise
@wordsforthewise: la variable automática $ PROFILE almacena las rutas a los perfiles de PowerShell que están disponibles en la sesión actual. Está incluido en Windows PowerShell.
Sterling Bourne
1
Esto fue sin duda la solución más simple proporcionada.
Phill
Tenía que habilitar 'Habilitar scripts de PowerShell' (en otra respuesta) para que esto funcione. En serio súper simple!
Rocky Kev
10

Solo para agregar a esta lista de posibles ubicaciones ...

Esto no funcionó para mí: \Users\{ME}\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Sin embargo esto hizo: \Users\{ME}\OneDrive\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Si no tiene un perfil o está buscando configurar uno, ejecute el siguiente comando, creará la carpeta / archivos necesarios e incluso le dirá dónde vive. New-Item -path $profile -type file -force

golden_grahams
fuente
5

Para crear el archivo profile1.psl, escriba el siguiente comando:

new-item $ PROFILE.CurrentUserAllHosts -ItemType file -Force

para acceder al archivo, escriba el siguiente comando:

ise $ PROFILE.CurrentUserAllHosts

tenga en cuenta que si no lo ha hecho antes, verá que no podrá ejecutar el script debido a su política de ejecución, que debe cambiar a Sin restricciones de Restringido (predeterminado).

para hacerlo, cierre el script y luego escriba este comando:

Set-ExecutionPolicy -Scope CurrentUser

luego:

Remoto Firmado

entonces este comando nuevamente:

ise $ PROFILE.CurrentUserAllHosts

luego, finalmente escriba sus alias en el script, guárdelo, y deberían ejecutarse cada vez que ejecute powershell, incluso después de reiniciar su computadora.

Michael Sanders
fuente
3
Es probable que desee: Set-ExecutionPolicy RemoteSigned. No vayas recomendando Unrestricted. Fuente: itprotoday.com/management-mobility/…
PhilT
2

Esto es un poco sofisticado ... pero funciona:

Paso 1: crear un perfil de Powershell:

FILE: install_profile.ps1
# THIS SCRIPT BLOWS AWAY YOUR DEFAULT POWERSHELL PROFILE SCRIPT
#   AND INSTALLS A POINTER TO A GLOBAL POWERSHELL PROFILE

$ErrorActionPreference = "Stop"

function print ([string]$msg)
{
    Write-Host -ForegroundColor Green $msg
}

print ""

# User's Powershell Profile
$psdir  = "$env:USERPROFILE\Documents\WindowsPowerShell"
$psfile = $psdir + "\Microsoft.PowerShell_profile.ps1"

print "Creating Directory: $psdir"
md $psdir -ErrorAction SilentlyContinue | out-null

# this is your auto-generated powershell profile to be installed
$content = @(
    "",
    ". ~/Documents/tools/profile.ps1",
    ""
)

print "Creating File: $psfile"
[System.IO.File]::WriteAllLines($psfile, $content)

print ""

# Make sure Powershell profile is readable
Set-ExecutionPolicy -Scope CurrentUser Unrestricted

Paso 2: luego en herramientas ~ / Documentos / herramientas / perfil.ps1:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

Paso 3:

$ Set-ExecutionPolicy -Scope CurrentUser Unrestricted $. ./install_profile.ps1

Bill Moore
fuente