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

PowerShell脚本param块32位环境报错,64位正常如何解决?

问题原因分析
  • 参数传递丢失:重启32位PowerShell时,没有把原脚本的命令行参数同步传递过去,导致32位进程里的$Path只能使用默认值.,自然无法识别你传入的指定路径。
  • param块位置违规:PowerShell要求脚本的param参数声明必须是第一个可执行代码元素(注释除外)。你的脚本里32位分支的Write-Host语句在param块之前,32位PowerShell执行时会先运行Write-Host,之后遇到param就会把它当成未知命令报错。
解决方法

修改脚本,同时解决上述两个问题:

  1. 将param块移到脚本最开头(所有执行代码之前);
  2. 重启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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:50:00