如何移除PowerShell中的常量别名?已尝试方法仍报错
移除PowerShell常量/只读别名的解决办法
问题情况
想删除PowerShell中的别名sl,执行命令:
Remove-Alias -Force -Name sl
收到错误提示:
Remove-Alias: Alias was not removed because alias sl is constant or read-only.
查看该别名的属性:
(Get-Alias sl).Options
返回结果:
ReadOnly, Constant, AllScope
尝试用Set-ItemProperty修改属性时执行命令:
Set-ItemProperty -Path "Alias:sl" -Name "Options" -Value ([System.Management.Automation.ScopedItemOptions]::None)
又出现错误:
Set-ItemProperty: Cannot use interface. The IPropertyCmdletProvider interface is not supported by this provider.
使用环境:PowerShell 7.4.0 preview.3
解决步骤
这类内置的常量/只读别名,常规命令无法修改其属性,需要通过.NET反射绕开限制:
- 先获取别名对象,通过反射修改它的
Options属性:$alias = Get-Alias sl $prop = $alias.GetType().GetProperty("Options", [Reflection.BindingFlags]'Instance, NonPublic') $prop.SetValue($alias, [System.Management.Automation.ScopedItemOptions]::None) - 现在即可正常删除别名:
Remove-Alias -Name sl
⚠️ 注意:该修改仅对当前PowerShell会话生效,关闭窗口后别名会自动恢复。若需永久移除,可将上述代码添加到你的PowerShell配置文件(运行$PROFILE可查看配置文件路径)中,让其在每次启动会话时自动执行。
内容的提问来源于stack exchange,提问作者user21822818
相关产品推荐
相关产品推荐

