在validateset中是否可以传递文件的内容?

时间:2015-05-08 04:49:05

标签: powershell powershell-v3.0

在我的脚本中,我传递了需要构建的组件列表

    [ValidateSet("InstalComponent","CoreComponent","SDKComponent","ServiceComponent","TimeComponent")]
   $Components=@("InstalComponent","CoreComponent"),

我们不时会添加新组件而且列表太长。如果有通过文件“GEt-content Components.txt”的方式。这将是好事。有没有办法像这样设置?

2 个答案:

答案 0 :(得分:0)

简答:不。

更长的答案:如果您必须使用一组可配置的值验证参数,您仍然可以通过将验证放在函数体的开头来以旧方式执行:

function Foo {
  Param(
    [Parameter()]$Bar
  )

  $validSet = Get-Content 'C:\path\to\components.txt'
  if ($validSet -notcontains $Bar) {
    throw "Invalid argument for parameter -Bar: $Bar"
  }

  ...
}

答案 1 :(得分:0)

我可能不太明白这个问题,但您可以像这样使用 ValidateScript 验证参数: 创建一个文件“Components.txt”,每个选项在单独的行上有一行,没有引号或逗号。然后像这样验证:

param(
    [ValidateScript({ 
        $Components = Get-Content .\Components.txt
        $Components.Contains($_)
    })
    ]
    [String]$Component)
...