如何从另一个.ps1 文件执行.ps1?

如何从另一个.ps1 文件执行.ps1?

我有两个 PowerShell 文件。a.ps1 和 b.ps1。

我想在 a.ps1 的中心点开始执行 b.ps1 中的代码并终止 a.ps1 脚本。

考虑到两个文件位于同一文件夹中,该怎么做?

答案1

如果在新的 Power Shell 进程中执行 b.ps1 可以吗?如果可以,则以下内容应按您描述的方式执行。

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

“Invoke-Expression” 在同一进程中执行,但等待 b.ps1 终止。

答案2

在 a.ps1 中,

& .\b.ps1

调用其他程序的方式

答案3

使用魔法变量 $PSScriptRoot 来引用当前目录。然后使用 & 符号(“调用运算符”)调用脚本 B:

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

如果要将 B 中的变量保留在 A 的范围内,则可以使用 Dot 源运算符运行脚本:

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

答案4

我从另一篇文章中得到这个,但它可以在这里应用:谢谢(https://stackoverflow.com/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)

(那是我的)

相关内容