Powershell 脚本文件不能删除 curl wget rmdir 这些自带的命令别名,假设有一个 ps1 文件有以下代码
Powershell can't remove built-in aliases like curl, wget, rmdir that have the AllScope option in script ....
- Remove-Item -Path Alias:curl -ErrorAction Ignore -Force
- Test-Path -Path Alias:curl
复制代码 在 Powershell 5.1 中运行以上脚本后,curl 没有被删除, Test-Path 仍然返回 True,测试 wget rmdir 有相同的效果。
运行下面句命令看看 curl 这个命令别名的详情- Get-Alias curl | Select-Object *
复制代码- PSPath : Microsoft.PowerShell.Core\Alias::curl
- PSDrive : Alias
- PSProvider : Microsoft.PowerShell.Core\Alias
- PSIsContainer : False
- HelpUri : https://go.microsoft.com/fwlink/?LinkID=217035
- ResolvedCommandName : Invoke-WebRequest
- DisplayName : curl -> Invoke-WebRequest
- ReferencedCommand : Invoke-WebRequest
- ResolvedCommand : Invoke-WebRequest
- Definition : Invoke-WebRequest
- Options : AllScope
- Description :
- OutputType : {}
- Name : curl
- CommandType : Alias
- Source :
- Version :
- Visibility : Public
- ModuleName :
- Module :
- RemotingCapability : PowerShell
- Parameters : {[UseBasicParsing, System.Management.Automation.ParameterMetadata], [Uri, System.Management.Automation.Para
- meterMetadata], [WebSession, System.Management.Automation.ParameterMetadata], [SessionVariable, System.Mana
- gement.Automation.ParameterMetadata]...}
- ParameterSets :
复制代码 发现这些无法删除的命名别名有一个共同点,就是都有这个属性值。研究了 Powershell 官方文档,折腾出了解决方法,就是删除别名以后再删除一次。- Remove-Item -Path Alias:curl -ErrorAction Ignore -Force
- Remove-Item -Path Alias:curl -ErrorAction Ignore -Force
复制代码 或者索性写个 while 循环一直删- While(Test-Path -Path Alias:curl){
- Remove-Item -Path Alias:curl -ErrorAction Ignore -Force
- }
- Test-Path -Path Alias:curl
复制代码 如果使用 Powershell 6.0+,Remove-Item 可以一次性删除 rmdir 别名,curl 和 wget 在 Powershell 6.0+ 已经被删除了,- Get-alias rmdir | Select Options
复制代码 运行以上命令,发现 Options 为 None,原来 AllScope 已经没有了。
Powershell 6.0+ 也可以使用 Remove-Alias 这个专门删除别名的命令来删除别名,很好用。
参考链接 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scopes |
|