获取GitHub配置:是否需测试属性为ValidateSetAttribute?还有哪些类型?
关于PowerShellForGitHub配置导出脚本的疑问
我想要写一个能导出所有GitHub配置设置的脚本。PowerShellForGitHub模块里的Get-GitHubConfiguration函数一次只能返回一项配置,而且得提前知道配置名称才行,不同版本的模块支持的配置项还不一样。所以我写了一段代码,通过获取该函数Name参数的ValidateSet里的所有配置名称,再逐一输出对应的配置值。
[CmdletBinding()] #$Names = (Get-Command -Name 'Get-GitHubConfiguration').Parameters.Name.Attributes.ValidValues $Names = ((Get-Command -Name 'Get-GitHubConfiguration').Parameters.Name.Attributes | Where-Object { $_ -is [System.Management.Automation.ValidateSetAttribute] }).ValidValues foreach ($Name in $Names) { [PSCustomObject]@{ Name = $Name Value = Get-GitHubConfiguration -Name $Name } }
我的疑问:
- 有没有必要特意判断属性类型是
[System.Management.Automation.ValidateSetAttribute]? - 除了这个类型,
Name参数的Attributes里还可能存在哪些其他类型的属性? - 注释掉的那行和下面的
$Names =代码生成的数组完全一样,这是巧合吗?
问题解答
是否需要判断ValidateSetAttribute类型?
有必要。虽然当前版本的Get-GitHubConfiguration的Name参数可能只有ValidateSetAttribute这一个属性,但从严谨性和兼容性考虑必须加上判断:- 模块后续版本可能给
Name参数添加其他属性(比如非空验证类属性),这类属性没有ValidValues属性,直接访问会报错。 - 确保只获取
ValidateSet定义的合法配置名,避免意外拿到其他属性的无关值。
- 模块后续版本可能给
可能存在的其他属性类型
参数的Attributes集合里常见的类型包括:[System.Management.Automation.ValidateNotNullOrEmptyAttribute]:验证参数值非空[System.Management.Automation.ParameterAttribute]:定义参数的基础特性(如是否必填、参数位置)[System.Management.Automation.ValidatePatternAttribute]:用正则表达式验证参数格式[System.Management.Automation.AliasAttribute]:为参数设置别名
两行代码结果相同的原因
这是因为当前版本的Get-GitHubConfiguration的Name参数Attributes集合里,恰好只有ValidateSetAttribute这一个属性。直接访问.Attributes.ValidValues时,PowerShell会执行成员枚举——遍历Attributes里的每个对象提取ValidValues,其他属性没有该属性会返回$null,但因为只有一个属性有有效值,最终结果和过滤后一致。但如果后续添加了其他属性,第一行代码会混入$null甚至报错,所以第二行写法更可靠。
内容的提问来源于stack exchange,提问作者lit
相关产品推荐
相关产品推荐

