【发布时间】:2021-11-27 12:55:58
【问题描述】:
我有几个 PS1,其中的功能格式为“Invoke-T1234”、“Invoke-T1235”等。 我想在 PS 模块中创建一个函数,允许用户通过参数调用这些 PS1 之一,例如“Invoke-Script -Script T1234”,然后运行“Invoke-T1234”。是否可以将变量传递给调用脚本的函数,这样我就不必创建多个“If”子句了?
例如
function Invoke-Script {
param (
[Parameter(Mandatory = $false)]
[string]$Script= ""
)
If ($Script){
Invoke-$Script
}
显然这是行不通的,因为 PowerShell 是按字面意思解释 $Script 而不是值。
我知道我能做到
If ($Script -eq T1234){
Invoke-T1234}
但是 PS1 有很多,所以我想用尽可能少的代码做到这一点。
【问题讨论】:
-
试试
invoke-Expression "Invoke-$Script"。它也可能有助于提供完整路径 -
那行得通。谢谢!
-
@AbrahamZinala
Invoke-Expression(iex) should generally be avoided;绝对don't use it to invoke an external program or PowerShell script。这里更简单、更安全的选择是使用& "Invoke-$Script"
标签: .net powershell