如何根据PowerShell中的长集合验证参数?

如何根据PowerShell中的长集合验证参数?,powershell,parameters,Powershell,Parameters,我正在写一个脚本,它将接受一些参数。我需要验证一个用户必须输入的参数。我用于[ValidateSet(…)]块的Param功能。 但是,我需要根据非常长的哈希表验证此参数。 由于我的哈希表是在Param之后声明的,因此如何根据该哈希表的键验证用户输入?正确地指出,在您的情况下,您需要在脚本中执行参数验证,因为要验证的值在脚本声明(解析)时还不可用时间;使用脚本块(为了简单起见)演示该技术: & { param( [string] $SomeParam )

我正在写一个脚本,它将接受一些参数。我需要验证一个用户必须输入的参数。我用于
[ValidateSet(…)]
块的
Param
功能。 但是,我需要根据非常长的
哈希表
验证此参数。 由于我的哈希表是在
Param
之后声明的,因此如何根据该哈希表的键验证用户输入?

正确地指出,在您的情况下,您需要在脚本中执行参数验证,因为要验证的值在脚本声明(解析)时还不可用时间;使用脚本块(为了简单起见)演示该技术:

& { 
   param(
    [string] $SomeParam
   ) 

   # The hashtable to validate against.
   $hashTable = @{ foo = 1; bar = 2; baz = 3 }

   # Check the -SomeParam argument against the keys of $hashTable.
   if (-not $hashTable.ContainsKey($SomeParam)) { 
     Throw "Invalid -SomeParam argument: $SomeParam"
   }

   # ...

}  bar  # OK, because 'bar' is a key in $hashTable

参数验证不是这样工作的。如果您需要针对
Param()
块后声明的内容进行验证,那么您也需要将验证代码放在块后。