背景:我通过MSI安装了Azure-PowerShell 1.x,随后通过命令提示符添加了一些Azure资源管理模块。一切正常,然后昨天下午,ISE莫名其妙地消失了。为了补救这个问题,我计划卸载MSI &然后重新安装。(我不知道有必要首先取消手动添加的模块。)卸载似乎运行良好,但它没有删除手动安装的模块,也没有警告我。
结果:该机器不再安装Azure-PowerShell。我无法安装、卸载或修复安装,因为有些模块仍然存在:
这台机器上安装了来自PowerShell库的Azure模块。请在安装此MSI之前删除这些模块。
有办法“修复”这个安装吗?或者手动删除文件/清理注册表,或者强制MSI安装在任何东西上?
这都是在Azure上的VM上运行的。如果有必要,我可以删除整个VM &从零开始,但如果有相对简单的修复,我更愿意避免这一点。
谢谢!
发布于 2015-12-16 01:45:03
这只是一个开发虚拟机。我把它炸了然后重新开始。经验教训:卸载MSI之前先卸载PowerShell库组件。
发布于 2017-11-06 20:08:15
好的,我尝试了上面的项目来删除窗口powershell,并发现实际上它并没有完全删除powershell。
这至少在windows 7上是不正确的。
如果您运行uninstall-module Azure或Uninstall-Module AzureRM,它会卸载一些东西,看上去就像我认为的基本模块。
如果你这样做了:
Get-Module AzureRM -ListAvailable
它什么都不会回来。所以就这么做了对吧?
不,不太好。
如果你那么做了:
Get-Module -ListAvailable AzureRM*
你会发现任意数量的子模块仍在那里。(出于某种原因,通配符可以用于Get模块,但不能用于卸载模块)
好的,但是接下来只做卸载模块AzureRm*对吗?不,不完全是
根据您的powershell版本(或者可能不是,我不确定),Install只是抱怨您不能在卸载模块命令中使用通配符。(天知道为什么没有通配符有什么意义呢?但这就是窗户,所以我只好把它吸进去)。
如果您查看%System-root%\Program \windowspowershell\模块,您仍然会看到那里的模块。
为什么会这样呢?我不确定,但这是我必须做的,以清理所有的老版本和更新版本的Azure powershell,我必须回到一个干净的板子。因此,为了解决缺乏通配符支持的问题,我只使用了一个foreach循环:
foreach ($module in (Get-Module -ListAvailable AzureRM*).Name |Get-Unique) { write-host "Removing Module $module" Uninstall-module $module }
请注意,不要尝试将其作为Visual代码或visual运行,因为取决于您的锁,您可能会得到错误,因为它倾向于预加载模块并锁定打开的东西。将其放入名为Removeold-AzureRM.ps1的文件中,并从powershell控制台窗口运行它,如下所示:\Remo-AzureRM.ps1
还请确保在尝试之前关闭Visual代码和Visual,否则仍可能会收到类似的错误消息。
如果您在卸载AzureRM之后运行此操作,您将发现事情停止工作,您只有最后一种手段。删除%System%\Program\windowspowershell\ AzureRM中的所有模块
我已经对编辑进行了重新测试,如果您已经安装了azurerm5.0.1,并且已经删除了azurerm,那么上面的代码似乎仍然有效,所以我可能对其他版本也有错误。
现在,您肯定会对此进行排序,现在可以使用Install重新安装AzureRM。
如果你不小心犯了像我这样的核弹的错误,不要费心用WMF 5.1或5.0重新安装它,因为它会安装得很好,但你仍然不会有powershellget,为什么我不确定,这是窗口,所以让我们直接吸取它。
好吧,那怎么解决呢?
您唯一的办法是下载动力壳的发行版。
并将PowerShellGet-1.5.0.0\PowerShellGet复制到模块文件夹中。然后安装-模块将再次工作。
是的,我知道我们都在说重新安装不是更安全吗?
是的,很有可能,但对你们中像我这样的人来说,因为这样或那样的原因,这不是一个选择,以上是你最好的选择。我希望这能帮助到一些人,因为这至少花了我3天的时间来解决为什么在我确信我已经删除了所有东西的情况下,我一直在执行旧的模块。
发布于 2018-05-11 17:01:47
为了加快速度,您可以并行卸载:
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 everythinghttps://stackoverflow.com/questions/34204373
复制相似问题