PowerShell自定义函数使用命名参数无法正常赋值问题求助
问题原因
你调整函数参数后没有同步修改调用逻辑才会出现异常:
之前的函数只接收1个数组参数,你传入的双元素数组会被完整赋值给$Results,所以能正常取下标0和1的内容。
改为双参数后,如果你还是直接把双元素数组当成单个参数传入,PowerShell会默认把整个数组赋值给第一个位置参数$Server,第二个参数$SecretName没有接收到任何值,就会出现你看到的空输出问题。
解决方法
根据你的使用场景选对应调用方式即可:
- 如果你要保留现有数组形式的数据源,用参数展开(Splatting) 适配:
调用的时候把变量前的$换成@,PowerShell会自动把数组元素按顺序匹配到对应位置参数:
# 假设你每一组配置存在$adItem数组里,示例:$adItem = "10.0.11.110", "AD-NL" Read-AdEnvironment @adItem
- 如果你想要明确用命名参数调用,显式指定每个参数的取值即可:
# 直接传字面量 Read-AdEnvironment -Server "10.0.11.110" -SecretName "AD-NL" # 从已有数组取值传参 Read-AdEnvironment -Server $adItem[0] -SecretName $adItem[1]
完整可运行示例
Function Read-AdEnvironment { param ([string]$Server, [string]$SecretName) Write-Host "Server: ",$Server Write-Host "SecretName: ",$SecretName } # 示例数据源 $allAdEnv = @( @("10.0.11.110", "AD-NL"), @("192.168.50.101", "AD-DE"), @("192.168.13.9", "AD-I"), @("192.168.8.251", "AD-CH") ) # 循环调用示例 foreach ($item in $allAdEnv) { # 以下两种写法二选一即可,输出都正常 # Read-AdEnvironment @item Read-AdEnvironment -Server $item[0] -SecretName $item[1] }
运行后就会得到你之前的正常输出结果。
内容的提问来源于stack exchange,提问作者BigBearFreddy
相关产品推荐
相关产品推荐

