Wie führe ich eine .ps1 aus einer anderen .ps1-Datei aus?

14

Ich habe zwei PowerShell-Dateien. a.ps1 und b.ps1.

An einem Mittelpunkt in a.ps1 möchte ich mit der Ausführung von Code in b.ps1 beginnen und das a.ps1-Skript beenden.

Wie geht das, wenn man bedenkt, dass sich beide Dateien im selben Ordner befinden?

GibboK
quelle
Im Moment benutze ich PS 'Path File' ohne Erfolg
GibboK

Antworten:

4

Ist es in Ordnung, wenn b.ps1 in einem neuen Power Shell-Prozess ausgeführt wird? Wenn ja, sollte das Folgende das tun, was Sie beschreiben.

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

"Invoke-Expression" wird im selben Prozess ausgeführt, wartet jedoch auf die Beendigung von b.ps1.

user2543253
quelle
26

In a.ps1,

& .\b.ps1

die Art und Weise, wie Sie andere Programme aufrufen

chingNotCHing
quelle
2

Ich habe dies aus einem anderen Artikel erhalten, aber es kann hier angewendet werden: Danke ( /programming//users/3905079/briantist )

Wenn Sie in einer Sitzung mehrere Anrufe an einen Remotecomputer tätigen möchten, erstellen Sie zunächst eine PSSession:

$session = New-PSSession -ComputerName $ComputerName

Verwenden Sie diese Sitzung dann in allen nachfolgenden Aufrufen:

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

} Schließen Sie dann die Sitzung, wenn Sie fertig sind:

Remove-PSSession -Session $session

Auch wenn Sie nicht genau wissen, wie das Skript aussehen wird, aber wissen, wo Ihr Skript startet, können Sie Folgendes tun:

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

(Das ist meins)

Kelly Davis
quelle
0

Verwenden Sie die magische Variable $ PSScriptRoot, um auf Ihr aktuelles Verzeichnis zu verweisen. Rufen Sie dann Skript B mit dem kaufmännischen Und ("Anrufoperator") auf:

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

Wenn Sie die Variablen von B im Bereich von A behalten möchten, können Sie das Skript mit dem Dot-Sourcing-Operator ausführen:

$script = $PSScriptRoot+"\b.ps1"
. $script
Ferro
quelle