vSphere PowerCLIの一部コマンドがPowerShell ISEで動作しない 2016/12/15版

2017/02/27追記
Windows環境以外でも動作するPowerCLI Coreが登場し、この手順を行おうとしたら、モジュール名が異なり実施できませんでした。
PowerCLIとPowerCLI Coreの双方で動くPowerShellスクリプトの作り方」に、対処方法を記載しています。


1年前に「vSphere PowerCLIの一部コマンドがPowerShell ISEで動作しない」というのを書いた。

最近、環境を作り直すのと一緒にPowerShellを最新にして、そして、PowerCLIを最新の6.5にしてみた。(New Release: PowerCLI 6.5 R1)

以前と同じように、PowerShell ISE上で「Add-PSSnapin VMware.VimAutomation.Core」を実行すると、「Add-PSSnapin : No snap-ins have been registered for Windows PowerShell version 5.」というエラーが発生。
「Add-PSSnapin」は使わないようだ。

 C:\Users\test3> Add-PSSnapin VMware.VimAutomation.Core


Add-PSSnapin : No snap-ins have been registered for Windows PowerShell version 5.
At line:1 char:1
+ Add-PSSnapin VMware.VimAutomation.Core
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (VMware.VimAutomation.Core:String) [Add-PSSnapin], PSArgumentException
    + FullyQualifiedErrorId : AddPSSnapInRead,Microsoft.PowerShell.Commands.AddPSSnapinCommand
 

 C:\Users\test3> 

代替はなんだろ?と確認すると「Import-Module -Name VMware.VimAutomation.Core」。

いままでスクリプトにAdd-PSSnapin~と書いていたところを、どちらでも対応できるように書き換えるとすると、下記のようになるだろうか?

if ( $PSVersionTable.PSVersion.Major -lt 5){
    Add-PSSnapin VMware.VimAutomation.Core
}else{
    Import-Module -Name VMware.VimAutomation.Core
}

下記は参考資料の実行ログ

PS C:\Users\test3> 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.1.0.0    Microsoft.PowerShell.Utility        {Add-Member, Add-Type, Clear-Variable, Compare-Object...}                                  



PS C:\Users\test3> Get-Module -ListAvailable


    Directory: C:\Program Files\WindowsPowerShell\Modules


ModuleType Version    Name                                ExportedCommands                                                                           
---------- -------    ----                                ----------------                                                                           
Binary     1.0.0.1    PackageManagement                   {Find-Package, Get-Package, Get-PackageProvider, Get-PackageSource...}                     
Script     1.0.0.1    PowerShellGet                       {Install-Module, Find-Module, Save-Module, Update-Module...}                               


    Directory: C:\Windows\system32\WindowsPowerShell\v1.0\Modules


