首页 > 解决方案 > Powershell 跳转到另一个脚本

问题描述

DOS 和类似 DOS 的命令文件的一个鲜为人知的特性是,以批处理文件的名称(路径)开头的行将控制权转移到新文件,没有返回(与“调用”命令相反,执行完成时返回)。

我也可以用 Powershell 做到这一点吗?这有点像“goto otherscript.ps1”,但我知道 Powershell 中没有 goto。

问的原因是,如果有更改,我想从 subversion 更新当前正在执行的脚本,然后从顶部执行更新的文件。

标签: windowspowershell

解决方案


您可以使用点源来运行外部脚本 - 例如:

main.ps1

. ".\sub.ps1"

sub.ps1

write-host "aaa"

它更像是“包含”而不是 goto,因为它在当前脚本的上下文中运行,并且可以访问/修改主脚本中的变量:

main.ps1

. ".\sub.ps1"
write-host $x
# ^ outputs "bbb"

sub.ps1

$x = "bbb"
write-host "aaa"

如果您使用调用运算符,您可以防止点源脚本访问主脚本的上下文- 例如

main.ps1

& { . ".\sub.ps1" }
write-host $x
# ^ outputs a blank line

sub.ps1

$x = "bbb"
write-host "aaa"

如果您exit在点源脚本之后放置一个,它将结束主脚本并且有点像 goto ...


推荐阅读