<p>VSCode中PowerShell终端打不开、脚本执行被拒、断点不命中及中文乱码问题,主因是PowerShell版本混淆、执行策略限制、调试器未启用及UTF-8编码未对齐;需分别安装PowerShell Core或切换默认终端、设置ExecutionPolicy RemoteSigned、启用官方PowerShell扩展、配置terminal.integrated.env.windows和脚本头# encoding: utf-8。</p>

PowerShell终端打不开或启动失败
VSCode里点“新建终端”却弹出错误提示 Unable to launch PowerShell process,大概率是系统没装PowerShell,或者装了但VSCode找不到路径。Windows 10/11自带powershell.exe,但新版默认用pwsh.exe(PowerShell Core),而VSCode的终端默认尝试调用pwsh——如果只装了Windows PowerShell,就会失败。
解决方法:
- 检查是否已安装PowerShell Core:在命令行运行 pwsh --version,无响应就说明没装,去GitHub releases页下个.msi安装;
- 强制VSCode用Windows PowerShell:打开设置(Ctrl+, ),搜 terminal.integrated.defaultProfile.windows,设为 PowerShell(不是Pwsh);
- 或手动指定路径:在设置里找到 terminal.integrated.profiles.windows,加一条:
"PowerShell": {
"source": "PowerShell",
"args": ["-NoExit", "-Command", "Set-Location -Path '\\?\C:\your\script\dir'"]
}
注意路径里的\?前缀能绕过Windows路径长度限制,调试长路径脚本时有用。
在集成终端里直接运行.ps1脚本被拒绝执行
输入 . est.ps1 回车后报错:File cannot be loaded because running scripts is disabled on this system. 这不是VSCode的问题,是PowerShell的执行策略(Execution Policy)在拦你。
临时放行当前会话(推荐调试用):
- 在VSCode终端里先运行:Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
- 不要选Unrestricted或Bypass,风险高且可能被公司组策略覆盖;
- 别用-Scope LocalMachine,需要管理员权限,且影响全系统;
- 如果脚本来自网络(比如下载的.ps1),首次运行仍会提示“是否运行”,按R(Run once)即可,不用改策略。
调试.ps1文件时断点不命中、变量看不到
点了F5或按Debug: Start Debugging,脚本跑完了,断点灰着没触发——VSCode默认没启用PowerShell扩展的调试器,它只是把脚本丢进终端执行,不是真调试。
必须装官方扩展:
- 卸载所有第三方PowerShell插件,只留 ms-vscode.powershell(微软官方);
- 关闭VSCode重开,让它自动激活调试支持;
- 确保脚本有.ps1后缀,且当前工作目录是脚本所在目录(否则Get-Location返回错路径,Write-Debug输出可能被过滤);
- 断点只能打在可执行语句上,比如不能打在param()块第一行,但可以打在$x = 1这种赋值行;
- 调试时鼠标悬停看变量值,但复杂对象(如Get-Process | Select-Object Name,Id结果)得在DEBUG CONSOLE里手动输$variable | Format-List才看得全。
中文路径/参数传入.ps1后乱码或解析失败
脚本放在C:用户文档 est.ps1,VSCode终端里运行 . est.ps1 -Name "张三",结果$Name变成ÕÅÈý——这是PowerShell 5.1(Windows自带)默认用GBK编码读取命令行参数,但VSCode终端默认UTF-8。
解法分两步:
- 终端编码对齐:在VSCode设置里搜 terminal.integrated.env.windows,添加:
"chcp 65001 >nul"这会让每次新开终端自动切到UTF-8;
- 脚本头声明编码(PowerShell 5.1必需):在
.ps1文件最开头加一行:# encoding: utf-8- PowerShell 7+ 默认UTF-8,不用加这行,但得确认VSCode用的是
pwsh而非powershell作为默认终端。
乱码这事容易被当成脚本逻辑问题反复排查,其实八成是编码没对齐。别跳过chcp和# encoding这两步。










