Skip navigation
2017

PowerCLI には、vSAN に対応したコマンドも含まれています。

VMware Hands-on Labs (HOL)のラボを利用して PowerCLI 6.5 R1 で vSAN の情報を見てみます。

 

PowerCLI を実行する環境について。

今回は 「vSAN 6.5 の新機能」(HOL-1731-SDC-1 )のシナリオを利用します。

このラボには PowerCLI で vSAN を操作するシナリオ(モジュール 4)も含まれていますが、

今回は モジュール1 での vSphere Web Client での情報確認を PowerCLI で代用してみます。

 

下記の「HOL-1731-SDC-1 - vSAN v6.5: What's New」です。

「レッスン 3:vSAN クラスターの準備」のシナリオを進めて vSAN クラスタを構成しておきます。

http://labs.hol.vmware.com/HOL/catalogs/lab/3340

 

2018年3月時点ではすでに上記のラボは撤収されていますが、

「HOL-1808-01-HCI - vSAN v6.6 - Getting Started」などで代用できます。

モジュール 1 のシナリオを進めて vSAN クラスタを構成しておきます。

http://labs.hol.vmware.com/HOL/catalogs/lab/3651

 

HOL-1808-01-HCI - vSAN v6.6 - Getting Started のモジュール1 終了後の状態には

HoL で用意されている Module Switcher で移動することができますが、

下記の投稿内容でも準備ができます。

PowerCLI で vSAN セットアップをためしてみる。

 

PowerCLI での vSAN 環境の確認。

デスクトップにある PowerCLI のアイコンをダブルクリック起動して、vCenter に接続します。

PowerCLI> Connect-VIServer vcsa-01a.corp.local

 

PowerCLI コマンドラインは、HOL の「テキストの送信」を利用します。

vsan-powercli-01.png

 

vSAN クラスタの設定を確認してみます。

PowerCLI> Get-Cluster | where {$_.VsanEnabled -eq $True} | Get-VsanClusterConfiguration | select Cluster, VsanEnabled, VsanDiskClaimMode, SpaceEfficiencyEnabled | ft -AutoSize

vsan-powercli-02.png

 

ディスクグループの情報を確認してみます。

IsCacheDisk が True のものがキャッシュ ディスクで、False のものがキャパシティ ディスクです。

PowerCLI> Get-Cluster | where {$_.VsanEnabled -eq $True} | Get-VsanDiskGroup | sort VMHost | select VMHost, DiskGroupType, DiskFormatVersion, @{N="CacheDisk"; E={($_ | Get-VsanDisk | where {$_.IsCacheDisk -eq $true}).Count}}, @{N="CapacityDisk"; E={($_ | Get-VsanDisk | where {$_.IsCacheDisk -ne $true}).Count}}, Uuid | ft -AutoSize

 

デフォルトのウインドウ幅だと表示しきれないので、必要に応じて変更します。

たとえば、下記でウィンドウ幅を 120 に拡張できます。

$window_width = 120

$pswindow = (Get-Host).ui.rawui

$newsize = $pswindow.buffersize; $newsize.width = $window_width; $pswindow.buffersize = $newsize

$newsize = $pswindow.windowsize; $newsize.width = $window_width; $pswindow.windowsize = $newsize

vsan-powercli-03.png

 

vSAN ディスクを確認してみます。

PowerCLI> Get-Cluster | where {$_.VsanEnabled -eq $True} | Get-VsanDiskGroup | % {$hv = $_.VMHost; $_ | Get-VsanDisk | % {$path = $_.DevicePath; $_| select @{N="ESXi"; E={$hv.Name}},Uuid, IsCacheDisk, IsSSD, CanonicalName, @{N="CapacityGB"; E={($hv | Get-VMHostDisk | where {$_.DeviceName -eq $path }).ScsiLun.CapacityGB}}}} | ft -AutoSize

vsan-powercli-04.png

 

環境によっては、CapacityGB の結果を CanonicalName より前に持ってきた方が見やすいかもしれません。

(デバイス名が長いので)

容量の桁数を調整したり、結果をソート(下記では「| sort ESXi,IsCacheDisk」)すると

さらに見やすくすることもできます。

