You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取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 =代码生成的数组完全一样,这是巧合吗?

问题解答

  1. 是否需要判断ValidateSetAttribute类型?
    有必要。虽然当前版本的Get-GitHubConfiguration的Name参数可能只有ValidateSetAttribute这一个属性,但从严谨性和兼容性考虑必须加上判断:

    • 模块后续版本可能给Name参数添加其他属性(比如非空验证类属性),这类属性没有ValidValues属性,直接访问会报错。
    • 确保只获取ValidateSet定义的合法配置名,避免意外拿到其他属性的无关值。
  2. 可能存在的其他属性类型
    参数的Attributes集合里常见的类型包括:

    • [System.Management.Automation.ValidateNotNullOrEmptyAttribute]:验证参数值非空
    • [System.Management.Automation.ParameterAttribute]:定义参数的基础特性(如是否必填、参数位置)
    • [System.Management.Automation.ValidatePatternAttribute]:用正则表达式验证参数格式
    • [System.Management.Automation.AliasAttribute]:为参数设置别名
  3. 两行代码结果相同的原因
    这是因为当前版本的Get-GitHubConfiguration的Name参数Attributes集合里,恰好只有ValidateSetAttribute这一个属性。直接访问.Attributes.ValidValues时,PowerShell会执行成员枚举——遍历Attributes里的每个对象提取ValidValues,其他属性没有该属性会返回$null,但因为只有一个属性有有效值,最终结果和过滤后一致。但如果后续添加了其他属性,第一行代码会混入$null甚至报错,所以第二行写法更可靠。

内容的提问来源于stack exchange,提问作者lit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 23:25:17