Llame al script de PowerShell PS1 desde otro script de PS1 dentro de Powershell ISE

Resuelto Nicola C. asked hace 13 años • 14 respuestas

Quiero ejecutar una llamada para un script myScript1.ps1 dentro de un segundo script myScript2.ps1 dentro de Powershell ISE.

El siguiente código dentro de MyScript2.ps1 funciona bien desde la administración de Powershell, pero no funciona dentro de PowerShell ISE:

#Call myScript1 from myScript2
invoke-expression -Command .\myScript1.ps1

Obtengo el siguiente error cuando ejecuto MyScript2.ps1 desde PowerShell ISE:

El término '.\myScript1.ps1' no se reconoce como el nombre de un cmdlet, función, archivo de script o programa ejecutable. Verifique la ortografía del nombre o, si se incluyó una ruta, verifique que la ruta sea correcta e inténtelo nuevamente.

Nicola C. avatar Jul 25 '11 19:07 Nicola C.
Aceptado

Para ejecutar un script en el mismo directorio.

En PowerShell 3.0 y posteriores puedes usar la variable automática $PSScriptRoot:

$PSScriptRoot/myScript1.ps1

En PowerShell 1.0 y 2.0 debes usar esta propiedad específica:

& "$(Split-Path $MyInvocation.MyCommand.Path)/myScript1.ps1"

La razón por la que deberías usar eso y nada más se puede ilustrar con este script de ejemplo.

## ScriptTest.ps1
Write-Host "InvocationName:" $MyInvocation.InvocationName
Write-Host "Path:" $MyInvocation.MyCommand.Path

Aquí hay algunos resultados.

PS C:\Usuarios\JasonAr> .\ScriptTest.ps1
Nombre de invocación: .\ScriptTest.ps1
Ruta: C:\Users\JasonAr\ScriptTest.ps1

PS C:\Usuarios\JasonAr> . .\ScriptTest.ps1
Nombre de invocación: .
Ruta: C:\Users\JasonAr\ScriptTest.ps1

PS C:\Usuarios\JasonAr> & ".\ScriptTest.ps1"
Nombre de invocación: &
Ruta: C:\Users\JasonAr\ScriptTest.ps1

En PowerShell 3.0 y posteriores puedes usar la variable automática $PSScriptRoot:

## ScriptTest.ps1
Write-Host "Script:" $PSCommandPath
Write-Host "Path:" $PSScriptRoot
PS C:\Users\jarcher> .\ScriptTest.ps1
Guión: C:\Users\jarcher\ScriptTest.ps1
Ruta: C:\Usuarios\jarcher
JasonMArcher avatar Jul 25 '2011 22:07 JasonMArcher

Estoy llamando a myScript1.ps1 desde myScript2.ps1.

Suponiendo que ambos scripts están en la misma ubicación, primero obtenga la ubicación del script usando este comando:

$PSScriptRoot

Y luego, agregue el nombre del script al que desea llamar de esta manera:

& "$PSScriptRoot\myScript1.ps1"

Esto debería funcionar.

Srijani Ghosh avatar Apr 24 '2017 08:04 Srijani Ghosh