我正在测试一个脚本“Deploy.PS1”。在其中我传递了一些参数:
privateContext
目前,当我运行脚本时,我必须运行脚本并传递参数“。\ Deploy.PS1 p1 p2 p3 p4 p5”,它运行正常。我正在尝试创建一个已包含参数的.xml文档。为此,我发现了一个帮助我的线程。现在.xml文件看起来像这样:
NSPersistentStoreCoordinators
我需要的其他帮助是根据我要部署的环境传递不同的参数。
例如: 我想用参数“p1 p2 p3 p4 p5”,“a1 a2 a3 a4 a5”或“b1 b2 b3 b4 b5”运行Deploy.PS1。我如何在Deploy.PS1脚本或.xml文件中指定我只想传递p,a或b参数,具体取决于我是否要使用p,a或b环境?
(注意:我是Stack Overflow和编程的新手,我已经阅读了几个与我的问题相似的其他线程,但似乎仍无法解决我的问题。请耐心等待,我可以提供更多信息或代码,如果需要。谢谢)
答案 0 :(得分:1)
如果这是我,我会以不同的方式做到这一点。我将使用描述环境的键和包含这些环境的参数集的值来创建哈希表。类似的东西:
$ParamSets = @{
'PreProduction' = [PSCustomObject]@{
'param1' = 'p1'
'param2' = 'p2'
'param3' = 'p3'
'param4' = 'p4'
'param5' = 'p5'
}
'Production' = [PSCustomObject]@{
'param1' = 'a1'
'param2' = 'a2'
'param3' = 'a3'
'param4' = 'a4'
'param5' = 'a5'
}
'Failover' = [PSCustomObject]@{
'param1' = 'b1'
'param2' = 'b2'
'param3' = 'b3'
'param4' = 'b4'
'param5' = 'b5'
}
}
然后,如果您希望将其作为XML文件,则可以使用Export-CliXml
将其另存为XML文件。
$ParamSets | Export-CliXml .\MyParams.xml
既然你已经定义了那些,你的Deploy.ps1脚本可以让它的参数稍微改变一下来接受一个对象,并将属性更改为参数:
param(
[Parameter(Mandatory = $True,valueFromPipelinebyPropertyName=$true)][String] $param1,
[Parameter(Mandatory = $True,valueFromPipelinebyPropertyName=$true)][String] $param2,
[Parameter(Mandatory = $True,valueFromPipelinebyPropertyName=$true)][String] $param3,
[Parameter(Mandatory = $True,valueFromPipelinebyPropertyName=$true)][String] $param4,
[Parameter(Mandatory = $True,valueFromPipelinebyPropertyName=$true)][String] $param5
)
然后你可以将你想要的任何环境传递给脚本:
$ParamSets['Failover'] | .\Deploy.ps1
编辑:由于您遇到了问题,我在这里测试的是什么。我开始创建哈希表,然后将其导出到文件中,就像我上面描述的那样。然后我导入了该文件,并将其保存为新变量。
$MyConfig = Import-CliXml .\MyParams.xml
然后我制作了一个简单的测试脚本:
param(
[Parameter(Mandatory = $True,valueFromPipelinebyPropertyName=$true)][String] $param1,
[Parameter(Mandatory = $True,valueFromPipelinebyPropertyName=$true)][String] $param2,
[Parameter(Mandatory = $True,valueFromPipelinebyPropertyName=$true)][String] $param3,
[Parameter(Mandatory = $True,valueFromPipelinebyPropertyName=$true)][String] $param4,
[Parameter(Mandatory = $True,valueFromPipelinebyPropertyName=$true)][String] $param5
)
"Param1: $param1"
"Param2: $param2"
"Param3: $param3"
"Param4: $param4"
"Param5: $param5"
我把它保存到当前文件夹(C:\ Temp,但这不重要)作为test.ps1。然后我通过了“故障转移”#39;设置为脚本:
$MyConfig['Failover'] | .\test.ps1
结果是:
Param1: b1
Param2: b2
Param3: b3
Param4: b4
Param5: b5