PowerCLI> Get-Cluster | where {$_.VsanEnabled -eq $True} | Get-VsanDiskGroup | % {$hv = $_.VMHost; $_ | Get-VsanDisk | % {$path = $_.DevicePath; $_| select @{N="ESXi"; E={$hv.Name}},Uuid,IsCacheDisk,IsSSD,@{N="CapacityGB"; E={[int]($hv | Get-VMHostDisk | where {$_.DeviceName -eq $path }).ScsiLun.CapacityGB}},CanonicalName}} | sort ESXi,IsCacheDisk | ft -AutoSize

 

(ここだけ HoL ではなく自宅ラボですが)表示を工夫した上記のコマンドラインを実行してみた様子です。

home-vsan-samle.png

 

vSAN データストアの容量情報を確認してみます。

PowerCLI> Get-Datastore | where {$_.Type -eq "vsan"} | select Name, Type, CapacityGB, FreeSpaceGB, @{N="ProvisionedSpaceGB"; E={($_.CapacityGB - $_.FreeSpaceGB) + ($_.ExtensionData.Summary.Uncommitted / 1GB)}} | ft -AutoSize

vsan-powercli-05.png

 

各 ESXi ホストのストレージ プロバイダ の情報を見てみます。

PowerCLI> Get-VasaProvider | where {$_.Namespace -eq "VSAN"} | sort Name | select Status, Name, ProviderId | ft -AutoSize

vsan-powercli-06.png

 

アクティブなプロバイダは下記でわかります。

PowerCLI> Get-VasaStorageArray | where {$_.ModelId -eq "VSAN"} | select @{N="Datastore"; E={$Id = "ds:///vmfs/volumes/" + $_.Id + "/"; (Get-Datastore | where {$_.ExtensionData.Info.Url -eq $Id}).Name}}, Provider, Id | ft -AutoSize

vsan-powercli-07.png

 

デフォルトのストレージ ポリシー「Virtual SAN Default Storage Policy」のルールを確認してみます。

PowerCLI> Get-SpbmStoragePolicy -Name "Virtual SAN Default Storage Policy" | select -ExpandProperty AnyOfRuleSets | %{$name = $_.Name; $_ | select -ExpandProperty AllOfRules | select @{N="RuleName"; E={$Name}}, Capability, Value} | ft -AutoSize

vsan-powercli-08.png

 

HOL のシナリオを「レッスン 4: VSAN クラスター キャパシティのスケール アウト」まで進めると、

下記のように vSAN が拡張された様子が確認できます。

 

vSAN クラスタに、ディスクグループが追加されています。

vsan-powercli-11.png

 

追加したディスクグループの、キャッシュ ディスクとキャパシティディスクです。

vsan-powercli-12.png

 

vSAN データストア容量も追加されてます。

vsan-powercli-13.png

 

このように、vSphere Web Client で確認できる情報と同様のものが、PowerCLI でも確認することができます。

vSAN の構成情報をレポートとして残したい場合などに利用すると便利かもしれません。

 

以上、PowerCLI で vSAN の情報を見てみる話でした。

今年も vExpert NSX 2017 Award を受賞できました!

vExpert NSX 2017 Award Announcement - VMTN Blog - VMware Blogs

 

ということで、記念に自宅 NSX を最新版 6.3.3 にアップデートしてみました。

nexv-633.png

 

そして PowerNSX でバージョン確認してみようと思います。

今回は権限の都合により、vCenter に接続したあと 2行目で NSX Manager に admin ユーザでログインしています。

PowerNSX> Connect-NsxServer -vCenterServer vc-sv02.go-lab.jp

PowerNSX> Connect-NsxServer -NsxServer nsxmgr01.go-lab.jp -DisableVIAutoConnect

 

まず NSX Manger です。

PowerNSX> Get-NsxManagerSystemSummary | select hostName,@{n="Version";E={$_.versionInfo | %{($_.majorVersion,$_.minorVersion,$_.patchVersion) -join "."}}},@{N="Build";E={$_.versionInfo.buildNumber}}

 

hostName Version Build

-------- ------- -----

nsxmgr01 6.3.3   6276725

 

 

NSX Controller です。

