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

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

我已经在整个脚本项目中重复了很多地方。这些文字字符串可以用常量替换吗?

最佳答案

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

$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替换了ValidateScript,因为我意识到(同样在该线​​程中提到),ValidateSet中的代码块根本无法工作。代替对哈希表的键进行验证,可以轻松地使用类似
$validParams = @('opt1', 'opt2')
并在ValidateScript代码块中
{ $_ -in $validParams }
这基本上就是我认为应该回答的问题。

08-24 19:10