2016/12/15追記
Add-Snappinは、古いPowerShellの場合だけだったようなので、新しいバージョンの場合にも対応したものを下記に記載しています。
「vSphere PowerCLIの一部コマンドがPowerShell ISEで動作しない 2016/12/15版」
vSphere PowerCLIで変な動作に遭遇した。
vSphere PowerCLIの一部コマンドがPowerShell ISE上だと動作しない、という問題である。
元々、PowerShell ISEの標準設定ではvSphere PowerCLIのコマンドは動かない。
「Add-PSSnapin VMware.VimAutomation.Core」を追加し、モジュールを読み込ませる必要があるのだが、それを行っても動かないものがいくつかあることが分かった。
まずは状況の確認から・・・
現在のvSphere Power CLIのバージョンを確認
「Determining the build number for vSphere PowerCLI or VI Toolkit for Windows」より「Get-VIToolkitVersion」を実行。
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI> Get-VIToolkitVersion PowerCLI Version ---------------- VMware vSphere PowerCLI 6.0 Release 1 build 2548067 --------------- Component Versions --------------- VMWare AutoDeploy PowerCLI Component 6.0 build 2358282 VMWare ImageBuilder PowerCLI Component 6.0 build 2358282 VMware License PowerCLI Component 6.0 build 2315846 VMware vSphere PowerCLI Component 6.0 build 2548068 VMware Cloud Infrastructure Suite PowerCLI Component 6.0 build 2548068 VMware HA PowerCLI Component 6.0 build 2510422 VMware PowerCLI Component for Storage Management 6.0 build 2522368 VMware VDS PowerCLI Component 6.0 build 2548068 PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI>
(ちなみに、この記事を書いてる時点では、これより新しいバージョンが出ている)
vCenterサーバに接続
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI> Connect-VIServer -Server vCenterServer -User root -Password vmware Name Port User ---- ---- ---- vCenterServer 443 root PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI>
そして、「Get-VdsCommand」を実行してvSphre PowerCLIが提供するvDS関連コマンド一覧を取得。
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI> Get-VdsCommand CommandType Name ModuleName ----------- ---- ---------- Cmdlet Add-VDSwitchPhysicalNetworkAdapter VMware.Vi... Cmdlet Add-VDSwitchVMHost VMware.Vi... Cmdlet Export-VDPortGroup VMware.Vi... Cmdlet Export-VDSwitch VMware.Vi... Cmdlet Get-VDBlockedPolicy VMware.Vi... Cmdlet Get-VDPort VMware.Vi... Cmdlet Get-VDPortgroup VMware.Vi... Cmdlet Get-VDPortgroupOverridePolicy VMware.Vi... Cmdlet Get-VDSecurityPolicy VMware.Vi... Cmdlet Get-VDSwitch VMware.Vi... Cmdlet Get-VDSwitchPrivateVlan VMware.Vi... Cmdlet Get-VDTrafficShapingPolicy VMware.Vi... Cmdlet Get-VDUplinkLacpPolicy VMware.Vi... Cmdlet Get-VDUplinkTeamingPolicy VMware.Vi... Cmdlet New-VDPortgroup VMware.Vi... Cmdlet New-VDSwitch VMware.Vi... Cmdlet New-VDSwitchPrivateVlan VMware.Vi... Cmdlet Remove-VDPortGroup VMware.Vi... Cmdlet Remove-VDSwitch VMware.Vi... Cmdlet Remove-VDSwitchPhysicalNetworkAdapter VMware.Vi... Cmdlet Remove-VDSwitchPrivateVlan VMware.Vi... Cmdlet Remove-VDSwitchVMHost VMware.Vi... Cmdlet Set-VDBlockedPolicy VMware.Vi... Cmdlet Set-VDPort VMware.Vi... Cmdlet Set-VDPortgroup VMware.Vi... Cmdlet Set-VDPortgroupOverridePolicy VMware.Vi... Cmdlet Set-VDSecurityPolicy VMware.Vi... Cmdlet Set-VDSwitch VMware.Vi... Cmdlet Set-VDTrafficShapingPolicy VMware.Vi... Cmdlet Set-VDUplinkLacpPolicy VMware.Vi... Cmdlet Set-VDUplinkTeamingPolicy VMware.Vi... Cmdlet Set-VDVlanConfiguration VMware.Vi... PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI>
ここまでは良い。
PowerShell ISEでの動作が問題。
PowerShell ISE上部の編集画面に下記を入力。
Add-PSSnapin VMware.VimAutomation.Core Get-VIToolkitVersion Connect-VIServer -Server vCenterServer -User root -Password vmware Get-VdsCommand
最初の1行はvSphere PowerCLIのコマンドを実行させるため設定。
これを実行すると・・・
PS C:\Users\osakanataro> Add-PSSnapin VMware.VimAutomation.Core Get-VIToolkitVersion Connect-VIServer -Server vCenterServer -User root -Password vmware Get-VdsCommand Get-VIToolkitVersion : 用語 'Get-VIToolkitVersion' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、 再試行してください。 発生場所 行:2 文字:1 + Get-VIToolkitVersion + ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Get-VIToolkitVersion:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException Name Port User ---- ---- ---- vCenterServer 443 root Get-VdsCommand : 用語 'Get-VdsCommand' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。 発生場所 行:4 文字:1 + Get-VdsCommand + ~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Get-VdsCommand:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException PS C:\Users\osakanataro>
エラーになる・・・
なぜなのか・・・
まずはPowerShell ISE内で「Get-Module」を実行し、現在使用できるコマンドを確認
PS C:\Users\osakanataro> Get-Module ModuleType Version Name ExportedCommands ---------- ------- ---- ---------------- Script 1.0.0.0 ISE {Get-IseSnippet, Import-IseSnippet, New-IseSnippet} Manifest 3.1.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Content...} Manifest 3.0.0.0 Microsoft.PowerShell.Security {ConvertFrom-SecureString, ConvertTo-SecureString, Get-Acl, Get-AuthenticodeSignature...} Manifest 3.1.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type, Clear-Variable, Compare-Object...} Manifest 3.0.0.0 Microsoft.WSMan.Management {Connect-WSMan, Disable-WSManCredSSP, Disconnect-WSMan, Enable-WSManCredSSP...} PS C:\Users\osakanataro>
比較のためvSphere PowerCLIの方でも「Get-Module」を実行してみる
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI> Get-Module ModuleType Version Name ExportedCommands ---------- ------- ---- ---------------- Script 0.0 Initialize-VMware_VimAutomation_Cis Script 0.0 Initialize-VMware_VimAutomation_Vds Manifest 3.1.0.0 Microsoft.PowerShell.Management {Add-Computer, Add... Manifest 3.1.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-T... Binary 6.0.0.0 VMware.VimAutomation.Cis.Core {Connect-CisServer... Manifest 6.0.0.0 VMware.VimAutomation.Core {Add-PassthroughDe... Binary 6.0.0.0 VMware.VimAutomation.HA Get-DrmInfo Manifest 6.0.0.0 VMware.VimAutomation.Sdk Binary 6.0.0.0 VMware.VimAutomation.Storage {Export-SpbmStorag... Binary 6.0.0.0 VMware.VimAutomation.Vds {Add-VDSwitchPhysi... PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI>
全然違う
「VMware.VimAutomation.Vds」を追加すると実行できそうな雰囲気・・・
しかし、「Add-PSSnapin VMware.VimAutomation.Vds」は下記のエラーとなる。
Add-PSSnapin : Windows PowerShell スナップイン 'VMware.VimAutomation.Vds' がこのコンピューターにインストールされていません。 発生場所 行:2 文字:1 + Add-PSSnapin VMware.VimAutomation.Vds + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (VMware.VimAutomation.Vds:String) [Add-PSSnapin]、PSArgumentException + FullyQualifiedErrorId : AddPSSnapInRead,Microsoft.PowerShell.Commands.AddPSSnapinCommand
ではどうするか?
「Get-Command -Module モジュール名」で指定したモジュールでどんなコマンドが実行できるかを表示すると実行でいるようになるらしい。
そんな馬鹿な、と思いつつ、$DUMMY環境変数に放り込むように変更。
Add-PSSnapin VMware.VimAutomation.Core $DUMMY=Get-Command -Module VMware.VimAutomation.Vds Get-VIToolkitVersion Connect-VIServer -Server vCenterServer -User root -Password vmware Get-VdsCommand
そして実行
PS C:\Users\osakanataro> Add-PSSnapin VMware.VimAutomation.Core $DUMMY=Get-Command -Module VMware.VimAutomation.Vds Get-VIToolkitVersion Connect-VIServer -Server vCenterServer -User root -Password vmware Get-VdsCommand PowerCLI Version ---------------- VMware vSphere PowerCLI 6.0 Release 1 build 2548067 --------------- Component Versions --------------- VMWare AutoDeploy PowerCLI Component 6.0 build 2358282 VMWare ImageBuilder PowerCLI Component 6.0 build 2358282 VMware License PowerCLI Component 6.0 build 2315846 VMware vSphere PowerCLI Component 6.0 build 2548068 VMware VDS PowerCLI Component 6.0 build 2548068 IsConnected : True Id : /VIServer=root@vCenterServer:443/ ServiceUri : https://vCenterServer/sdk SessionSecret : cb8924f9fb4b2cb6cb75a357d8127e2154376d17 Name : vCenterServer Port : 443 SessionId : cb8924f9fb4b2cb6cb75a357d8127e2154376d17 User : root Uid : /VIServer=root@vCenterServer:443/ Version : 6.0 Build : 2776510 ProductLine : vpx InstanceUuid : 1a31cfc8-0931-4752-9573-461f044cc2d4 RefCount : 6 ExtensionData : VMware.Vim.ServiceInstance Client : VMware.VimAutomation.ViCore.Impl.V1.VimClient Verb : Add Noun : VDSwitchPhysicalNetworkAdapter HelpFile : VMware.VimAutomation.Vds.Commands.dll-Help.xml PSSnapIn : ImplementingType : VMware.VimAutomation.Vds.Commands.Cmdlets.AddVDSwitchPhysicalNetworkAdapter Definition : Add-VDSwitchPhysicalNetworkAdapter [-VMHostPhysicalNic] <PhysicalNic[]> [-DistributedSwitch] <DistributedSwitch> [-VirtualNicPor tgroup <VDPortgroup[]>] [-VMHostVirtualNic <HostVirtualNic[]>] [-Server <VIServer[]>] [-WhatIf] [-Confirm] [<CommonParameters>] DefaultParameterSet : OutputType : {System.Void} Options : ReadOnly Name : Add-VDSwitchPhysicalNetworkAdapter CommandType : Cmdlet Visibility : Public ModuleName : VMware.VimAutomation.Vds Module : VMware.VimAutomation.Vds RemotingCapability : PowerShell Parameters : {[VMHostPhysicalNic, System.Management.Automation.ParameterMetadata], [DistributedSwitch, System.Management.Automation.Parameter Metadata], [VirtualNicPortgroup, System.Management.Automation.ParameterMetadata], [VMHostVirtualNic, System.Management.Automatio n.ParameterMetadata]...} ParameterSets : {[-VMHostPhysicalNic] <PhysicalNic[]> [-DistributedSwitch] <DistributedSwitch> [-VirtualNicPortgroup <VDPortgroup[]>] [-VMHostVi rtualNic <HostVirtualNic[]>] [-Server <VIServer[]>] [-WhatIf] [-Confirm] [<CommonParameters>]} HelpUri : http://www.vmware.com/support/developer/PowerCLI/PowerCLI60R1/html/Add-VDSwitchPhysicalNetworkAdapter.html DLL : C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Modules\VMware.VimAutomation.Vds\VMware.VimAutomation.Vds.Commands .dll <略> Verb : Set Noun : VDVlanConfiguration HelpFile : VMware.VimAutomation.Vds.Commands.dll-Help.xml PSSnapIn : ImplementingType : VMware.VimAutomation.Vds.Commands.Cmdlets.Policies.SetVDVlanConfiguration Definition : Set-VDVlanConfiguration -VDPortgroup <VDPortgroup[]> [-DisableVlan] [-VlanId <int>] [-VlanTrunkRange <VlanRangeList>] [-PrivateV lanId <int>] [-WhatIf] [-Confirm] [<CommonParameters>] Set-VDVlanConfiguration -VDSwitch <VDSwitch[]> [-DisableVlan] [-VlanId <int>] [-VlanTrunkRange <VlanRangeList>] [-PrivateVlanId <int>] [-WhatIf] [-Confirm] [<CommonParameters>] Set-VDVlanConfiguration -VDPort <VDPort[]> [-DisableVlan] [-VlanId <int>] [-VlanTrunkRange <VlanRangeList>] [-PrivateVlanId <int >] [-WhatIf] [-Confirm] [<CommonParameters>] DefaultParameterSet : OutputType : {VMware.VimAutomation.Vds.Types.V1.VlanConfiguration} Options : ReadOnly Name : Set-VDVlanConfiguration CommandType : Cmdlet Visibility : Public ModuleName : VMware.VimAutomation.Vds Module : VMware.VimAutomation.Vds RemotingCapability : PowerShell Parameters : {[VDPortgroup, System.Management.Automation.ParameterMetadata], [VDSwitch, System.Management.Automation.ParameterMetadata], [VDP ort, System.Management.Automation.ParameterMetadata], [DisableVlan, System.Management.Automation.ParameterMetadata]...} ParameterSets : {-VDPortgroup <VDPortgroup[]> [-DisableVlan] [-VlanId <int>] [-VlanTrunkRange <VlanRangeList>] [-PrivateVlanId <int>] [-WhatIf] [-Confirm] [<CommonParameters>], -VDSwitch <VDSwitch[]> [-DisableVlan] [-VlanId <int>] [-VlanTrunkRange <VlanRangeList>] [-Priva teVlanId <int>] [-WhatIf] [-Confirm] [<CommonParameters>], -VDPort <VDPort[]> [-DisableVlan] [-VlanId <int>] [-VlanTrunkRange <V lanRangeList>] [-PrivateVlanId <int>] [-WhatIf] [-Confirm] [<CommonParameters>]} HelpUri : http://www.vmware.com/support/developer/PowerCLI/PowerCLI60R1/html/Set-VDVlanConfiguration.html DLL : C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Modules\VMware.VimAutomation.Vds\VMware.VimAutomation.Vds.Commands .dll PS C:\Users\osakanataro>
ほんとに実行できたーーー
じゃぁ、この段階での「Get-Module」はどうなってるか確認してみると、ちゃんとVMware.VimAutomation.Vdsが読み込まれてる・・・
謎な動作をしてますね・・・
PS C:\Users\osakanataro> Get-Module ModuleType Version Name ExportedCommands ---------- ------- ---- ---------------- Script 0.0 Initialize-VMware_VimAutomation_Vds Script 1.0.0.0 ISE {Get-IseSnippet, Import-IseSnippet, New-IseSnippet} Manifest 3.1.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Content...} Manifest 3.0.0.0 Microsoft.PowerShell.Security {ConvertFrom-SecureString, ConvertTo-SecureString, Get-Acl, Get-AuthenticodeSignature...} Manifest 3.1.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type, Clear-Variable, Compare-Object...} Manifest 3.0.0.0 Microsoft.WSMan.Management {Connect-WSMan, Disable-WSManCredSSP, Disconnect-WSMan, Enable-WSManCredSSP...} Manifest 6.0.0.0 VMware.VimAutomation.Core Manifest 6.0.0.0 VMware.VimAutomation.Sdk Binary 6.0.0.0 VMware.VimAutomation.Vds {Add-VDSwitchPhysicalNetworkAdapter, Add-VDSwitchVMHost, Export-VDPortGroup, Export-VDSwi... PS C:\Users\osakanataro>