PowerShell执行Chocolatey安装时参数转换错误该如何解决?
问题修复方案
核心错误原因
- PowerShell函数传参语法错误
PowerShell调用自定义函数时参数用空格分隔,不是逗号。你写的deployapp $d_api,$d_pi,$et_data_api是将三个变量拼成单个数组传递给函数的第一个参数$dest_api,数组无法直接转换为String类型,直接触发参数转换报错。 - 变量命名混乱且存在大量未定义变量
函数定义的入参是$dest_api、$a_api、$data_api,但函数体内调用的$b_api、$c_api、$g_api、$r_api均为未定义空变量;调用函数时传入的$d_pi、$et_data_api也没有提前赋值,变量对应关系完全错乱。 - Chocolatey环境变量读取语法错误
你写的Senv:chocolateyPackageFolder是普通字符串,正确的PowerShell环境变量读取语法是$env:变量名,要以$开头,才能正确读取Chocolatey内置的chocolateyPackageFolder环境变量。 - 首次执行的choco命令语法错误
包名-api-et-api以横杠开头,choco会将其识别为命令参数而非包名,导致解析异常。
Chocolatey环境变量说明
Chocolatey的内置环境变量可以正常作为函数参数传递,只要正确读取后按PowerShell语法传参即可。
修复后的完整脚本
function deployapp(){ Param ( [Parameter(Mandatory=$true)] [string] $dest_api, [Parameter(Mandatory=$true)] [string] $a_api, [Parameter(Mandatory=$true)] [string] $data_api ) # 变量和入参对应,不要使用未定义的变量 Write-Host $dest_api Write-Host $a_api Copy-Item -Path $dest_api -Destination "F:\output" -Recurse Copy-Item -Path $a_api -Destination "F:\output" -Recurse Copy-Item -Path $data_api -Destination "F:\output" -Recurse } # 正确读取Chocolatey环境变量 [String]$et_api = "$env:chocolateyPackageFolder\.et.api" Write-host $et_api [String]$d_api="$env:chocolateyPackageFolder\.et_api" [String]$data_api="$env:chocolateyPackageFolder\.et_data.api" # 正确传参:空格分隔,使用已定义的变量 deployapp $d_api $et_api $data_api
正确安装命令
choco install --force api-et-api -y
内容的提问来源于stack exchange,提问作者MD. Ashfaqur Rahman Tahashin
相关产品推荐
相关产品推荐

