Comment exécuter un .ps1 à partir d'un autre fichier .ps1?

14

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?

GibboK
la source
en ce moment j'utilise le 'fichier de chemin' PS sans succès
GibboK

Réponses:

4

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.

user2543253
la source
26

Dans a.ps1,

& .\b.ps1

la façon dont vous invoquez d'autres programmes

chingNotCHing
la source
2

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)

Kelly Davis
la source
0

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
Ferro
la source