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

如何在PowerShell中从哈希表动态创建可接收参数的函数?

问题:从哈希表动态创建可接收参数的PowerShell函数

我需要在PowerShell中通过哈希表批量创建函数,且这些函数要能接收传入的参数。目前使用的代码如下:

$functions = @{
    "wu" = "winget upgrade --include-unknown";
    "wui" = "winget upgrade -i -e";
    "wi" = "winget install -i";
    "wii" = "winget install -i -e";
    "ws" = "winget search"
}

foreach($funcName in $functions.PSBase.Keys){
    New-Item function:\ -Name $funcName -Value $([scriptblock]::Create($functions[$funcName])) | Out-Null
}

但存在问题:调用这些函数时,输入在函数名后的任何内容都不会被当作参数传递。


解决方法

感谢@zett42和@mklement0的帮助,最终实现代码如下:

# Functions (separated for autocomplete)
$wg_functions = @{
    wu   = {winget upgrade @args}
    wui  = {winget upgrade -i -e @args}
    wuiu = {winget upgrade --include-unknown @args}
    wi   = {winget install -i @args}
    wii  = {winget install -i -e @args}
    ws   = {winget search @args}
}

$other_functions = @{
    dev = {Set-Location "W:/Projects/Development" @args}
    gtc = {git clone @args}
}

$functions = $wg_functions + $other_functions

foreach($funcKey in $functions.PSBase.Keys) {
    New-Item function:$funcKey -Value $functions.$funcKey | Out-Null
}

关键改动说明

  • 将哈希表中存储的字符串命令替换为脚本块({}),而非通过[scriptblock]::Create()从字符串转换
  • 在每个脚本块的命令末尾添加@args,用于将调用函数时传入的所有参数传递给内部命令
  • 拆分哈希表便于维护,并通过+合并多个哈希表统一处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:06:14