Como executar um .ps1 de outro arquivo .ps1?


14

Eu tenho dois arquivos do PowerShell. a.ps1 e b.ps1.

No ponto central de a.ps1, quero começar a executar o código em b.ps1 e finalizar o script a.ps1.

Como fazer isso, considerando que os dois arquivos estão localizados na mesma pasta?


no momento eu estou usando o PS 'path file' sem sucesso
GibboK

Respostas:


4

Tudo bem se b.ps1 for executado em um novo processo do Power Shell? Nesse caso, o seguinte deve fazer o que você descreve.

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

"Invoke-Expression" é executado no mesmo processo, mas aguarda o término de b.ps1.



2

Eu recebi isso de um artigo diferente, mas pode ser aplicado aqui: obrigado ( /programming//users/3905079/briantist )

Primeiro, se você quiser fazer várias chamadas em uma única sessão para uma máquina remota, primeiro crie uma PSSession:

$session = New-PSSession -ComputerName $ComputerName

Em seguida, use essa sessão em todas as chamadas subseqüentes:

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

} Feche a sessão quando terminar:

Remove-PSSession -Session $session

Além disso, se você não souber exatamente como esse script será, mas saiba como o seu script inicia, você poderá fazer isso:

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

(isso é meu)


0

Use a variável mágica $ PSScriptRoot para se referir ao seu diretório atual. Em seguida, chame o script B com oe comercial ("Operador de chamada"):

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

Se você deseja manter as variáveis ​​de B no escopo de A, é possível executar o script usando o operador Dot sourcing:

$script = $PSScriptRoot+"\b.ps1"
. $script
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.