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>