Con PowerShell, puede ejecutar scripts como comandos si se colocan en directorios contenidos en la variable de entorno 'PATH'. Para ver qué directorios están en el Sendero, puede utilizar:
$env:Path -split ';'| sort
podrá modificar la ruta de acceso de forma permanente de Propiedades del sistema de Windows para incluir la ubicación de las secuencias de comandos, o podrá modificar temporalmente la ruta de acceso desde el interior de su perfil o script En su caso particular, se podría añadir lo siguiente a su perfil para añadir el directorio del perfil de la ruta:
$ScriptRoot = Split-Path $SCRIPT:MyInvocation.MyCommand.Path
if(($env:Path -split ';') -notcontains $ScriptRoot) {
$env:Path += ';' + $ScriptRoot
}
continuación, puede ejecutar el comando como:
PS >$timer = New-Object Timers.Timer
PS >Register-TemporaryEvent $timer Disposed { [Console]::Beep(100,100) }
Nota: Si la lengüeta de completar, se completará como Register-TemporaryEvent.ps1
, pero puede eliminar el '.ps1' y seguirá funcionando.
¿Eso sigue siendo cierto? Tengo una carpeta dentro de mi PATH con archivos .ps1, la extensión .ps1 en mi PATHEXT, y cuando intento invocar el script por su nombre, aparece "El término 'foo' no se reconoce como el nombre de cmdlet, función, archivo de script o programa operable ". (pero funciona desde un indicador de cmd) – zneak
Siempre me ha funcionado en todas las versiones de PowerShell de v2 a v5. Si ingresas '$ env: PATH' en el prompt de PowerShell, ¿ves la carpeta allí? Tal vez PATH no se agregó de forma permanente o explorer.exe no se ha reiniciado desde que se modificó PATH. Además, .ps1 no necesita estar en PATHEXT para llamar al script desde powershell. – Rynant