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?
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?
Respuestas:
¿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.
En a.ps1,
& .\b.ps1
la forma en que invocas otros programas
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)
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