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?


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.



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)


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.