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

PowerShell如何将参数类型作为参数传递给另一个函数?

如何将参数名作为参数传递给另一个PowerShell函数

要实现不用If语句就把MSIPath或ExePath参数传递给Get-Version,可以用PowerShell的**哈希表+参数展开(Splatting)**技术,具体实现如下:

修正后的Update-Software函数

function Update-Software {
    # 检查已安装软件与本地文件版本,返回是否需要更新
    param (
        [Parameter(Mandatory=$True)]
        [String]$LocalSoftwareSearchString,
        
        [Parameter(Mandatory=$True)]
        [String]$LoadedSoftwarePath,

        [Parameter(Mandatory=$True)]
        [ValidateSet("ExePath","MsiPath")] # 限定仅允许传入合法的参数名
        [String]$LoadedSoftwareParameterType,

        [Parameter(Mandatory=$True)]
        [String]$SoftwareDescription
    )

    # 获取已安装软件版本
    $verSWInstalled = Get-Version -SoftwareName $LocalSoftwareSearchString
    
    # 构建哈希表,键为参数名,值为对应路径
    $versionParams = @{
        $LoadedSoftwareParameterType = $LoadedSoftwarePath
    }
    # 使用参数展开传递参数给Get-Version
    $verSWLoaded = Get-Version @versionParams

    # 版本对比逻辑
    if ($verSWInstalled -gt $verSWLoaded) {
        return $true, "$SoftwareDescription 需要更新"
    } else {
        return $false, "$SoftwareDescription 当前已是最新版本"
    }
}

关键说明

  1. 参数合法性验证:给LoadedSoftwareParameterType添加[ValidateSet]属性,确保用户只能传入ExePath或MsiPath,避免无效参数名导致的错误。
  2. 哈希表构建参数:创建哈希表$versionParams,将传入的参数名作为键,文件路径作为对应值。
  3. 参数展开(Splatting):用@$versionParams替代传统的参数传递方式,PowerShell会自动将哈希表中的键值对解析为Get-Version的参数,无需手动写分支判断。

调用示例

针对EXE文件:

Update-Software -LocalSoftwareSearchString Office365 -LoadedSoftwarePath D:\Office.exe -LoadedSoftwareParameterType ExePath

针对MSI文件:

Update-Software -LocalSoftwareSearchString Office365 -LoadedSoftwarePath D:\Office.msi -LoadedSoftwareParameterType MsiPath

补充:修正Get-Version的小问题

原Get-Version函数中存在冗余return语句(如return $null后又return "SOFTWARE NOT FOUND"),后面的return不会执行,建议调整为:

if($null -eq $version){
    return "SOFTWARE NOT FOUND"
}elseif($version -is [array]){ # 当返回多个版本时是数组类型
    return "TOO MANY SOFTWARE VERSIONS FOUND"
}else{
    [System.Version]$version
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:15:47