ModuleType Version    Name                                ExportedCommands                                                                           
---------- -------    ----                                ----------------                                                                           
Manifest   1.0.0.0    AppLocker                           {Set-AppLockerPolicy, Get-AppLockerPolicy, Test-AppLockerPolicy, Get-AppLockerFileInform...
Manifest   1.0.0.0    BitsTransfer                        {Add-BitsFile, Remove-BitsTransfer, Complete-BitsTransfer, Get-BitsTransfer...}            
Manifest   1.0.0.0    CimCmdlets                          {Get-CimAssociatedInstance, Get-CimClass, Get-CimInstance, Get-CimSession...}              
Script     1.0.0.0    ISE                                 {New-IseSnippet, Import-IseSnippet, Get-IseSnippet}                                        
Manifest   1.0.0.0    Microsoft.PowerShell.Archive        {Compress-Archive, Expand-Archive}                                                         
Manifest   3.0.0.0    Microsoft.PowerShell.Diagnostics    {Get-WinEvent, Get-Counter, Import-Counter, Export-Counter...}                             
Manifest   3.0.0.0    Microsoft.PowerShell.Host           {Start-Transcript, Stop-Transcript}                                                        
Manifest   3.1.0.0    Microsoft.PowerShell.Management     {Add-Content, Clear-Content, Clear-ItemProperty, Join-Path...}                             
Script     1.0        Microsoft.PowerShell.ODataUtils     Export-ODataEndpointProxy                                                                  
Manifest   3.0.0.0    Microsoft.PowerShell.Security       {Get-Acl, Set-Acl, Get-PfxCertificate, Get-Credential...}                                  
Manifest   3.1.0.0    Microsoft.PowerShell.Utility        {Format-List, Format-Custom, Format-Table, Format-Wide...}                                 
Manifest   3.0.0.0    Microsoft.WSMan.Management          {Disable-WSManCredSSP, Enable-WSManCredSSP, Get-WSManCredSSP, Set-WSManQuickConfig...}     
Manifest   1.0.0.0    NetworkSwitchManager                {Disable-NetworkSwitchEthernetPort, Enable-NetworkSwitchEthernetPort, Get-NetworkSwitchE...
Manifest   1.1        PSDesiredStateConfiguration         {Set-DscLocalConfigurationManager, Start-DscConfiguration, Test-DscConfiguration, Publis...
Script     1.0.0.0    PSDiagnostics                       {Disable-PSTrace, Disable-PSWSManCombinedTrace, Disable-WSManTrace, Enable-PSTrace...}     
Binary     1.1.0.0    PSScheduledJob                      {New-JobTrigger, Add-JobTrigger, Remove-JobTrigger, Get-JobTrigger...}                     
Manifest   2.0.0.0    PSWorkflow                          {New-PSWorkflowExecutionOption, New-PSWorkflowSession, nwsn}                               
Manifest   1.0.0.0    PSWorkflowUtility                   Invoke-AsWorkflow                                                                          
Manifest   1.0.0.0    TroubleshootingPack                 {Get-TroubleshootingPack, Invoke-TroubleshootingPack}                                      


    Directory: C:\Program Files (x86)\VMware\Infrastructure\PowerCLI\Modules


ModuleType Version    Name                                ExportedCommands                                                                           
---------- -------    ----                                ----------------                                                                           
Binary     6.0.0.0    VMware.DeployAutomation                                                                                                        
Binary     6.0.0.0    VMware.ImageBuilder                                                                                                            
Binary     6.5.0.4... VMware.VimAutomation.Cis.Core                                                                                                  
Binary     6.5.0.4... VMware.VimAutomation.Cloud                                                                                                     
Manifest   6.5.0.4... VMware.VimAutomation.Common                                                                                                    
Binary     6.5.0.2... VMware.VimAutomation.Core           HookGetViewAutoCompleter                                                                   
Binary     6.0.0.0    VMware.VimAutomation.HA                                                                                                        
Binary     7.0.2.4... VMware.VimAutomation.HorizonView                                                                                               
Binary     6.5.0.4... VMware.VimAutomation.License                                                                                                   
Binary     6.5.0.4... VMware.VimAutomation.PCloud                                                                                                    
Manifest   6.5.0.4... VMware.VimAutomation.Sdk            Get-PSVersion                                                                              
Binary     6.5.0.4... VMware.VimAutomation.Storage                                                                                                   
Binary     6.5.0.4... VMware.VimAutomation.Vds                                                                                                       
Binary     6.5.0.4... VMware.VimAutomation.vROps                                                                                                     
Binary     6.0.0.0    VMware.VumAutomation                                                                                                           



PS C:\Users\test3> Import-Module -Name VMware.VimAutomation.Core

 C:\Users\test3> Get-Module

ModuleType Version    Name                                ExportedCommands                                                                           
---------- -------    ----                                ----------------                                                                           
Script     0.0        Initialize-VMware_VimAutomation_Cis                                                                                            
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.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-VirtualSwitchPhysicalNetworkAdapter, Add-VMHost, Add-VMHostN...
Manifest   6.5.0.4... VMware.VimAutomation.Sdk            Get-PSVersion                                                                              



 C:\Users\test3> 

なお、PowerCLI 6.5を起動した場合に読み込まれているモジュール一覧は以下の通り

          Welcome to VMware PowerCLI!

Log in to a vCenter Server or ESX host:              Connect-VIServer
To find out what commands are available, type:       Get-VICommand
To show searchable help for all PowerCLI commands:   Get-PowerCLIHelp
Once you've connected, display all virtual machines: Get-VM
If you need more help, visit the PowerCLI community: Get-PowerCLICommunity

       Copyright (C) VMware, Inc. All rights reserved.


PowerCLI C:\> Get-Module

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     0.0        Initialize-VMware.VimAutomation....
Script     0.0        Initialize-VMware.VimAutomation....
Script     0.0        Initialize-VMware.VimAutomation....
Script     0.0        Initialize-VMware_DeployAutomation
Script     0.0        Initialize-VMware_VimAutomation_Cis
Script     0.0        Initialize-VMware_VumAutomation
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.DeployAutomation             {Add-DeployRule, A...
Binary     6.0.0.0    VMware.ImageBuilder                 {Add-EsxSoftwareDe...
Binary     6.5.0.4... VMware.VimAutomation.Cis.Core       {Connect-CisServer...
Binary     6.5.0.4... VMware.VimAutomation.Cloud          {Add-CIDatastore, ...
Manifest   6.5.0.4... VMware.VimAutomation.Common
Binary     6.5.0.2... VMware.VimAutomation.Core           {Add-PassthroughDe...
Binary     6.0.0.0    VMware.VimAutomation.HA             Get-DrmInfo
Binary     7.0.2.4... VMware.VimAutomation.HorizonView    {Connect-HVServer,...
Binary     6.5.0.4... VMware.VimAutomation.License        Get-LicenseDataMan...
Binary     6.5.0.4... VMware.VimAutomation.PCloud         {Connect-PIServer,...
Manifest   6.5.0.4... VMware.VimAutomation.Sdk            Get-PSVersion
Binary     6.5.0.4... VMware.VimAutomation.Storage        {Copy-VDisk, Expor...
Binary     6.5.0.4... VMware.VimAutomation.Vds            {Add-VDSwitchPhysi...
Binary     6.5.0.4... VMware.VimAutomation.vROps          {Connect-OMServer,...
Binary     6.0.0.0    VMware.VumAutomation                {Add-EntityBaselin...


PowerCLI C:\>

ConohaでUbuntu16.04 64bitを構築すると高確率で設定したパスワードが利用できない

2016/12/07 19:23~2016/12/08 18:00頃の出来事です。

先日Amazon LightsailでやろうとしていたことはRAM 512MBでは実現できないということが判明し、RAM1GBを安く使えるところを探したら、「ConoHa」で45日間810円で使える、というのをやっていることを発見。

じゃぁ、使ってみるかと早速デプロイ
すると、デプロイ時に指定したはずのパスワードでログインできないわけです。

デプロイ時、パスワード指定が1つしかなく、しかもマスクをされるので、入力を間違ってもわからないわけなんですが
その後、50回以上試したところ、Ubuntu 16.04 64bit環境では5回ぐらいしかログインに成功しませんでした。
これがCentOS7.2 64bit環境だと3回中3回成功です。

途中、入力間違いが無いようにコピー&ペーストを使ってみても状況は変わらなかったので、非常に謎。

サポートに問い合わせるも2日経過後も原因不明とのこと。

果たしてConoHaを利用することはできるのでしょうか・・・


以下、メモ書き

1. 「Ubuntu 16.04 64bit」を選択し、rootパスワードとしてとある文字列指定して、仮想インスタンスをデプロイ
2. コンソール画面開いてログインを使用とするも、パスワード違っている、としてログインできない・・・

3. パスワード入力間違ったかなぁ、と、rootパスワードが分からない場合の対処を調べる
4. Conohaの場合、対処はない、らしいので、新しくもう1つの仮想インスタンスをデプロイ
5. うっかり間違えて「Cent OS 7.2 64bit」でデプロイしてしまっていたが、ログインできることを確認
6. もう1つ新しい仮想インスタンスを、「Ubuntu 16.04 64bit」を選択し、デプロイ
7. 今度はログインに成功
8. 最初のは入力し間違いだったのだろう、と納得して、セットアップ開始
9. 途中うっかり操作を誤って、まともに動作しないようにしてしまう
10. 仮想インスタンスを新しく作らなくても「再構築」で作り直せる、というのを知る
11. というわけで、操作を誤った仮想インスタンスに対して「Ubuntu 16.04 64bit」で再構築
12. ログインできない
13. おっかしいなぁ・・・と、再度「再構築」
14. ログインできない
15. エディッタに書いたパスワード文字列をコピー&ペーストして「再構築」
16. ログインできない
17. コンソールでのパスワード文字列入力もコピー&ペーストできるのを知って再ログインを試みるも失敗

最終的に、最低でも40回は再構築したはずで、もしかすると50回を超えてるかも?
それだけの回数を行って、ログインに成功したのは3回程度でした。

で・・・問い合わせを行っているのですが、サポートに連絡をして、受け付けましたという連絡があったのが12/08 10:20

連絡がないのでとりあえずもう1回チャレンジしてみる

それでも連絡がないので、15:55にチャットで連絡をとってみる(下記のツイート画像は9時台ですが、その後も実験しています)

原因不明、解決見込みも不明、とのこと

で・・・そこから丸一日経ちましたが、原因不明、解決見込みも不明、だそうな

ちなみに、パスワード文字列は「ILoveCOnoha1!」というやつでも現象が発生しています。
アンチウイルスソフトやネットワーク環境固有の問題も疑い、3箇所でそれぞれアンチウイルスソフトも違う場所から操作を行っても現象は発生。

いったいなんなのか・・・・

というわけで、無駄に時間を使わせてるワリに、いまだに利用できないConoHaはクソ!

なお、この試行錯誤に使った29円、支払う必要あるの?と聞いたところ、クーポンによる値引きが適用されましたとさ。
(確認しなかったら適用しないつもりだったんだろうか?)

Amazon Lightsailのインスタンスを消す際の手順キャプチャ

Amazon LightsailのRAM 512MBのインスタンスが、1ヶ月目無料、ということなので、いま構築しようとしているメールサーバの検証用に使ってみるかな、と試してみた。

が・・・やってみるとRAM 512MBだとメモリが足らず、必要なソフトウェアが全然起動しなかった。
SSDを使っていることだし、ローカルディスクのswapfile作ってみたらどうなるかな?と試してみたところ、ソフトウェアは起動したものの、今度は負荷でインスタンス全体がまともに動かなくなった・・・

というわけで、RAM512MBでは使い物にならない、ということで、作成したLightsailのインスタンスを消すことにしたので、その手順キャプチャを一挙公開。

ちなみに、構築手順もキャプチャを撮ってはいたものの、どうせ、こんなんは、よくある記事なので省略です。

1. 仮想マシンインスタンスの「Delete」タブを開きます

2. 「Delete」ボタンを押し、表示される確認に「Yes」とこたえます

3. 削除中…

4. 削除完了…なんだけどエラー。これは問題ないエラー表示
いままで「ubuntu-webserver」インスタンスのページを開いていたが、該当インスタンスが削除されたので、そのページが表示出来ない、というエラー。

5. 続いて固定IPの削除をするため「Resouces」の「Networking」にある該当IPアドレスをクリック

6. 「この固定IPが割り当てられていないこと」と「割り当てていない場合、コストがかかること」が警告されているのを確認
割り当てられていない固定IPを保持していると、1時間あたり$0.005の料金が発生しますので、不要ならちゃんと消しましょう。(参考までRAM512MBの仮想インスタンスは1時間当たり$0.007です)

7. 「Delete」タブにて「Delete Static IP」を実行

8. 最終確認を「Yes」

9. 削除が完了しました

で・・・
今回のテストで約4時間インスタンスを立ち上げていたわけなのですが、費用は・・・

・・・いまのところ0ドルですが、24時間経過後あたりで変わったりするんでしょうかね?
う~ん・・・

AWSのVPSサービスAmazon Lightsailの注意点を確認した

2016/12/01よりAWSの新サービス「Amazon Lightsail」が開始された。

早速公式blogでも「Amazon Lightsail – AWSの力、VPSの簡単さ」と紹介されている。

月5ドルからという価格設定はGMOが運営しているVPSサービス「Conoha」の価格体系とほぼ同じである。

2016/12/06時点のAmazon Lightsailは、データセンタを「Virginia/us-east」のみしか選択できないので、ネットワーク的には日本から遠いという欠点があります。

それ以外で目に付く問題点はないか、「マニュアル」を読んで確認しました。

・プランのアップグレードは可能だが、現状はWebコンソールから実行できない(改善予定あり)
大きなサイズのインスタンスへアップグレードはAPIを使って実行することはできる。
しかし、現時点ではLightsail console(Webコンソール)から実行することができない。

・ディスクの増量は不可能

・プランのダウングレードは不可能

・20個のインスタンスまで作成できる

・外部からアクセスするためのIPアドレスは固定されないが、設定で固定IPアドレスも使える
各仮想マシンには、内部用IP(private IP)と、外部用IP(public IP)の2つが割り当てられる。
どちらも固定はされていない。
外部用IPに関しては固定IPアドレスを使うこともできる。

・固定IPはLightsailのユーザアカウント単位で5個まで使える
VPSをいくつたてても、使える固定IPアドレスの最大数は5個。

・使用中の固定IPについてはインスタンスの使用料金に含まれる
インスタンスで使っている固定IPについては、インスタンスの使用料金に含まれる。
インスタンスで使ってない固定IPについては、1時間当たり$0.005を請求する。
このため、インスタンスに割り当ててない固定IPは、即座に解放する必要がある。

hey’re free in Lightsail, as long as you are using them! You don’t pay for a static IP if it is attached to an instance. Public IPs are a scarce resource and Lightsail is committed to helping to use them efficiently, so we charge a small $0.005/hour fee for static IPs not attached to an instance for more than 1 hour.

・ファイヤウォールとしてLightsail firewallというものが提供されている。
転送量制限でカウントする転送量がLightsail firewallの前か後かは不明

指定したデータストアがローカルディスクなのかを判定するPowerCLI

PowerShell/PowerCLIを使ってデータストアの空き容量チェックを行う過程で、ローカルディスクのVMFSは無視したい、というものがある。
ESXiホスト台数が増加することを考えると名前による除外などはやりたくない。
何らかの手法でローカルディスクかどうかを判定できないかを探した。

・Get-Datastoreで取得できる情報の範囲で確定できるものが無い
  vSphere6であれば「ExtensionData.Summary.MultipleHostAccess」というデータストアが
  複数のホストからアクセス可能か?というフラグ(true or false)があるが、
  1台のホストだけ接続しているiSCSi,FCデータストアも対象になるのでは?(未確認)
・Get-ScsiLunには「IsLocal」というローカルディスク判定フラグがある
・Get-ScsiLunはデータストアを指定して実行することができる
・ESXiホストが停止しているデータストアに対するGet-ScsiLunはエラーとなる
・アクセス出来ないデータストアは「Accessible」フラグがfalseとなる

これらを元に作成した判定

$localdatastore=$false # フラグ
$datastore = Get-Datastore "データストア名" 
if($datastore.Type -eq "VMFS"){
  # VMFSだとローカルディスクの可能性があり
  # それ以外の、NFS,vsanは対象外
  if($datastore.ExtensionData.Summary.MultipleHostAccess -eq $true){
    # MultipleHostAccessがTrueなら、ローカルディスクではないことが確定
    $localdatastore=$false
  }elseif($datastore.Accessible -eq $true){
    # アクセスできるならGet-ScsiLunがエラーにならない
    $diskinquire = Get-ScsiLun -Datastore $datastore
    if($diskinquire.IsLocal -eq $true){
      # IsLocalによるローカルディスク確定
      $localdatastore=$true
    }
  }else{
    # アクセスできないデータストア
  }
}