備忘録/にわかエンジニアが好きなように書く

個人的にとりあえず仕組みを知るためにとりあえず動くまで構築や動作をみただけの単なる操作ログです。個人用の備忘録となり、最新の導入手順は個別に確認してください。 ※変な内容や間違いを書いているなどありましたらコメントやご指摘いただけると幸いです。

VMware PowerCLIを使った設定値確認①

目的

以下を防ぐために必要最小限の情報を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

※実行後、ユーザとパスワードの入力画面が表示されます。
f:id:pocket01:20191210113424p:plain

 情報取得
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を使った確認コマンドを参考にしたり上記で確認を行ったコマンドを変数に入れて使用すると色々な情報を取得して確認用スプリプトを作成する。

f:id:pocket01:20191210114629p:plain f:id:pocket01:20191210115004p:plain

情報取得用スクリプト

#ターゲット情報(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

スクリプト実行結果

f:id:pocket01:20191210134525p:plain

 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

■表示結果

f:id:pocket01:20191214155504p:plain

対策

・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
}

■実行結果

f:id:pocket01:20191214155806p:plain

 

VMware徹底入門  第4版 VMware vSphere 6.0対応

VMware徹底入門 第4版 VMware vSphere 6.0対応