Powershell:不同环境的两个参数定义?

标签 powershell powershell-remoting powershell-5.0

我有一个又长又大的 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/

相关文章:

powershell - 使用 login-azurermaccount 登录后,Get-AzureRMSubscription 会产生错误

powershell - Powershell选择对象跳过多行?

xml - XML文件格式-删除杂散CRLF

powershell - PowerShell 控制台输出中的可点击超链接

powershell - 从模块中导出 Powershell 5 枚举声明

Powershell New-ScheduledTaskSettingsSet

powershell - 映射的网络驱动器未显示在“我的电脑”中

string - PowerShell用日期和时间替换两个字符串之间的文本

powershell - 通过命令行启用Powershell组策略异常

powershell - Get-Process 到远程计算机不起作用,但 Invoke-Command 可以