如何取消关联微软新sudo命令并指向自定义sudo.ps1脚本?
解决Windows预装sudo命令覆盖自定义PowerShell脚本的问题
微软已发布新的sudo命令,目前该命令已预装在所有Windows设备中。这个系统自带的sudo二进制文件优先级高于自定义的sudo PowerShell脚本,且无法正常兼容PowerShell命令。
问题示例
执行PowerShell命令时会报错:
λ sudo Set-Service -Name ssh-agent -StartupType Manual Command not found
原因是预装的sudo仅支持可执行文件,无法识别PowerShell命令。
即使禁用该预装功能也无法解决问题,执行命令会提示:
λ sudo netstat -ab Sudo is disabled on this machine. To enable it, go to the Developer Settings page in the Settings app
如何在不删除system32目录下sudo.EXE的前提下,让sudo指向自定义的sudo.ps1?
方案1:调整PATH环境变量优先级
- 找到你的
sudo.ps1所在的目录 - 打开系统属性 → 高级 → 环境变量
- 在系统变量的
Path列表中,将自定义脚本所在目录拖动到C:\WINDOWS\system32条目之前 - 重启终端或PowerShell,系统会优先加载你的脚本
方案2:设置PowerShell别名(可持久化)
- 临时生效(当前会话):
New-Alias -Name sudo -Value "C:\你的脚本路径\sudo.ps1" - 永久生效:
- 打开PowerShell配置文件:
notepad $PROFILE - 将上述别名命令添加到文件中,保存后重启PowerShell即可
- 打开PowerShell配置文件:
方案3:定义PowerShell函数(更灵活)
编辑PowerShell配置文件(notepad $PROFILE),添加以下函数:
function sudo { & "C:\你的脚本路径\sudo.ps1" @args }
保存后重启PowerShell,调用sudo时会直接执行你的脚本,并自动传递所有参数
内容的提问来源于stack exchange,提问作者gberth
相关产品推荐
相关产品推荐

