目的
以下を防ぐために必要最小限の情報をPowerCLIによって取得することによって
簡易的な自己チェックを可能する。
・設定ミスや確認漏れ
・初期構築時の設定不足確認や簡易チェック
Web画面で設定確認を行うと不要な情報が多いかったり画面変移が多いため思い込みによる設定漏れや設定ミスが多かったりするため、設定シートなどの各設定項目毎に情報を個別に取得し表示させるようにする。
VMware PowerCLI実行のための準備
VMware PowerCLIバージョン確認
PS C:\WINDOWS\system32> Find-Module -Name VMware.PowerCLI | Format-Table -AutoSize
Version Name Repository Description
------- ---- ---------- -----------
11.5.0.14912921 VMware.PowerCLI PSGallery This Windows PowerShell module contains VMware.PowerCLI
PS C:\WINDOWS\system32>
Version 11.5.0がインストールされるバージョンであることが分かる。
VMware PowerCLIインストール
PS C:\WINDOWS\system32> Install-Module VMware.PowerCLI
信頼されていないリポジトリ
信頼されていないリポジトリからモジュールをインストールしようとしています。このリポジトリを信頼する場合は、Set-PSRepository コマンドレットを実行して、リポジトリの InstallationPolicy の値を変更してください。'PSGallery'
からモジュールをインストールしますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): y
PS C:\WINDOWS\system32>
コマンドの実行確認
ESXiと接続
Connect-VIServer 「IPaddress」 -force -ErrorAction Stop > $null
PS C:\tmp\a> Connect-VIServer 172.16.100.201 -force -ErrorAction Stop > $null
※実行後、ユーザとパスワードの入力画面が表示されます。
情報取得
PS C:\tmp\a> Get-VMHost
Name ConnectionState PowerState NumCpu CpuUsageMhz CpuTotalMhz MemoryUsageGB MemoryTotalGB Version
---- --------------- ---------- ------ ----------- ----------- ------------- ------------- -------
172.16.100.201 Connected PoweredOn 4 83 9176 1.505 15.999 6.7.0
PS C:\tmp\a> Get-VMHostHardware
VMHost.Name Manufacturer Model SerialNumber AssetTag CpuModel CpuCoreCountTotal NicCount
----------- ------------ ----- ------------ -------- -------- ----------------- --------
172.16.100.201 VMware, Inc. VMware7,1 ... 72 88 ec No Asset Tag Intel(R) Xeon(R) ... 4 1
PS C:\tmp\a>
無事にESXiとの接続と情報取得ができたことが分かった。
情報取得用スクリプト作成
ナレッジベースに記述のあるPowerCLIを使った確認コマンドを参考にしたり上記で確認を行ったコマンドを変数に入れて使用すると色々な情報を取得して確認用スプリプトを作成する。
情報取得用スクリプト
#ターゲット情報(IPとパスワード)
$Srv="172.16.100.201"
$Pass="p@ssw0rd"
#接続
Connect-VIServer $Srv -User root -Password $Pass –force -ErrorAction Stop > $null
$VMHost_Hardware=Get-VMHostHardware
$VMHost_Info=Get-VMHost
# ホスト情報の表示
Write-Host "【ホストInfo】"
Get-Vmhost | Get-View |Sort-object Name |
select Name,
@{N = 'Product'; E = { $_.Config.Product.FullName } },
@{N = 'Build'; E = { $_.Config.Product.Build } },
@{Name = "Serial Number"; Expression = { ($_.Hardware.SystemInfo.OtherIdentifyingInfo | where { $_.IdentifierType.Key -eq "ServiceTag" }).IdentifierValue } },
@{N = 'Vendor'; E = { $_.Hardware.SystemInfo.Vendor } },
@{N = 'Model'; E = { $_.Hardware.SystemInfo.Model}},
OverallStatus,
ConfigStatus
# ハード情報の表示
Write-Host "【ハード情報】"
Write-Host "CPU`t`t`t:" $VMHost_Hardware.CpuModel
Write-Host "Proc数`t`t:" $VMHost_Hardware.CpuCount
Write-Host "コア数`t`t:" $VMHost_Hardware.CpuCoreCountTotal
$memory = [math]::round($VMHost_Info.MemoryTotalGB)
Write-Host "メモリ`t`t:" $memory "GB"
#切断
Disconnect-VIServer -Server $srv -Confirm:$false
スクリプト実行結果
ESXiのバージョン情報やCPU,メモリ情報が取得できるとこが分かった。
※スクリプトが実行できない!場合
エラー表示
PS C:\tmp\a> .\ESXi_Check.ps1
.\ESXi_Check.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル C:\tmp\a\ESXi_Check.ps1 を読み込む
ことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照し
てください。
発生場所 行:1 文字:1
+ .\ESXi_Check.ps1
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
PS C:\tmp\a>
PowerShellで実行ポリシーの確認
PS C:\tmp\a> Get-ExecutionPolicy
Restricted
PS C:\tmp\a>
”Restricted”となっているためスプリプト実行が制限されていた。
環境に合わせて複数あるポリシから選択し設定変更する必要があることがわかる。
個人環境とかなら Bypass が無難かも。
実行ポリシの変更
PS C:\tmp\a> Set-ExecutionPolicy Bypass
実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): Y
PS C:\tmp\a>
設定値の確認
PS C:\tmp\a> Get-ExecutionPolicy
Bypass
PS C:\tmp\a>
”Bypass”となっているためスプリプト実行権限が付与されたことが分かる。
※装置情報が複数台分に同時に表示される場合
スクリプト実行前や実行中に既に接続済みの不要なサーバが存在している可能性がある。
接続用確認
■接続状態を確認
$global:DefaultVIServers
■表示結果
対策
・VMHostオプションで対象を指定する。
・切断処理を追加させる。
スクリプト内で切断処理を追加
1台目に接続後に情報表示させ切断処理を実施せずに、2台目に接続し同じ情報を取得し表示させる。
■対処無
#接続①
##ターゲット情報-1
$Srv1="172.16.100.201"
$Pass1="p@ssw0rd"
##接続-1
Connect-VIServer $Srv1 -User root -Password $Pass1 –force -ErrorAction Stop > $null
##情報取得-1
$VMHost_Hardware=Get-VMHostHardware
Write-Host ""
Write-Host "表示1"
Write-Host "CPU`t`t`t:" $VMHost_Hardware.CpuCount
#接続②
##ターゲット情報-2
$Srv2="172.16.100.202"
$Pass2="p@ssw0rd"
##接続-2
Connect-VIServer $Srv2 -User root -Password $Pass2 –force -ErrorAction Stop > $null
##情報取得-2
$VMHost_Hardware=Get-VMHostHardware
Write-Host ""
Write-Host "表示2"
Write-Host "CPU`t`t`t:" $VMHost_Hardware.CpuCount
表示例
PS C:\tmp\a> C:\tmp\a\test.ps1
表示1
CPU : 4
表示2
CPU : 2 4 ← 2つ表示される
PS C:\tmp\a>
■対象ホスト指定
#接続①
##ターゲット情報-1
$Srv1="172.16.100.201"
$Pass1="p@ssw0rd"
##接続-1
Connect-VIServer $Srv1 -User root -Password $Pass1 –force -ErrorAction Stop > $null
##情報取得-1
$VMHost_Hardware=Get-VMHostHardware -VMHost $srv1
Write-Host ""
Write-Host "表示1"
Write-Host "CPU`t`t`t:" $VMHost_Hardware.CpuCount
#接続②
##ターゲット情報-2
$Srv2="172.16.100.202"
$Pass2="p@ssw0rd"
##接続-2
Connect-VIServer $Srv2 -User root -Password $Pass2 –force -ErrorAction Stop > $null
##情報取得-2
$VMHost_Hardware=Get-VMHostHardware -VMHost $srv2
Write-Host ""
Write-Host "表示2"
Write-Host "CPU`t`t`t:" $VMHost_Hardware.CpuCount
対策後の表示例
PS C:\tmp\a> C:\tmp\a\test.ps1
表示1
CPU : 4
表示2
CPU : 2 ← 1つ表示となる
PS C:\tmp\a>
■切断処理追加 ※Disconnet追加後のスクリプト
#接続①
##ターゲット情報-1
$Srv1="172.16.100.201"
$Pass1="p@ssw0rd"
##接続-1
Connect-VIServer $Srv1 -User root -Password $Pass1 –force -ErrorAction Stop > $null
##情報取得-1
$VMHost_Hardware=Get-VMHostHardware
Write-Host ""
Write-Host "表示1"
Write-Host "CPU`t`t`t:" $VMHost_Hardware.CpuCount
##切断処理
Disconnect-VIServer -Server $srv1 -Confirm:$false
#接続②
##ターゲット情報-2
$Srv2="172.16.100.202"
$Pass2="p@ssw0rd"
##接続-2
Connect-VIServer $Srv2 -User root -Password $Pass2 –force -ErrorAction Stop > $null
##情報取得-2
$VMHost_Hardware=Get-VMHostHardware
Write-Host ""
Write-Host "表示2"
Write-Host "CPU`t`t`t:" $VMHost_Hardware.CpuCount
##切断処理
Disconnect-VIServer -Server $srv2 -Confirm:$false
※なぜか最後のDisconnetが動作しない?接続が残っている場合がある。
対策後の表示例
PS C:\tmp\a> C:\tmp\a\test.ps1
表示1
CPU : 4
表示2
CPU : 2 ← 1つ表示となる
PS C:\tmp\a>
スクリプト実行時に全接続の切断処理を追加
■全接続を切断
接続数が0になるまで切断を繰り返す
while ($global:DefaultVIServers.Count -gt 0)
{
Disconnect-VIServer -Server $global:DefaultVIServers[0].Name -Confirm:$false
}
■実行結果