¿Cómo ejecutar un .ps1 desde otro archivo .ps1?

14

Tengo dos archivos de PowerShell. a.ps1 y b.ps1.

En un punto central en a.ps1, quiero comenzar a ejecutar código en b.ps1 y terminar el script a.ps1.

¿Cómo hacerlo teniendo en cuenta que ambos archivos se encuentran en la misma carpeta?

GibboK
fuente
en este momento estoy usando el 'archivo de ruta' de PS sin éxito
GibboK

Respuestas:

4

¿Está bien si b.ps1 se ejecuta en un nuevo proceso de Power Shell? Si es así, lo siguiente debe hacer lo que usted describe.

Invoke-Item (start powershell ((Split-Path $MyInvocation.InvocationName) + "\b.ps1"))

"Invoke-Expression" se ejecuta en el mismo proceso pero espera la terminación de b.ps1.

usuario2543253
fuente
26

En a.ps1,

& .\b.ps1

la forma en que invocas otros programas

chingNotCHing
fuente
2

Obtuve esto de un artículo diferente, pero puede aplicarse aquí: gracias ( /programming//users/3905079/briantist )

Primero, si desea realizar múltiples llamadas en una sola sesión a una máquina remota, primero cree una PSSession:

$session = New-PSSession -ComputerName $ComputerName

Luego use esa sesión en todas las llamadas posteriores:

Invoke-Command -Session $session -File $filename
Invoke-Command -Session $session -ScriptBlock {
# Some code

} Luego cierre la sesión cuando haya terminado:

Remove-PSSession -Session $session

Además, si no sabe exactamente qué script será, pero sepa dónde comienza su script, puede hacer esto:

$strInst = Get-ChildItem -Path $PSScriptRoot -Filter Import-Carbon.ps1 -recurse -ErrorAction SilentlyContinue -Force | Select Directory
Invoke-Experssion (start Powershell ($strinst\Import-Carbon.ps1)

(eso es mio)

Kelly Davis
fuente
0

Use la variable mágica $ PSScriptRoot para referirse a su directorio actual. Luego llame a la secuencia de comandos B con el ampersand ("Operador de llamada"):

$script = $PSScriptRoot+"\b.ps1"
& $script

Si desea mantener las variables de B dentro del alcance de A, puede ejecutar el script utilizando el operador de abastecimiento de puntos:

$script = $PSScriptRoot+"\b.ps1"
. $script
Ferro
fuente