PowerNSX> Get-NsxController | select name,id,@{N="vmId";E={$_.virtualMachineInfo.objectId}},version,status,upgradeStatus | sort name | ft -AutoSize

 

name     id           vmId   version     status  upgradeStatus

----     --           ----   -------     ------  -------------

nsxctl01 controller-7 vm-483 6.3.6235594 RUNNING UPGRADED

nsxctl02 controller-6 vm-482 6.3.6235594 RUNNING UPGRADED

nsxctl03 controller-5 vm-481 6.3.6235594 RUNNING UPGRADED

 

 

NSX Edge (Edge Service Gateway)です。

小さい環境なので NSX Edge は ESG / DLR それぞれ 1台しかいません。

PowerNSX> Get-NsxEdge | select name,id,type,status,@{N="BuildInfo";E={$_.edgeSummary.appliancesSummary.vmBuildInfo}} | ft -AutoSize

 

name     id     type            status   BuildInfo

----     --     ----            ------   ---------

nsxesg01 edge-1 gatewayServices deployed 6.3.3-6144198

 

 

NSX Edge (DLR Control VM)です。

PowerNSX> Get-NsxLogicalRouter | select name,id,type,status,@{N="BuildInfo";E={$_.edgeSummary.appliancesSummary.vmBuildInfo}} | ft -AutoSize

 

name     id     type              status   BuildInfo

----     --     ----              ------   ---------

nsxdlr01 edge-5 distributedRouter deployed 6.3.3-6144198

 

 

NSX インストールずみクラスタの状態も見てみました。

PowerNSX> Get-NsxClusterStatus (Get-Cluster -Name nsx-cluster-01) | where {$_.installed -eq "true"} | select featureId,featureVersion,enabled,status,updateAvailable | ft -AutoSize

 

featureId                                featureVersion enabled status updateAvailable

---------                                -------------- ------- ------ ---------------

com.vmware.vshield.firewall              5.5            true    GREEN  false

com.vmware.vshield.vsm.messagingInfra                   true    GREEN  false

com.vmware.vshield.vsm.vxlan             5.5            true    GREEN  false

com.vmware.vshield.vsm.nwfabric.hostPrep 6.3.3.6276725  true    GREEN  false

 

 

ESXi の esx-nsxv VIB のバージョンです。

ちなみに 6.3.3 では ESXi ホストをメンテナンスモードにするだけで VIB のアップデートが完了します。

PowerNSX> Get-Cluster -Name nsx-cluster-01 | Get-VMHost | select Parent,Name,ConnectionState,@{N="esx-nsxv";E={($_|Get-EsxCli -V2).software.vib.get.Invoke(@{vibname="esx-nsxv"}).Version}},@{N="RebootRequired";E={$_.ExtensionData.Summary.RebootRequired}} | sort Parent,Name | ft -AutoSize

 

Parent         Name             ConnectionState esx-nsxv          RebootRequired

------         ----             --------------- --------          --------------

nsx-cluster-01 hv-n01.go-lab.jp       Connected 6.5.0-0.0.6244264          False

nsx-cluster-01 hv-n02.go-lab.jp       Connected 6.5.0-0.0.6244264          False

nsx-cluster-01 hv-n03.go-lab.jp       Connected 6.5.0-0.0.6244264          False

 

 

今年も趣味の NSX にとりくんでいきたいと思います。どこかでお役に立てればうれしいです。

vEXPRT-2017-NSX-gowatana.png

 

以上、vExpert NSX 受賞記念の投稿でした。

PowerNSX を楽しむべく、NSX Manager と vCenter の接続状態をもとに

プロンプト文字列の色を変更してみようと思います。

powernsx-prompt.png

 

PowerCLI + vCenter 接続のケースはこちらもどうぞ。

PowerCLI プロンプト文字列に vCenter への接続状態を反映してみる。

 

今回は、下記の前提です。

  • PowerCLI はインストール済み。
  • PowerNSX はインストール済み。
  • Windows 10 環境で実行。

 

ということで、

まず下記のような PowerShell スクリプト「set_powernsx_prompt.ps1」を

適当なフォルダ(「ドキュメント」配下など、今後も配置しておける場所)に作成しておきます。

 

