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

PowerShell函数中如何获取所有已赋值(非仅绑定)参数?

批量赋值WinForms Label控件属性(含默认参数)的PowerShell实现

要实现自动将函数所有参数(包括用户传入值和默认值)批量赋值给System.Windows.Forms.Label对象,无需手动逐个处理,可通过以下方案实现:

完整函数示例

function New-Label {
    [CmdletBinding()]
    param(
        [string]$Text = "Default Label Text",
        [bool]$AutoSize = $true,
        [System.Drawing.Color]$ForeColor = [System.Drawing.Color]::Black,
        [System.Drawing.Point]$Location = [System.Drawing.Point]::Empty,
        [int]$FontSize = 10,
        [string]$FontFamily = "Segoe UI"
    )

    # 初始化Label对象
    $label = New-Object System.Windows.Forms.Label

    # 获取函数定义的所有参数名
    $allParameterNames = $MyInvocation.MyCommand.Parameters.Keys

    foreach ($paramName in $allParameterNames) {
        # 获取参数值:用户传入的值优先,否则取默认值
        $paramValue = if ($PSBoundParameters.ContainsKey($paramName)) {
            $PSBoundParameters[$paramName]
        } else {
            Get-Variable -Name $paramName -ValueOnly -ErrorAction SilentlyContinue
        }

        # 仅当Label对象存在对应属性时才赋值
        if ($paramValue -and $label.PSObject.Properties.Name -contains $paramName) {
            # 处理Font这类复合属性的特殊情况(可选)
            if ($paramName -match 'FontSize|FontFamily') {
                $label.Font = New-Object System.Drawing.Font($FontFamily, $FontSize)
                continue
            }
            $label.$paramName = $paramValue
        }
    }

    return $label
}

关键逻辑说明

  1. 获取所有参数定义:
    通过$MyInvocation.MyCommand.Parameters.Keys可拿到函数声明的所有参数名称,不受用户是否传入该参数的影响。

  2. 获取参数值:

    • 若参数在$PSBoundParameters中存在,直接使用用户传入的值;
    • 若不存在,则通过Get-Variable获取参数的默认值。
  3. 安全赋值检查:
    增加$label.PSObject.Properties.Name -contains $paramName判断,避免给Label对象不存在的属性赋值,防止报错。

  4. 复合属性处理(可选):
    像Font这类由多个参数(字号、字体)组合的属性,可在循环中单独处理,合并参数值后赋值给对应复合属性。

使用注意事项

  • 参数名需与Label控件的属性名严格对应(PowerShell大小写不敏感,但建议保持一致);
  • 复杂类型参数(如Color、Point)的默认值要正确初始化对应类型的实例;
  • 若有不需要映射到控件属性的内部参数,可在循环中添加跳过逻辑,比如:
    if ($paramName -in @('InternalParam1', 'InternalParam2')) { continue }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:54:55