2012-01-24 22 views

Respuesta

2

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.

+0

¿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

+0

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

2

Puede obtener el contenido del archivo de script, encerrarlo en una función e invocar el código para crear la función.

$sb = Get-Content .\script.ps1 | Out-String 
Invoke-Expression "function Register-TemporaryEvent {`n $sb `n} " 
Cuestiones relacionadas