vCenter と NSX Manager の接続状態が自動格納される変数である

$global:DefaultVIServer と $DefaultNSXConnection をもとに、下記のようにプロンプトの色を変更します。

  • NSX Manager と vCenter 両方に接続できていたら Cyan
  • NSX Manager が連携している vCenter と、接続している vCenter が違ったら怪しいので Red
  • NSX Manger だけに接続できていたら DarkCyan
  • vCenter だけに接続できていたら Green
  • 未接続は Gray

残念ながら、複数台の vCenter に同時接続するケースにはちゃんと対応してません。

 

set_powernsx_prompt.ps1

$module_list = @(

    "VMware.VimAutomation.Core",

    "VMware.VimAutomation.Vds",

    "PowerNSX"

)

Import-Module $module_list

 

$window_width  = 120

$window_height = 40

$window_buffer = 3000

 

$pshost = Get-Host

$pswindow = $pshost.ui.rawui

 

$pswindow.WindowTitle = "PowerNSX"

 

$newsize = $pswindow.buffersize 

$newsize.height = $window_buffer

$newsize.width = $window_width 

$pswindow.buffersize = $newsize 

 

$newsize = $pswindow.windowsize 

$newsize.height = $window_height 

$newsize.width = $window_width 

$pswindow.windowsize = $newsize

 

Clear-Host

$module = Get-Module -Name PowerNSX

 

Write-Host ""

Write-Host "Welcome to " -NoNewLine

Write-Host $module.Name -foregroundcolor Cyan

Write-Host $module.ProjectUri

Write-Host ""

Write-Host $module.Copyright

Write-Host ""

Write-Host $module.Description

Write-Host ""

(Get-Module $module_list | ft -AutoSize  Name,Version -HideTableHeaders | Out-String).trim()

Write-Host ""

Write-Host "Log in to a vCenter Server and NSX Mnager: "

Write-Host "  Connect-NsxServer -vCenterServer <vCenter Server>" -foregroundcolor yellow

Write-Host ""

 

function prompt{

    $vc = $global:DefaultVIServer

    $nsx = $DefaultNSXConnection

    if(($vc.IsConnected -eq $True) -and ($nsx.Server -ne $null)){

        $prompt_color = "Cyan"

        if($vc.Name -ne $nsx.VIConnection){

            $prompt_color = "Red"

        }

    }

    elseif(($vc.IsConnected -ne $True) -and ($nsx.Server -ne $null)){

        $prompt_color = "DarkCyan"

    }

    elseif(($vc.IsConnected -eq $True) -and ($nsx.Server -eq $null)){

        $prompt_color = "Green"

    }

    else{

        $prompt_color = "Gray"

    }   

    Write-Host "PowerNSX" -NoNewLine -ForegroundColor $prompt_color

    Write-Host ">" -NoNewline

    return " "

}

 

ついでに、set_powernsx_prompt.ps1 を読み込んで PowerShell を起動するショートカットを作成します。

今回は下記のスクリプトで、デスクトップに「PowerNSX」というショートカットを作成しました。

このスクリプトは上記のスクリプトと同じフォルダに配置して、実行します。

 

実行するとき、PowerShell の ExecutionPolicy は

スクリプト実行できる設定(RemoteSigned など)にしておきます。

# デスクトップに PowerNSX のショートカットを作成する。

 

$tool_name = "PowerNSX"

$profile_script_name = "set_powernsx_prompt.ps1"

 

$shortcut_dir = Join-Path $HOME "Desktop"

$shortcut_path = Join-Path $shortcut_dir ($tool_name + ".lnk")

 

$tool_work_dir = (ls $PSCommandPath).DirectoryName

$profile_path = Join-Path $tool_work_dir $profile_script_name

 

$ps = "powershell"

$ps_argument = ("-NoExit", "-File",  $profile_path) -join " "

 

$wsh = New-Object -ComObject WScript.Shell

$shortcut = $wsh.CreateShortcut($shortcut_path)

$shortcut.TargetPath = $ps

$shortcut.Arguments = $ps_argument

$shortcut.WorkingDirectory = (ls $profile_path).DirectoryName

$shortcut.Save()

 

