Відповіді:
Чи добре, якщо b.ps1 виконується в новому процесі Power Shell? Якщо так, слід описати описане нижче.
Invoke-Item (start powershell ((Split-Path $MyInvocation.InvocationName) + "\b.ps1"))
"Invoke-Expression" виконується в тому самому процесі, але чекає припинення b.ps1.
У a.ps1,
& .\b.ps1
як ви викликаєте інші програми
я отримав це з іншої статті, але це можна застосувати тут: спасибі ( /programming//users/3905079/briantist )
По-перше, якщо ви хочете робити кілька дзвінків за один сеанс на віддаленій машині, спочатку створіть PSSession:
$session = New-PSSession -ComputerName $ComputerName
Потім використовуйте цей сеанс у всіх наступних дзвінках:
Invoke-Command -Session $session -File $filename
Invoke-Command -Session $session -ScriptBlock {
# Some code
} Потім закрийте сеанс, коли закінчите:
Remove-PSSession -Session $session
також якщо ви точно не знаєте, який саме сценарій буде, але знаєте, що ваш сценарій починається, ви можете зробити це:
$strInst = Get-ChildItem -Path $PSScriptRoot -Filter Import-Carbon.ps1 -recurse -ErrorAction SilentlyContinue -Force | Select Directory
Invoke-Experssion (start Powershell ($strinst\Import-Carbon.ps1)
(це моє)
Використовуйте магічну змінну $ PSScriptRoot для позначення поточного каталогу. Потім викличте сценарій B за допомогою ampersand ("Оператор виклику"):
$script = $PSScriptRoot+"\b.ps1"
& $script
Якщо ви хочете зберегти змінні з B в області A, ви можете запустити скрипт за допомогою оператора пошуку точок:
$script = $PSScriptRoot+"\b.ps1"
. $script