J'ai deux fichiers PowerShell. a.ps1 et b.ps1.
À un point central dans a.ps1, je veux commencer à exécuter du code dans b.ps1 et terminer le script a.ps1.
Comment faire en considérant que les deux fichiers se trouvent dans le même dossier?
J'ai deux fichiers PowerShell. a.ps1 et b.ps1.
À un point central dans a.ps1, je veux commencer à exécuter du code dans b.ps1 et terminer le script a.ps1.
Comment faire en considérant que les deux fichiers se trouvent dans le même dossier?
Réponses:
Est-ce correct si b.ps1 est exécuté dans un nouveau processus Power Shell? Si c'est le cas, ce qui suit devrait faire ce que vous décrivez.
Invoke-Item (start powershell ((Split-Path $MyInvocation.InvocationName) + "\b.ps1"))
"Invoke-Expression" s'exécute dans le même processus mais attend la fin de b.ps1.
Dans a.ps1,
& .\b.ps1
la façon dont vous invoquez d'autres programmes
je l'ai obtenu d'un article différent mais il peut s'appliquer ici: merci ( /programming//users/3905079/briantist )
Tout d'abord, si vous souhaitez effectuer plusieurs appels en une seule session vers une machine distante, créez d'abord une session PSSession:
$session = New-PSSession -ComputerName $ComputerName
Utilisez ensuite cette session dans tous les appels suivants:
Invoke-Command -Session $session -File $filename
Invoke-Command -Session $session -ScriptBlock {
# Some code
} Fermez ensuite la session lorsque vous avez terminé:
Remove-PSSession -Session $session
aussi si vous ne savez pas exactement ce que sera le script, mais sachez que votre script démarre, vous pouvez le faire:
$strInst = Get-ChildItem -Path $PSScriptRoot -Filter Import-Carbon.ps1 -recurse -ErrorAction SilentlyContinue -Force | Select Directory
Invoke-Experssion (start Powershell ($strinst\Import-Carbon.ps1)
(c'est à moi)
Utilisez la variable magique $ PSScriptRoot pour faire référence à votre répertoire actuel. Appelez ensuite le script B avec l'esperluette ("Opérateur d'appel"):
$script = $PSScriptRoot+"\b.ps1"
& $script
Si vous souhaitez conserver les variables de B dans la portée de A, vous pouvez exécuter le script à l'aide de l'opérateur de sourcing Dot:
$script = $PSScriptRoot+"\b.ps1"
. $script