使用PowerShell隐式导入较旧的模块版本

zpqajqem  于 2022-11-10  发布在  Shell
关注(0)|答案(1)|浏览(118)

我想在使用PowerShell模块Az时使用隐式导入。这个模块有相当多的子模块,由于时间的原因,我不想在脚本开始时导入特定的版本。脚本将在不受我控制的代理上运行,因此可能会在我不知道的情况下安装较新的Az模块。如果是这样的话,我的脚本应该仍然使用隐式导入的旧版本。但我没有找到以这种方式加载旧版本的方法。总是通过隐式导入来使用最新版本。然后,我可以通过导入旧版本来覆盖它(如下例所示),但这正是我不想做的。

PS > Get-Module Impl*
PS > GetImplicitValue()
Implicit Importing from V2
PS > Get-Module Impl*

ModuleType Version    PreRelease Name                                ExportedCommands
---------- -------    ---------- ----                                ----------------
Script     2.1.2                 ImplicitlyImporting                 GetImplicitValue

PS > Import-Module ImplicitlyImporting -Force -RequiredVersion 1.0.2
PS > GetImplicitValue()
Implicit Importing from V1
PS > Get-Module Impl*

ModuleType Version    PreRelease Name                                ExportedCommands
---------- -------    ---------- ----                                ----------------
Script     1.0.2                 ImplicitlyImporting                 GetImplicitValue
Script     2.1.2                 ImplicitlyImporting                 GetImplicitValue

有什么主意吗?先谢谢你。

hfyxw5xn

hfyxw5xn1#

IMPLICIT表示导入最新版本,因此您不希望在可能需要旧版本时隐式导入。

您可以通过指定所需的子模块来缩短导入Az模块的时间:


# takes 0.8 seconds for two modules

Import-Module Az.Accounts -RequiredVersion 2.8.0
Import-Module Az.Security -RequiredVersion 1.3.0

# takes 70 seconds for 76 modules

Import-Module Az

否则,您可以检查并显式指定要加载的版本:


# Check if Az is already loaded, and what version

$loaded = Get-Module az
if ($loaded) {
  if ($Loaded.Version -eq [System.Version]'8.0.0') {'Az loaded and correct version'}
  else {'Wrong version of Az loaded'}
}

# If not loaded, then check if Az is installed, and what versions

if (-not (Get-Module az)) { 

  # check which Az is installed
  $installed = Get-InstalledModule az -AllVersions

  # import correct module version
  if ($installed.Version -eq [System.Version]'8.0.0') {
    'Correct Version Installed'
    Import-Module Az -RequiredVersion 8.0.0
  }

  else {
    Write-Error 'Required version of Az not installed'
    break
  }
}

正如您在答案here中看到的,您必须ex隐式导入模块或其命令才能使用特定版本

相关问题