我有一个又长又大的 PS5 powershell 脚本,其中有几个参数,在脚本文件开头的 param() 部分中定义。 这些参数是字符串和哈希表,包括主机名、IP 地址、域等。
此脚本在我的环境中运行得非常好,但现在它也应该在所有参数都不同的第二个环境中运行。
因此,在不更改所有脚本命令的情况下,我想定义具有不同值的第二个参数部分,并在脚本顶部提供一个“switch”变量,例如:
param1(
... my params1 ...)
param2(
... my params2 ... )
string configToUse = "param1"
我偶然发现了 powershell 参数集,但我想这不是我想要的。 我过去还使用了一些节点定义文件(.psd1),但我想将所有内容保留在一个文件中,该文件只需双击即可执行,而无需在命令行上传递 -param1 或 -param2。
有人可以指出我正确的方向吗?
谢谢!
最佳答案
param
语句仅用于按照您提到的方式使用 -param "value"
语法将参数传递给脚本,我会强烈建议以这种方式将参数传递给脚本,而不是将静态值放入脚本中!它更干净、更健壮、更透明、更易于维护、更便携且更容易记录。
如果您仍然需要双击功能,可能是为了方便起见,您可以例如创建一个调用脚本的批处理文件。它只是一行(@
阻止该行被打印到控制台):
@powershell -File "your-script.ps1" -Param1 "value 1"
然后,您可以为每个环境创建单独的批处理文件。
call-mysript-env-1.bat
call-mysript-env-2.bat
或者,您可以使用快捷方式来完成相同的任务,以相同的方式使用参数调用脚本。
如果,无论出于何种原因,您确实不想这样做,您可以完全省略 param
语句(您没有使用无论如何,它的功能)。毕竟参数基本上只是常规变量。你可以这样做:
### start of parameters ###
$configToUse = "param1"
switch ($configToUse) {
"param1" {
$MyParam = "value 1"
}
"param2" {
$MyParam = "value 2"
}
}
#### end of parameters ###
# rest of your script ....
关于Powershell:不同环境的两个参数定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64424943/