Come eseguire un .ps1 da un altro file .ps1?


14

Ho due file di PowerShell. a.ps1 e b.ps1.

In un punto centrale in a.ps1 voglio iniziare l'esecuzione del codice in b.ps1 e terminare lo script a.ps1.

Come farlo considerando che entrambi i file si trovano nella stessa cartella?


al momento sto usando PS 'file di percorso' senza successo
GibboK

Risposte:


4

Va bene se b.ps1 viene eseguito in un nuovo processo di Power Shell? In tal caso, quanto segue dovrebbe fare ciò che descrivi.

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

"Invoke-Expression" viene eseguito nello stesso processo ma attende la chiusura di b.ps1.



2

l'ho preso da un altro articolo ma può essere applicato qui: grazie ( /programming//users/3905079/briantist )

Innanzitutto, se si desidera effettuare più chiamate in una singola sessione a una macchina remota, creare prima una sessione PSSession:

$session = New-PSSession -ComputerName $ComputerName

Quindi utilizzare quella sessione in tutte le chiamate successive:

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

} Quindi al termine della sessione:

Remove-PSSession -Session $session

anche se non sai esattamente quale sarà lo script, ma sai di aver avviato lo script, puoi farlo:

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

(quello è mio)


0

Utilizzare la variabile magica $ PSScriptRoot per fare riferimento alla directory corrente. Quindi chiama lo script B con la e commerciale ("Operatore di chiamata"):

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

Se si desidera mantenere le variabili da B nell'ambito di A, è possibile eseguire lo script utilizzando l'operatore Dot sourcing:

$script = $PSScriptRoot+"\b.ps1"
. $script
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.