我可以在PowerShell函数参数的ValidateSet属性中使用常量吗?

时间:2016-04-15 20:22:01

标签: powershell

我在我的一个PowerShell函数参数上使用ValidateSet属性,如下所示:

[ValidateSet('Development','Test','Production')]
[string]$Context

我重申这是脚本项目的很多地方。这些文字字符串可以用常量替换吗?

2 个答案:

答案 0 :(得分:9)

不,它必须是文字或脚本块。 scriptblock选项似乎毫无意义,因为它似乎使用了scriptblock的文字(字符串)值而不是执行它。

如此有效,从我的测试中,你必须使用文字。

如果你使用动态参数而不是你可以做到这一点,但这样就过度杀戮了。

如果你试图使用变量,它将无法工作(ISE会给你红色波浪形)。帮助文本错误地说它必须是常量,但它意味着文字。

我用:

创建了一个常量
githubApiService.GetuserNames($scope.searchString).$promise.then(function(users){
    $scope.githubData = users;
});

它仍然不起作用。

答案 1 :(得分:1)

添加此内容可帮助其他人搜索类似的解决方案。我正在寻找一种针对全局哈希表的键验证参数的方法。这就是我最终要做的:

onValueChanged(value) {
   let step = 10;
   this.value = Math.ceil(value / step ) * step;
}

我最终用<Slider #sl minValue="10" maxValue="240" (valueChange)="onValueChanged(sl.value)"></Slider> 替换了$global:MyHash = @{ "anyitem" = @{"name" = "somename1"; "count" = 42 }; "someitem" = @{"name" = "another name"; "count" = 1337 }; } function Test-Hash { param ( [Parameter(mandatory = $true)] [ValidateScript( { $_ -in $global:MyHash.Keys } )] [string[]] $items ) } Test-Hash -items anyitem, someitem ,因为我意识到(也如本线程中所述)ValidateSet中的代码块根本无法工作。代替使用哈希表的键进行验证,可以轻松地使用

ValidateSet

并在ValidateScript代码块中

ValidateScript

这基本上就是我认为应该回答的问题。