如何在PowerShell对象中存储函数?复刻JS动态Switch逻辑遇阻
在PowerShell中实现类似JavaScript的动态Switch功能
PowerShell里可以通过自定义对象存储脚本块或者哈希表映射脚本块的方式,实现你想要的动态switch逻辑,以下是具体实现:
方法一:自定义对象集合(对应你JS代码的写法)
先定义包含匹配条件和执行逻辑的对象集合,其中Fn属性存储PowerShell的脚本块(等价于JS里的函数):
# 定义动态switch规则 $customSwitch = @( [PSCustomObject]@{ Condition = "case1" Fn = { Write-Host "case1 ran" } }, [PSCustomObject]@{ Condition = "canBeChangedAnytime" Fn = { # 这里编写case2的处理逻辑 Write-Host "执行case2的操作" } } ) # 使用动态switch $myValue = "case1" # 替换为实际需要匹配的值 foreach ($item in $customSwitch) { if ($myValue -eq $item.Condition) { & $item.Fn # 用调用操作符&执行脚本块 break } }
方法二:哈希表映射(更简洁的键值匹配场景)
如果只是单纯的“值-逻辑”映射,用哈希表会更高效,无需遍历:
# 定义键值对形式的switch规则 $customSwitchMap = @{ "case1" = { Write-Host "case1 ran" } "canBeChangedAnytime" = { Write-Host "执行case2的操作" } } # 使用哈希表switch $myValue = "canBeChangedAnytime" if ($customSwitchMap.ContainsKey($myValue)) { & $customSwitchMap[$myValue] }
关键说明
- PowerShell中用
{}表示脚本块,等价于JS中的匿名函数; - 执行脚本块必须使用调用操作符
&,否则只会返回脚本块对象本身; - 两种方式都支持动态修改规则:直接修改集合里的对象属性或哈希表的键值对即可。
内容的提问来源于stack exchange,提问作者Jae
相关产品推荐
相关产品推荐

