当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 仅在需要时更新 AzureRM

作者:精品下载站 日期:2024-12-14 07:15:15 浏览:14 分类:玩电脑

仅在需要时更新 AzureRM


前几天,我偶然发现了 Ian Farr 撰写的这篇关于 自动保持 Azure PowerShell 模块最新的精彩文章。在这篇文章中,Ian 告诉我们如何通过从他的配置文件脚本启动后台作业来保持他的帮助和 azure 模块最新。最后,Ian 提到他最近在工作中添加了 Update-AzureRM 命令,并且每次都会更新 AzureRM 模块,即使他已经拥有最新版本。

我已经运行 Update-AzureRM 命令几次,并注意到同样令人沮丧的事实,即使我的所有模块都是最新的,运行也需要将近 40 分钟!

[玩转系统] 仅在需要时更新 AzureRM

我对此的一般解决方案是运行 Update-Module -Name Azure* 并仅更新名称以 Azure 开头的所有模块(这也使 AzureAutomationAuthoringToolkit 保持最新)。但这次我很好奇并想“想知道我是否可以使用 Update-AzureRM 加快速度?”。

检查命令

我做的第一件事是使用 Get-Command 检查命令,如下所示:

Get-Command -Name Update-AzureRM

这告诉我,该命令实际上是一个函数,是 AzureRM 模块的一部分,让我们看一下该模块:

Get-Module -Name AzureRM | Select-Object -Property Name, Path

事实证明这是一个用 PowerShell 编写的脚本模块,所以我也许可以对此做点什么。

更新-AzureRM

打开该函数,我可以看到 Update-AzureRM 正在更改存储库策略,为每个应更新的模块调用一次 Install-ModuleWithVersionCheck,然后将我的存储库策略设置回之前的状态。这让我相信更新问题在于 Install-ModuleWithVersionCheck 中,它恰好驻留在同一个 psm1 文件中。

安装模块与版本检查

此函数将在我的计算机上搜索指定的模块,如果已安装,则会将变量 $ModuleAction 设置为“已更新”并使用参数 -Force 运行 Install-Module,如果我的计算机中尚不可用,则会设置$ModuleAction 为“已安装”并运行 Install-Module,而不使用 -Force。

发现问题!

我想我在这里找到了问题,让我们在Install-Module的帮助中查找参数Force:

Get-Help -Name Install-Module -Parameter Force

[玩转系统] 仅在需要时更新 AzureRM

似乎仅当我想覆盖 相同名称和版本的模块时才需要 Force 参数。我自己对该参数的测试还表明,当存储库的 InstallationPolicy 设置为 Untrusted(如 UserVoice 上报告的)时,使用 -Force 将覆盖确认消息。这使我得出结论,从安装模块中删除 -Force 将阻止它下载和重新安装任何已经是最新的模块。我只想在 Update-AzureRM 上使用参数 -Force 时强制下载并安装模块。

为了更改行为,我首先将 Force 参数添加到 Install-ModuleWithVersionCheck 并使用 -Force:$Force 从 Update-AzureRM 调用它。这将通过 Force 参数传递给 Install-ModuleWithVersionCheck。

第二步是在 Install-ModuleWithVersionCheck 中对 Install-Module 执行相同的操作。

为了确保它按预期工作,我运行命令 Update-AzureRm,现在需要 2 分钟而不是 38 分钟。我所要做的就是对 5 行进行一个小更改!完成后,我还添加了 -Force on Update-AzureRM 的帮助说明。

[玩转系统] 仅在需要时更新 AzureRM

由于 AzureRm PowerShell 模块是开源的并发布在 GitHub 上,我提交了一个问题,描述了强制更新的问题以及我建议的代码更改。希望你们都能在下一个版本中拥有这个新功能。

在下一篇文章中,我将描述向开源项目提交建议更改的过程。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