vmware

ESXiが管理しているVMの詳細情報をCSVで出力したい@vCenterもないwindowsクライアント

More than 1 year has passed since last update.

@c-nutsさんの VMware vSphere PowerCLI で ゲストOSの情報をCSVにエクスポートする方法 の二番煎じです。
1. PowerShell をインストールする
2. VMware PowerCLI をインストールする
3. PowerCLI(またはPowerShell)を管理者として実行し、以下のコマンドを実行する

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

※正しく設定が反映されると、PowerCLI起動時に赤字のエラーが出力されなくなる。
4.以下のスクリプトをvmcheck.ps1などといった名前で保存

vmcheck.ps1
function SecureString2PlainString($SecureString){
    $BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecureString)
    $PlainString = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($BSTR)
    [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($BSTR)
    return $PlainString
}

$_SERV=Read-Host "input ip addr of esxi"
$_USER=Read-Host "input userid"
$_SECURED_PASS=Read-Host "input password" -AsSecureString
$_PASS=SecureString2PlainString $_SECURED_PASS

$_HOME=Split-Path -Parent $MyInvocation.MyCommand.Path
$_DATE=Get-Date -Format "yyyyMMdd_HHmmss"
$_OUTP_VM="get-vm_$_DATE.csv"

Import-Module VMware.VimAutomation.Core

cd $_HOME

Connect-VIServer -Server $_SERV -User $_USER -Password $_PASS

Get-VM  | 
Select @{N="Host_IP";E={$_.VMHost}},
 @{N="VM_Name";E={$_.Guest.VM}},
 @{N="Version";E={$_.Version}},
 @{N="Power_State";E={$_.Guest.State}},
 @{N="Hostname";E={$_.Guest.HostName}},
 @{N="Guest_IP";E={$_.Guest.IpAddress}},
 @{N="Guest_OS";E={$_.Guest.OSFullName}},
 @{N="Nics";E={$_.Guest.Nics}},
 @{N="MacAddress";E={[string]::Join(',',($_.Guest.Nics | %{$_.MacAddress}))}},
 @{N="VLAN_ID";E={[string]::Join(',',(Get-VirtualPortGroup -VM $_ | %{$_.VLanId}))}},
 @{N="Used_GB";E={"{0:N2}" -f $_.UsedSpaceGB}},
 @{N="Provisioned_GB";E={"{0:N2}" -f $_.ProvisionedSpaceGB}},
 @{N="Datastore";E={[string]::Join(',',(Get-Datastore -Id $_.DatastoreIdList | Select -ExpandProperty Name))}},
 @{N="Folder";E={$_.Folder.Name}},
 @{N="Harddisk";E={(Get-HardDisk -VM $_ | Select -ExpandProperty filename)}},
 @{N="Num_CPU";E={$_.NumCpu}},
 @{N="Socket_per_Cores";E={$_.CoresPerSocket}},
 @{N="Memory_MB";E={$_.MemoryMB}},
 @{N="Notes";E={$_.Notes}} |
Export-csv $_OUTP_VM -NoTypeInformation -UseCulture -encoding Default

Disconnect-VIServer -Server $_SERV -Confirm:$False

5.上で保存したファイルをPowerCLIで実行
6.ESXiのIP、ユーザ、パスワードを指定すると、CSVファイルが同じディレクトリに出力される

※稼動している仮想マシンの数によって、データの取得に数分時間を要する場合がある。

▼ 出力されたCSVを転置してみるとこんな感じになる

項目名 VM1 VM2
Host_IP 172.16.1.11 172.16.1.11
VM_Name RHAP-DEV91 RHAP-DEV92
Version v11 v11
Power_State NotRunning Running
Hostname dev92.rhap.local
Guest_IP 172.31.1.92 fe80::20c:99ff:fe99:999
Guest_OS CentOS 4/5/6/7 (64-bit)
Nics Network adapter 1:VM Network
MacAddress 00:0c:99:99:09:99
VLAN_ID 0 0
Used_GB 1.97 51.16
Provisioned_GB 51.16 51.16
Datastore TX140S2 TX140S2
Folder vm vm
Filename [TX140S2] RHAP-DEV91/RHAP-DEV91.vmdk [TX140S2] RHAP-DEV92/RHAP-DEV92.vmdk
Num_CPU 2 2
Socket_per_Cores 2 2
Memory_MB 1024 1024
Notes UMLなどの描画ツール用サーバ (draw.io)https://172.16.1.91/index.html?offline=1 バージョン管理サーバ (git bucket)https://172.16.1.92/gitbucket/

▼ 参考にさせていただいたサイト
http://www.vwnet.jp/Windows/PowerShell/InputSecretString.htm
https://qiita.com/khayama/items/3593e7e64109957788ca
ほかたくさん

おわり!