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?
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?
Respostas:
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.
Em a.ps1,
& .\b.ps1
do jeito que você invoca outros programas
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)
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