PowerShell脚本param块32位环境报错,64位正常如何解决?
问题原因分析
- 参数传递丢失:重启32位PowerShell时,没有把原脚本的命令行参数同步传递过去,导致32位进程里的
$Path只能使用默认值.,自然无法识别你传入的指定路径。 - param块位置违规:PowerShell要求脚本的
param参数声明必须是第一个可执行代码元素(注释除外)。你的脚本里32位分支的Write-Host语句在param块之前,32位PowerShell执行时会先运行Write-Host,之后遇到param就会把它当成未知命令报错。
解决方法
修改脚本,同时解决上述两个问题:
- 将
param块移到脚本最开头(所有执行代码之前); - 重启32位进程时,把原始参数完整传递过去。
修改后的完整脚本:
param ( [string]$Path = "." ) # 检查是否在64位PowerShell中运行 if ([Environment]::Is64BitProcess) { # 32位PowerShell可执行文件路径 $powershell32 = "$env:windir\SysWOW64\WindowsPowerShell\v1.0\powershell.exe" # 携带原始参数重启脚本到32位PowerShell & $powershell32 -ExecutionPolicy Bypass -File $PSCommandPath @PSBoundParameters exit } else { # 已在32位PowerShell中,继续执行 Write-Host "Script is running in 32-bit PowerShell." } Get-ChildItem -Path $Path
关键修改说明
param块移至最开头:符合PowerShell语法规范,无论32位还是64位环境,都能正确识别参数声明。- 重启命令添加
@PSBoundParameters:这是PowerShell的参数展开语法,会把当前脚本收到的所有参数原样传递给32位进程,确保传入的$Path参数被正确接收。
内容的提问来源于stack exchange,提问作者dig_123
相关产品推荐
相关产品推荐

