PowerCLI で ESXi ログバンドル ファイル(通称 vm-support)を取得してみたところ、
ログファイル名が微妙になってしまいました。
そこで、わかりやすいファイル名でログバンドル取得できるスクリプトを作ってみました。
たとえば ESXi が4台あるとして、
PowerCLI> Get-VMHost | select Name
Name
----
hv501
hv502
hv503
hv504
ログバンドルを複数台で取得してみると下記のようになります。
どの ESXi のログバンドルファイルか判別できません。
PowerCLI> Get-VMHost | Get-Log -Bundle -DestinationPath C:\work
Data
----
C:\work\vmsupport-521833d1-fe73-6314-5455-ac763a63e43e.tgz
C:\work\vmsupport-52cecb2a-45df-e436-1a1e-1d7463a5078c.tgz
C:\work\vmsupport-52faaacb-1afa-cb59-8926-6c76980ea13a.tgz
C:\work\vmsupport-5267d049-ce93-4ba8-af59-5c2d30fd2320.tgz
そこで、下記のようなスクリプトを作成してみました。
- 引数に ESXi (Get-VMHostで見える名前)を指定して実行すると、
- ログバンドルを取得して、
- そのままESXiホスト名つきのファイル名にリネーム。
- ファイル名は、「vmsupport_<ESXi名>_<タイムスタンプ>.tgz」
- 保存先フォルダは、とりあえず C:\work\logs です。
スクリプト名は、 get_vmsupport.ps1 としています。
$hv_list = $args[0]
$log_dir = "C:\work\logs" #★保存先フォルダはここ$hvs = Get-VMHost $hv_list
$hvs | % {
$hv = $_
$hv_name = $hv.Name
$timestamp = Get-Date -Format "yyyyMMddHHmmss"
# ESXiのログバンドルファイル(vm-support)取得
$info = $hv | Get-Log -Bundle -DestinationPath $log_dir
# ESXiのログバンドルファイルの(vm-support)取得
$info | select @{N="ESXi";E={$_.Host}},
@{N="VmSupportFile";E={$_.Data.Name}},
@{N="FileSize";E={$_.Data.Length}} |
ft -AutoSize | Out-String
# vm-supportのファイル名を変更
$org_name = $log_dir + "\" + $info.Data.Name
$new_name = $log_dir + "\" + "vmsupport_" + $hv_name + "_" + $timestamp + ".tgz"
$info = $null
"ログバンドル名: " + $new_name
mv $org_name $new_name
}
実行方法
1. まずvCenterに接続します。
PowerCLI> Connect-VIServer <vCenterアドレス>
2. ESXi を指定して上記のスクリプトを実行します。
PowerCLI> .\get_vmsupport.ps1 <ESXiを指定>
実行例
下記のように、ESXi のホスト名を指定して実行します。
PowerCLI> .\get_vmsupport.ps1 hv501,hv502
→ ESXi 2台からログバンドル取得(例では hv501とhv502)
PowerCLI> .\get_vmsupport.ps1 hv50*
→ hv50 から始まる名前の ESXi からログバンドル取得。
vCenterが管理している全てのESXi からログバンドル取得
PowerCLI> .\get_vmsupport.ps1 *
実行すると、下記のような感じになります。
※ちなみに試したバージョンは PowerCLI 5.1 R2です。
以上です。簡単なスクリプトですが、ご参考まで・・・