当前位置:  开发笔记 > 开发工具 > 正文

如何清理不良的Azure PowerShell卸载?

如何解决《如何清理不良的AzurePowerShell卸载?》经验,为你挑选了2个好方法。

背景:我通过MSI安装了Azure-PowerShell 1.x,随后通过命令提示符添加了一些Azure资源管理模块.一切都很好; 然后昨天下午,ISE莫名其妙地消失了.为了解决这个问题,我计划卸载MSI然后重新安装.(我不知道有必要先卸载手动添加的模块.)卸载似乎运行正常,但它没有删除手动安装的模块,也没有警告我他们.

结果:计算机不再安装Azure-PowerShell.我无法安装,卸载或修复安装,因为某些模块仍然存在:

PowerShell库中的Azure模块安装在此计算机上.请在安装此MSI之前删除这些模块.

有没有办法"修复"这个装置?手动删除文件/清理注册表,或强制MSI安装在那里的任何东西?

这一切都在Azure上的VM上运行.我可以删除整个VM并在必要时从头开始,但如果有一个相对简单的修复,我宁愿避免这样做.

谢谢!



1> 小智..:

好的,所以我尝试了上面的项目删除Windows PowerShell,发现它实际上并没有完全删除powershell.

这至少在Windows 7上似乎没有正确.

如果你运行uninstall-module AzureUninstall-Module AzureRM它将卸载某些东西,看起来像我认为的基本模块.

如果你这样做:

Get-Module AzureRM -ListAvailable

它什么都不会回来.它做得对吗?

不,不是真的.

如果你这样做:

Get-Module -ListAvailable AzureRM*

你会发现任何数量的子模块仍然存在.(由于某种原因,通配符与Get-Module一起使用但不与Uninstall-Module一起使用)

好吧,那么只需要卸载 - 模块AzureRm*吧?不,不是真的

根据您的powershell版本(或者可能不是,我不确定),Install-Module只是抱怨您不能在Uninstall-Module命令中使用通配符.(上帝知道为什么通配符的重点是什么?如果不是这样的话,那么这就是windows,所以我只需要把它搞砸了).

如果您查看%System-root%\ Program Files\windowspowershell\modules,您仍会看到那里的模块.

为什么是这样?我不确定,但这是我必须要做的,以清理所有旧版本和更新版本的Azure powershell,我必须回到一个干净的名单.因此,为了解决缺少通配符支持的问题,我只使用了foreach循环:

foreach ($module in (Get-Module -ListAvailable AzureRM*).Name |Get-Unique) { write-host "Removing Module $module" Uninstall-module $module }

警告不要尝试将此作为Visual Studio代码或visual studio运行,因为根据您的锁定,您可能会遇到错误,因为它往往会预加载模块并锁定打开的东西.将它放在名为Removeold-AzureRM.ps1的文件中,并从PowerShell控制台窗口运行它,如下所示:.\ Remove-AzureRM.ps1

另外,请确保在尝试之前关闭Visual Studio Code和Visual Studio,否则您可能仍会收到类似的错误消息.

如果您在卸载AzureRM之后运行此命令,您会发现事情停止工作,您只有最后的手段.删除%System-root%\ Program Files\windowspowershell\modules中的所有AzureRM模块

编辑我已经重新测试了这个,如果您安装了azurerm 5.0.1并且您已经删除了azurerm,那么上面的代码似乎仍然有用,所以我对其他版本也是错误的

现在,您将在此时确定已对此进行排序,现在可以使用Install-Module AzureRM重新安装Azure powershell.

如果你意外地犯了像我这样的冒险powershell的错误,不要试图用WMF 5.1或5.0重新安装它,因为它会安装得很好,但你仍然没有powershellget,为什么我不确定再次这是windows所以让我们把它搞砸.

那么如何解决呢?

您唯一的办法是下载powershellget版本

并将PowerShellGet-1.5.0.0\PowerShellGet复制到您的modules文件夹.然后Install-Module将再次运行.

是的我知道我们都说不是重新安装更安全吗?

是的,但是对于那些喜欢我的人来说,由于某种原因这不是一个选择,以上是你最好的选择.我希望这可以帮助别人,因为这花了我至少3天的时间来理清为什么我一直在执行旧的模块,当我确定我已经删除了所有内容.



2> BlueSky..:

为了更快,您可以并行卸载:

workflow Uninstall-AzureModules
{
    $Modules = (Get-Module -ListAvailable Azure*).Name |Get-Unique
    Foreach -parallel ($Module in $Modules)
    { 
        Write-Output ("Uninstalling: $Module")
        Uninstall-Module $Module -Force
    }
}
Uninstall-AzureModules
Uninstall-AzureModules   #second invocation to truly remove everything

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有