作成した PowerNSX ショートカットをダブルクリックすると、下記のような感じになると思います。

ためしにインストールされた PowerNSX / PowerCLI についての情報も表示してみました。

powernsx-prompt-2.png

 

これで、Connect-NsxServer で接続すると、冒頭のスクリーンショットのようにプロンプト色がかわります。

ラボ環境の NSX などでお楽しみいただければと思います・・・

 

以上、PowerNSX のプロンプトを工夫してみる話でした。

PowerCLI を楽しむべく、プロンプト文字列を工夫してみようと思います。

 

以前、下記のような投稿をしましたが・・・

PowerCLI のプロンプト文字列「PowerCLI>」について。

 

これを応用して、vCenter / ESXi への接続状態によって「PowerCLI」の色を変更してみます。

 

ということで、

まず下記のような PowerShell スクリプト「set_powercli_prompt.ps1」を

適当なフォルダ(「ドキュメント」配下など、今後も配置しておける場所)に作成しておきます。

 

ドット スペース「. 」からはじまる1 行目は、通常 PowerCLI が起動時に読み込むスクリプトを読み込んでいます。

そして、$global:DefaultVIServers 変数をもとに、接続している(IsConnected が Trueである)vCenter / ESXi が

1台でもあれば、プロンプトの文字列色を Green に、それ以外の場合は DarkCyan にします。

 

set_powercli_prompt.ps1

. "C:\Program Files (x86)\VMware\Infrastructure\PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1"

Clear-Host

 

function prompt{

    $vc_all = $global:DefaultVIServers

    $vc_connected = $vc_all | where {$_.IsConnected -eq $True}

    if($vc_connected.Count -ge 1){

        $prompt_color = "Green"

    }else{

        $prompt_color = "DarkCyan"

    }

    Write-Host "PowerCLI" -NoNewLine -ForegroundColor $prompt_color

    Write-Host ">" -NoNewLine -ForegroundColor "Gray"

    return " "

}

 

そして、set_powercli_prompt.ps1 スクリプトを読み込んで PowerShell を起動するショートカットを作成します。

今回は下記のスクリプトで、デスクトップに「PowerCLI」というショートカットを作成しました。

このスクリプトは上記のものと同じフォルダに配置して、実行します。

 

create_powercli_shortcut.ps1

$tool_name = "PowerCLI"

$profile_script_name = "set_powercli_prompt.ps1"

 

$shortcut_dir = Join-Path $HOME "Desktop"

$shortcut_path = Join-Path $shortcut_dir ($tool_name + ".lnk")

 

$tool_work_dir = (ls $PSCommandPath).DirectoryName

$profile_path = Join-Path $tool_work_dir $profile_script_name

 

$ps = "powershell"

$ps_argument = ("-NoExit", "-File",  $profile_path) -join " "

 

$wsh = New-Object -ComObject WScript.Shell

$shortcut = $wsh.CreateShortcut($shortcut_path)

$shortcut.TargetPath = $ps

$shortcut.Arguments = $ps_argument

$shortcut.WorkingDirectory = (ls $profile_path).DirectoryName

$shortcut.Save()

 

上記の「create_powercli_shortcut.ps1」スクリプトを実行すると、

デスクトップに PowerCLI ショートカットが作成されます。

このショートカットは、powershell.exe を下記2つのオプションで起動するだけのものです。

  • -NoExit
  • -File ~\set_powercli_prompt.ps1  ※プロンプトを変更するスクリプトを指定する。

 

このショートカットを起動すると、プロンプトが「PowerCLI>」となった PowerShell が起動されます。

そして、Connect-VIServer で vCenter / ESXi に接続すると、プロンプトの色が変わります。

今回の例だと、vCenter 接続中だけ「PowerCLI」が Green になっています。

powercli-prompt-2.png

 

さらに工夫すれば、接続先の vCenter / ESXi の情報をプロンプトに反映したりすることもできます。

(しかしその分レスポンスに影響するので、やりすぎ注意・・・)

 

なお今回は、Windows 10 + PowerCLI 6.5 R1 の環境でしか動作を試してません。

以上、PowerCLI のプロンプトを工夫してみる話でした。