如何使用 invoke-expression 跳出脚本
How to break out of script using invoke-expression
我有一个像菜单一样工作的 powershell 脚本。做出选择后,它会启动另一个 powershell 脚本。
其他脚本相当大,我在脚本中有很多点需要中止该脚本并 return 返回菜单。
我调用其他脚本使用:
invoke-expression -Command "& '.\script.ps1'"
在脚本本身的不同位置,我使用以下命令跳出脚本。
break script
这很好用,因为它终止了脚本,但它不会 return 之前调用的脚本。
带参数的break命令表示打到一个标签。如果不存在标签,它将跳出整个脚本。但考虑到我目前如何调用脚本,它会将所有内容视为一个大脚本并打破所有内容。
在我的下标中,我将以下内容放在文件末尾:
:End_Of_Script
并使用了 break End_Of_Script 但同样失败了。
所以我的问题归结为:
我怎样才能调用另一个脚本并在任何时候中断该脚本并 return 回到以前的脚本而不改变该脚本的完整结构?
下面是下标的片段:
write-host "1. Choice A"
write-host "2. Choice B"
$choice = read-host "What choice?"
switch ($choice)
1
{
write-host "The choice is A"
}
2
{
write-host "The choice is B"
}
default
{
write-host "Invalid choice"
break script
}
get-childitem | foreach-object {
if( $_.Name -like "*test*")
{
break script
}
}
在我的主脚本中,invoke-expression ...
之后的命令从不执行。
您可以使用 exit
来执行此操作。
The exit keyword is best used in functions, and when those functions are called in a script. It's a great way to terminate execution of functions.
参考PowerShell Exit Function & Code Execution | Pluralsight
如果脚本遇到错误需要退出,可以使用throw
更好的提示具体的错误原因
可以使用 & $FilePath
调用另一个脚本,invoke-expression -Command "& '$FilePath'"
是一种麻烦且不必要的用法。
我有一个像菜单一样工作的 powershell 脚本。做出选择后,它会启动另一个 powershell 脚本。
其他脚本相当大,我在脚本中有很多点需要中止该脚本并 return 返回菜单。
我调用其他脚本使用:
invoke-expression -Command "& '.\script.ps1'"
在脚本本身的不同位置,我使用以下命令跳出脚本。
break script
这很好用,因为它终止了脚本,但它不会 return 之前调用的脚本。
带参数的break命令表示打到一个标签。如果不存在标签,它将跳出整个脚本。但考虑到我目前如何调用脚本,它会将所有内容视为一个大脚本并打破所有内容。
在我的下标中,我将以下内容放在文件末尾:
:End_Of_Script
并使用了 break End_Of_Script 但同样失败了。
所以我的问题归结为: 我怎样才能调用另一个脚本并在任何时候中断该脚本并 return 回到以前的脚本而不改变该脚本的完整结构?
下面是下标的片段:
write-host "1. Choice A"
write-host "2. Choice B"
$choice = read-host "What choice?"
switch ($choice)
1
{
write-host "The choice is A"
}
2
{
write-host "The choice is B"
}
default
{
write-host "Invalid choice"
break script
}
get-childitem | foreach-object {
if( $_.Name -like "*test*")
{
break script
}
}
在我的主脚本中,invoke-expression ...
之后的命令从不执行。
您可以使用 exit
来执行此操作。
The exit keyword is best used in functions, and when those functions are called in a script. It's a great way to terminate execution of functions.
参考PowerShell Exit Function & Code Execution | Pluralsight
如果脚本遇到错误需要退出,可以使用throw
更好的提示具体的错误原因
可以使用 & $FilePath
调用另一个脚本,invoke-expression -Command "& '$FilePath'"
是一种麻烦且不必要的用法。