
先别急着去改什么注册表也别一上来就研究快捷方式属性。你之所以搜这个话题大概率是每天打开 PowerShell 后都要手动敲一遍cd D:\work这种命令或者明明在项目文件夹里按 Shift右键打开终端结果还是被丢到用户目录。我告诉你正确的解决思路让 PowerShell 每次启动时自动执行一条“切换目录”命令一劳永逸且对所有入口都生效。这个操作并不复杂核心就两个词配置文件profile和执行策略。本文会从“默认目录从哪来”讲起再到完整的配置步骤、中文路径乱码等细节最后附上常见的踩坑速查表。不管是 Windows PowerShell 5.1还是后装的 PowerShell 7你都能对号入座。1. 先搞清楚 PowerShell 的“默认目录”到底在哪儿1.1 同一个 PowerShell不同打开方式默认目录居然不一样很多新手会困惑为什么我明明改好了设置换个方式打开 PowerShell 又回到老位置因为 Windows 里的“启动目录”根本不是全局唯一的它取决于你用什么入口启动程序。我整理了一个对照表能帮你快速判断自己属于哪种情况打开方式默认工作目录开始菜单点击“Windows PowerShell”C:\Users\你的用户名右键开始菜单选“以管理员身份运行”C:\Windows\System32在文件资源管理器地址栏输入powershell当前所在文件夹WinR 运行框输入powershellC:\Users\你的用户名通过 Windows Terminal 打开看 Windows Terminal 的配置默认是用户目录通过“快捷方式”双击打开看快捷方式属性里的“起始位置”由此可见如果你只改某个快捷方式的属性那么从开始菜单右键、从运行框打开的 PowerShell 就完全不听你的。而且管理员窗口默认落在C:\Windows\System32普通用户窗口落在用户目录这俩初始位置还不一样够乱的。1.2 为什么改快捷方式不是最靠谱的方案快捷方式属性里有一个“起始位置”字段有的朋友会直接填上目标文件夹路径发现双击快捷方式确实能进目录。但问题在于这种方式只管“这一个快捷方式”。一旦你在文件资源管理器里输入 powershell或者被某个 IDE 内部调起它就不生效了。真正理想的方案应该满足两个条件第一不管从哪个入口启动都能自动落在指定目录第二原理简单、排查容易、不会影响系统稳定性。而 PowerShell 的 profile 配置文件天然满足这两点——它本质是一个每次启动都会自动加载的脚本我们只需要在里面写一行切换目录的命令。2. 核心操作把“默认文件夹”写进 PowerShell 配置文件2.1 profile 文件是什么为什么它能管用PowerShell 启动时会按顺序自动加载一组.ps1脚本其中和当前用户、当前主机对应的那个文件就是 profile。你可以把它理解成“开机自启动脚本”的 PowerShell 版本只是它只在你打开 PowerShell 窗口时执行不会在系统启动时执行。输入下面这行命令就能看到当前用户对应的 profile 路径$PROFILE在 Windows PowerShell 5.1 里路径一般是C:\Users\你的用户名\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1如果你用的是 PowerShell 7pwsh路径会变成C:\Users\你的用户名\Documents\PowerShell\Microsoft.PowerShell_profile.ps1如果你从没手动创建过这个文件$PROFILE虽然显示路径但文件名对应的文件不一定存在。可以用Test-Path检查一下Test-Path $PROFILE返回True说明文件存在False说明还没有需要自己创建。认真看一下$PROFILE其实有四种类型所有用户-所有主机、所有用户-当前主机、当前用户-所有主机、当前用户-当前主机。我们日常个人用途只需要关注“当前用户-当前主机”这个也就是$PROFILE默认指向的那个。这样不会影响其他用户也不需要管理员权限。2.2 创建 profile 并写入默认目录完整实操步骤非常少下面是完整命令序列# 1. 查看当前用户的 profile 路径 $PROFILE # 2. 如果文件不存在就创建它如果存在跳过这一步 if (!(Test-Path -Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force } # 3. 用记事本打开编辑 notepad $PROFILE在打开的记事本里添加一行Set-Location D:\work大功告成一半。保存关闭后开一个新的 PowerShell 窗口你会发现工作目录已经自动变成D:\work。这里要解释几个关键点不是每个教程都会讲清楚Set-Location和cd是等价的cd是Set-Location的别名。写哪个都行但从可读性角度我推荐在配置文件里用完整命令Set-Location。路径如果包含空格必须用双引号包起来比如Set-Location D:\My Project否则 PowerShell 会把它拆成多个参数命令直接报错。这一行不要写在exit后面。有些人习惯在 profile 末尾加exit来加快启动但exit后面的命令永远不会执行而且你的窗口会直接关闭很坑。如果后面还有别的设置项把Set-Location放在所有环境变量、别名定义之后避免后续命令临时改动了目录最终效果被覆盖。2.3 第一次运行被“禁止运行脚本”拦下来很多人做完上面几步重启 PowerShell 后发现还是老位置原因就是 Windows PowerShell 默认的执行策略是Restricted任何.ps1脚本都不允许运行profile 自然也被禁用了。你可以用这条命令查看当前策略Get-ExecutionPolicy -List输出结果会按作用域列出多项重点关注CurrentUser这一行默认一般是Undefined它继承自本地组策略或默认值Restricted。解决办法是只对当前用户放开“本地脚本”的执行权限推荐设置为RemoteSignedSet-ExecutionPolicy -Scope CurrentUser RemoteSigned -Force这行命令的意思很简单本地创建的脚本允许运行从网上下载来的脚本必须带有可信发布者签名才能执行。这是日常开发最常用的平衡方案安全性比直接改成Unrestricted高很多而且完全不需要管理员权限。设置完再重启 PowerShell配置就生效了。3. 实操中的三个关键细节3.1 中文路径乱码编码问题比命令本身更坑如果你的目标文件夹是英文路径前面几章已经很顺利。但一旦路径里带中文比如Set-Location D:\项目\工作很可能会遇到一个诡异现象明明路径是对的PowerShell 却提示找不到路径或显示乱码。原因出在文件编码上。Windows PowerShell 5.1 默认按 ANSIGBK/GB2312读取没有 BOM 标记的脚本文件。如果你用 VS Code 等编辑器把 profile 保存成“无 BOM 的 UTF-8”那么里面的中文字符就会被错误解析路径自然就乱了。解决办法非常明确把 profile 文件保存为 UTF-8 with BOM。实操细节用 Windows 自带的记事本在“另存为”对话框底部编码选择“UTF-8”。旧版记事本保存的 UTF-8 是带 BOM 的直接可用。用 VS Code点击右下角编码区域选择“通过编码保存”然后选“UTF-8 with BOM”。不要选“UTF-8”无 BOM。如果你已经踩了乱码坑不要慌重新打开 profile全选复制然后用 VS Code 新建文件粘贴另存为“UTF-8 with BOM”覆盖回去即可。用一句通俗的话总结在 Windows PowerShell 5.1 里宁可保存成带 BOM 的 UTF-8也不要无 BOM。它在读取无 BOM 文件时容易犯迷糊。3.2 管理员窗口和普通窗口profile 是否通用这是被问到最多的问题之一。答案是同一用户下管理员窗口和普通窗口读取的 profile 文件是同一个。只要你是用同一个账户右键“以管理员身份运行”打开 PowerShell它同样会加载你刚才配置的 profileSet-Location也会照常执行。所以不用为管理员窗口额外配置一遍。哪怕管理员窗口初始目录是C:\Windows\System32profile 里的一行Set-Location会把当前目录直接拉到你指定的位置你看到的就是目标文件夹。只有一种情况要注意如果你在 UAC 弹窗里选择的是另一个管理员账户比如内置 Administrator那么 PowerShell 加载的 profile 是那个账户的 profile路径完全不同。遇到这种情况需要给那个账户单独配置一份。新手千万别去动“所有用户”的 profile 文件通常位于C:\Program Files\PowerShell\7\profile.ps1它需要管理员权限而且影响所有用户改错了代价很大。个人电脑上当前用户 profile 足够用了。3.3 只想临时进某个目录不想写配置怎么办有时候你并不是希望所有窗口都默认进目录只是想“这次打开就进那个文件夹”。这种情况完全没必要改 profile直接在启动命令里带参数就行powershell -NoExit -Command Set-Location D:\project也可以把它做成快捷方式。右键新建快捷方式目标位置填powershell.exe -NoExit -Command Set-Location D:\project这样双击快捷方式就会打开 PowerShell 并直接进入D:\project不会影响系统里其他 PowerShell 窗口的行为。我建议你做选择前先想清楚自己的实际需求需求推荐方案所有入口打开 PowerShell 都进同一目录profile 文件 Set-Location只用某个快捷方式进目录快捷方式“起始位置”或 -NoExit 参数只希望 Windows Terminal 进目录Windows Terminal 的“起始目录”设置偶尔进一下手动cd即可4. 常见问题与排查技巧速查表4.1 改了 profile 但没生效按什么顺序查如果你照着操作但重启后新窗口还是停在老目录不要急着怀疑 PowerShell 坏了按下面的顺序排查文件名是否带 .txt 后缀。这是新手最容易犯的错误记事本保存时默认会追加.txt。PowerShell 只认Microsoft.PowerShell_profile.ps1如果你保存成Microsoft.PowerShell_profile.ps1.txt它根本不会加载。文件是否在正确的目录。用$PROFILE看路径确认文件就放在打印出来的位置。如果有 OneDrive 或“文档”目录被重定向的情况路径会跟你想的有些偏差。执行策略是否为 Restricted。运行Get-ExecutionPolicy -List如果CurrentUser显示Undefined或Restricted按前面第 2.3 节设置一次。文件内容是否真的执行了。临时在 profile 最后加一行Write-Host profile loaded OK重启 PowerShell 看有没有输出。如果没输出说明文件根本没被加载有输出但目录没变说明Set-Location又被后面的命令覆盖了。是不是启动路径本身有问题。仔细检查路径是否包含中文是否带有不可见字符先用简单的英文路径C:\temp试验一下排除编码和转义问题。4.2 升级了 PowerShell 7原来的配置却失效了这是 Windows PowerShell 5.1 和 PowerShell 7 长期共存后的经典问题。两个版本的 profile 路径不一样5.1 的 profileC:\Users\你的用户名\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps17 的 profileC:\Users\你的用户名\Documents\PowerShell\Microsoft.PowerShell_profile.ps1你在 5.1 里改好的配置PowerShell 7 不会主动读取。解决办法很简单把旧 profile 里的内容复制到新位置或者直接在 PowerShell 7 里重新执行一遍创建流程。从长期来看尽量以 PowerShell 7 的 profile 为准因为新版本功能更全、维护更活跃。如果连终端模拟器也换了比如从“Windows Terminal”里跑 PowerShell还需要区分是终端模拟器本身的起始目录设置还是 profile 在起作用别把两个层级的配置搞混。4.3 想连 CMD 一起改默认目录可以吗严格来说CMD 和 PowerShell 是两套东西。本文的 profile 方案只对 PowerShell 生效。如果你平时也会用到 CMD希望它也能自动进某个目录有几种办法快捷方式属性里设置“起始位置”和早期 PowerShell 方案一样只管快捷方式入口。注册表 AutoRun。HKCU\Software\Microsoft\Command Processor下面有一个AutoRun字符串值写入cd /d D:\work后每次启动cmd.exe都会自动执行。但我不推荐新手随意碰这个键因为它影响所有 CMD 窗口一旦写错连开 CMD 都会报错不如只在快捷方式里设置或者干脆记住“CMD 是 CMDPowerShell 是 PowerShell”。4.4 开机自启和默认目录是两码事别混为一谈有些人搜索“PowerShell 默认目录”时真实需求可能是“开机自动执行某个 PowerShell 脚本”。这里要澄清一下profile 文件只在 PowerShell 窗口启动时加载它不会开机自启。如果你确实需要开机自动跑脚本正确做法是把要执行的脚本编写成一个.ps1文件。创建一个快捷方式目标填powershell.exe -ExecutionPolicy Bypass -File C:\path\to\script.ps1。把这个快捷方式放进启动文件夹按 WinR输入shell:startup可以打开。或者用“任务计划程序”设置更精细的触发条件和权限。这些做法的生效点比 profile 更底层不要在 profile 里绕远路。5. 进阶玩法把“默认文件夹”升级成“默认工作台”5.1 给常用目录配置专属快捷键如果你不只需要一个固定目录而是经常在几个目录之间切换每次都把 profile 里的Set-Location改来改去也太累了。更好的做法是定义一批函数一次性放进 profilefunction home { Set-Location $HOME } function work { Set-Location D:\Projects\server } function docs { Set-Location D:\Docs\archive } function tmp { Set-Location C:\Users\你的用户名\AppData\Local\Temp }保存后重启直接输入work回车就能进入D:\Projects\server。这种函数方式不需要额外记忆完整路径越用越顺手我也不用每次在 profile 里写死唯一的目录。5.2 进入目录后自动加载提示信息你还可以在 profile 里加一点反馈让 PowerShell 打开后第一眼就知道自己在哪Set-Location D:\work Write-Host 当前工作目录: $(Get-Location) -ForegroundColor Cyan看起来简单实际作用不小。尤其是多个项目目录之间频繁切换时窗口一打开就能确认位置避免“我到底在哪个目录”的恍惚感。如果你愿意折腾还可以把 oh-my-posh、posh-git 这类美化工具也放到 profile 里让命令行提示符显示 Git 分支状态、当前目录等信息。这一步完全可以作为后续扩展不影响本文的默认目录配置。5.3 和 Windows Terminal 的“起始目录”配合使用很多朋友日常用的是 Windows Terminal而不是原生 PowerShell 窗口。这时候可以把两层配置分开理解Windows Terminal 的“起始目录”负责控制“打开 Windows Terminal 后新选项卡落在哪个目录”。PowerShell 的 profile负责控制“不管从哪个入口打开 PowerShell最终都切到哪个目录”。如果两者同时存在最终生效的是 profile 里的Set-Location因为它在 shell 内部执行时机更晚。所以你可以让 Windows Terminal 先落在一个中性目录再让 profile 统一把所有 PowerShell 会话拉回目标位置。也可以反过来在 Windows Terminal 设置里直接填目标目录profile 里就空着。两种风格都行关键是你得知道它们会叠加生效别以为配了 Windows Terminal 就不需要 profile或者反过来。6. 最后关于这个配置我的一些实际体会我自己最早是用快捷方式“起始位置”解决的结果发现右键打开完全不生效折腾到怀疑人生。后来切换到 profile 方案才感受到真正的省心所有入口统一生效维护也集中。中间还踩过中文路径乱码这个坑最后总结出一句话Windows PowerShell 5.1 里profile 文件尽量保存成 UTF-8 with BOM。这个细节很多教程压根不会提。如果你刚开始配我的建议是先把正文里的步骤完整走一遍再用Test-Path验证文件是否存在最后重启窗口确认目录。别想着一次配置就搞出很复杂的工作台先让Set-Location生效然后慢慢往 profile 里加函数、别名、提示符美化。改 profile 前记得先备份原文件等哪天你往里面加了几十个函数就知道备份多重要。最后再分享一个小技巧如果你不确定当前配置有没有生效打开 PowerShell 后输入(Get-Location).Path屏幕上显示的就是实际工作目录如果跟你预期不符优先查执行策略和 profile 文件编码这两项至少能解决七成问题。