Jak wykonać plik .ps1 z innego pliku .ps1?

14

Mam dwa pliki PowerShell. a.ps1 i b.ps1.

W punkcie centralnym w a.ps1 chcę rozpocząć wykonywanie kodu w b.ps1 i zakończyć skrypt a.ps1.

Jak to zrobić, biorąc pod uwagę, że oba pliki znajdują się w tym samym folderze?

GibboK
źródło
w tej chwili używam „pliku ścieżki” PS bez powodzenia
GibboK

Odpowiedzi:

4

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.

użytkownik2543253
źródło
26

W a.ps1

& .\b.ps1

sposób, w jaki wywołujesz inne programy

chingNotCHing
źródło
2

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)

Kelly Davis
źródło
0

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
Ferro
źródło