PowerCLIとPowerCLI Coreの双方で動くPowerShellスクリプトの作り方


2018/07/06追記

PowerCLI Coreが無くなり、VMware PowerCLI本体の方でPowerShell Coreへの対応が行われるようになった結果、ここに書いたようなモジュール名の使い分けが不要になりました。
詳細は「CentOS7環境にPowerShell CoreとVMware PowerCLIをインストール」に記載しました。


Windows環境以外でも、動作するようになったPowerShellと、VMware PowerCLI
(Power Shell Core 6.0をCentOS7で使ってみる)
(Linux上のPowerShellでvSphereの操作を行うPowerCLI Coreを試す+CentOS7で使うための回避策)

いままで作ったPowerCLI用のスクリプトを使おうとして問題発覚。

PowerCLIモジュールを「Import-Module -Name VMware.VimAutomation.Core」で読み込ませていたのだが、PowerCLI Coreではモジュール名が「PowerCLI.ViCore」に変更されていた。

また、PoweCLI Coreの手順だと、モジュール名を特定しなくとも、条件にあてはまるものを全て読み込む、ということができるやり方が提示されていた。

そこで、PowerCLIとPowerCLI Coreのどちらでも、関連モジュールを全て読み込むような記述を考えて作成した。

Write-Host "初期のモジュール読み込み状況"
Get-Module
Write-Host ""

# Windows用PowerCLIがインストールされているか?
$modulelist=Get-Module -ListAvailable VMware.Vim*
if($modulelist -eq $null){
	# modulelist Coreがインストールされているか?
	$modulelist=Get-Module -ListAvailable PowerCLI*
}
if($modulelist -eq $null){
	Write-Host "PowerCLIがインストールされていません"
	exit 1
}
$modulelist | Import-Module
Write-Host ""
Write-Host "現在のモジュール読み込み状況"
Get-Module

Windows環境での実行結果

PS C:\tmp> .\importmodule.ps1
初期のモジュール読み込み状況

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   3.1.0.0    Microsoft.PowerShell.Management     {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Con...
Manifest   3.1.0.0    Microsoft.PowerShell.Utility        {Add-Member, Add-Type, Clear-Variable, Compare-Object...}


現在のモジュール読み込み状況
Script     0.0        Initialize-VMware.VimAutomation....
Script     0.0        Initialize-VMware.VimAutomation....
Script     0.0        Initialize-VMware_VimAutomation_Cis
Manifest   3.1.0.0    Microsoft.PowerShell.Management     {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Con...
Manifest   3.1.0.0    Microsoft.PowerShell.Utility        {Add-Member, Add-Type, Clear-Variable, Compare-Object...}
Binary     6.5.0.4... VMware.VimAutomation.Cis.Core       {Connect-CisServer, Disconnect-CisServer, Get-CisService}
Manifest   6.5.0.4... VMware.VimAutomation.Common
Binary     6.5.0.2... VMware.VimAutomation.Core           {Add-PassthroughDevice, Add-VirtualSwitchPhysicalNetworkAd...
Binary     6.0.0.0    VMware.VimAutomation.HA             Get-DrmInfo
Binary     6.5.0.4... VMware.VimAutomation.License        Get-LicenseDataManager
Manifest   6.5.0.4... VMware.VimAutomation.Sdk            Get-PSVersion
Binary     6.5.0.4... VMware.VimAutomation.Storage        {Copy-VDisk, Export-SpbmStoragePolicy, Get-NfsUser, Get-Sp...
Binary     6.5.0.4... VMware.VimAutomation.Vds            {Add-VDSwitchPhysicalNetworkAdapter, Add-VDSwitchVMHost, E...
Binary     6.5.0.4... VMware.VimAutomation.vROps          {Connect-OMServer, Disconnect-OMServer, Get-OMAlert, Get-O...


 C:\tmp>

CentOS7環境での実行例

# cat importmodule.ps1 |powershell
PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.

PS /root> Write-Host "初期のモジュール読み込み状況"
初期のモジュール読み込み状況
PS /root> Get-Module

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   3.1.0.0    Microsoft.PowerShell.Utility        {Add-Member, Add-T...
Script     1.2        PSReadLine                          {Get-PSReadlineKey...


PS /root> Write-Host ""

PS /root>
PS /root> # Windows用PowerCLIがインストールされているか?
PS /root> $modulelist=Get-Module -ListAvailable VMware.Vim*
PS /root> if($modulelist -eq $null){
>>      # modulelist Coreがインストールされているか?
>>      $modulelist=Get-Module -ListAvailable PowerCLI*
>> }
>> if($modulelist -eq $null){
>>      Write-Host "PowerCLIがインストールされていません"
>>      exit 1
>> }
>> $modulelist | Import-Module
>> Write-Host ""
>> Write-Host "現在のモジュール読み込み状況"
>> Get-Module
>>

現在のモジュール読み込み状況

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     0.0        Initialize
Script     0.0        Initialize-VMware_VimAutomation_Vds
Manifest   3.1.0.0    Microsoft.PowerShell.Management     {Add-Content, Clea...
Manifest   3.1.0.0    Microsoft.PowerShell.Utility        {Add-Member, Add-T...
Binary     1.21       PowerCLI.Vds                        {Add-VDSwitchPhysi...
Binary     1.21       PowerCLI.ViCore                     {Add-PassthroughDe...
Script     1.2        PSReadLine                          {Get-PSReadlineKey...


PS /root> #

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください