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?
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?
Risposte:
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.
In a.ps1,
& .\b.ps1
il modo in cui invochi altri programmi
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)
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