Odpowiedzi:
Czy jest w porządku, jeśli b.ps1 jest wykonywany w nowym procesie Power Shell? Jeśli tak, poniższe czynności powinny zrobić, co opisujesz.
Invoke-Item (start powershell ((Split-Path $MyInvocation.InvocationName) + "\b.ps1"))
„Wywołanie-Wyrażenie” wykonuje się w tym samym procesie, ale czeka na zakończenie b.ps1.
W a.ps1
& .\b.ps1
sposób, w jaki wywołujesz inne programy
mam to z innego artykułu, ale można go tutaj zastosować: dzięki ( /programming//users/3905079/briantist )
Po pierwsze, jeśli chcesz wykonać wiele połączeń w jednej sesji ze zdalnym komputerem, najpierw utwórz PSSession:
$session = New-PSSession -ComputerName $ComputerName
Następnie użyj tej sesji we wszystkich kolejnych połączeniach:
Invoke-Command -Session $session -File $filename
Invoke-Command -Session $session -ScriptBlock {
# Some code
} Następnie zamknij sesję, gdy skończysz:
Remove-PSSession -Session $session
także jeśli nie wiesz dokładnie, jaki będzie ten skrypt, ale wiesz, gdzie zaczyna się twój skrypt, możesz to zrobić:
$strInst = Get-ChildItem -Path $PSScriptRoot -Filter Import-Carbon.ps1 -recurse -ErrorAction SilentlyContinue -Force | Select Directory
Invoke-Experssion (start Powershell ($strinst\Import-Carbon.ps1)
(to moje)
Użyj magicznej zmiennej $ PSScriptRoot, aby odnieść się do bieżącego katalogu. Następnie wywołaj skrypt B ze znakiem ampersand („operator połączenia”):
$script = $PSScriptRoot+"\b.ps1"
& $script
Jeśli chcesz zachować zmienne z B w zakresie A, możesz uruchomić skrypt za pomocą operatora Dot sourcing:
$script = $PSScriptRoot+"\b.ps1"
. $script