¿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?


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.



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)


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.