通过PowerShell脚本在.xml文档中传递不同的参数

时间:2017-04-03 20:33:42

标签: xml powershell parameters

我正在测试一个脚本“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和编程的新手,我已经阅读了几个与我的问题相似的其他线程,但似乎仍无法解决我的问题。请耐心等待,我可以提供更多信息或代码,如果需要。谢谢)

1 个答案:

答案 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