vSphere環境でCentOS7やUbuntu 16.04などをインストールするとコンソールが高解像度過ぎる

vSphere環境でCentOS7やUbuntu 16.04などをインストールすると、X-Windowを起動しないコンソール画面での解像度が高くて使いにくいという問題が発生しやすい。

せめて1024×800ぐらいに収まらないか・・・と思ったら設定はあった。

Adding video resolution modes to Windows guest operating systems (1003)
上記の日本語版KB「Windows ゲスト OS へのビデオ解像度モードの追加 (2078472)

高解像度にしたい場合は、上記にある手順をいろいろやらなければならないが、低解像度にしたい場合は、vmxファイルの直接編集の必要はなく、仮想マシンオプションの詳細にて「svga.maxWidth」と「svga.maxHeight」の値を追加するだけ良い。

仮想マシンの電源を停止した状態で、仮想マシンオプションの詳細を開き、svga.maxWidthを1024、svga.maxHeightを800で追加している。


2018/05/25 追記

なお、Hyper-Vの場合は、grubへの設定で対応する。
Changing Ubuntu Screen Resolution in a Hyper-V VM

上記はUbuntuの場合の例となっているが、RedHat/CentOSでも基本的には同じ
grubの設定に、「video=hyperv_fb:1024×800」を追加して解像度を指定する。という形になる。


2019/07/17追記

RHEL8のインストーラで発生する英語だと問題なかったのが、日本語にした途端画面外にはみ出る、ということへの対応について「vSphere上にRHEL8を日本語でインストールしようとするとインストーラがちゃんと表示されない」で記載しました。

まぁ、インストール時のカーネルオプションとして 「inst.resolution=1024×800」 を追加する、という話ですね。

vROpsで取得しているデータをPowerCLI経由でcsv出力する(複数の出力結果を1つにまとめる方法)

vROpsで取得しているvSphere環境に関する情報は、通常、vROpsのレポートやダッシュボードなどで確認する。
csvでほしい場合は、レポートで出力させたりする。

しかし、vROpsのGUIでは、全ての仮想マシンについて、指定期間内のCPU/メモリの使用容量を取得する、といった操作を行うことができない。
できるのは、「1台の仮想マシンについて指定期間内のCPU/メモリの使用容量を取得する」という操作を全ての仮想マシンに対して個別に実行する、ということである。

そんなのは使いにくい。

PowerCLIを使うと、vROpsで取得済みのデータをGet-OMStatを使用することで取得することができる。
(なお、予測のデータについては、PowerCLI経由では取得できない)

しかし、Get-OMStatで取得できるデータは、1つのメトリックについてのみであるため、CPUとメモリの使用量について取得しようとした場合、それぞれGet-OMStatを実行する必要がある。

CPUの使用量/使用率とメモリの使用量について取得すると以下のようになる。

$cpuusage=Get-OMStat -Resource $vmguest.Name -Key 'cpu|usage_average' -From $startdate -To $enddate -RollupType avg -IntervalType Hours -IntervalCount $interval 
$cpuusagemhz=Get-OMStat -Resource $vmguest.Name -Key 'cpu|usagemhz_average' -From $startdate -To $enddate -RollupType avg -IntervalType Hours -IntervalCount $interval
$memusage=Get-OMStat -Resource $vmguest.Name -Key 'mem|host_usage' -From $startdate -To $enddate -RollupType avg -IntervalType Hours -IntervalCount $interval 

3つの変数にそれぞれデータが入っているため、このままでは1つのCSVファイルに出力ができない。

これを、1つにまとめようとすると以下のようになる。

$cpuusage=Get-OMStat -Resource $vmguest.Name -Key 'cpu|usage_average' -From $startdate -To $enddate -RollupType avg -IntervalType Hours -IntervalCount $interval 
$cpuusagemhz=Get-OMStat -Resource $vmguest.Name -Key 'cpu|usagemhz_average' -From $startdate -To $enddate -RollupType avg -IntervalType Hours -IntervalCount $interval
$memusage=Get-OMStat -Resource $vmguest.Name -Key 'mem|host_usage' -From $startdate -To $enddate -RollupType avg -IntervalType Hours -IntervalCount $interval 

$results=$cpuusage|ForEach-Object {
        $output = New-Object -TypeName PSObject
        $output | Add-Member -MemberType NoteProperty -Name "Time" -Value $_.Time
        $output | Add-Member -MemberType NoteProperty -Name "Name" -Value $_.Resource
        $output | Add-Member -MemberType NoteProperty -Name "CpuAverage" -Value $_.Value
        $output | Add-Member -MemberType NoteProperty -Name "CpuMHzAverage" -Value `
            ($cpuusagemhz | where { $_.Time -eq $output.Time } |Select-Object -Last 1 ).Value
        $output | Add-Member -MemberType NoteProperty -Name "MemAverage" -Value `
            ($memusage | where { $_.Time -eq $output.Time } |Select-Object -Last 1 ).Value
        $output
}

$results | Export-Csv output.csv -Encoding UTF8 -NoTypeInformation

これで、1つのcsvとして、3つのメトリックの結果を取得できるようになる。

PowerCLIでvCenterサーバに接続(Connect-VIServer)する際のエラー処理

vSphere環境でvCenterサーバにConnect-VIServerで接続する際に、エラーとなった場合に、どのようにするべきか悩んだ。

まずは、単純にtry/catchで書いてみる。

try{
    Connect-VIServer -Server $vcenter -User $vcenterusername -Password $vcenterpassword -WarningAction 0
} catch {
    Write-Host "vCenterサーバへの接続で問題が発生しました。処理を終了します。"
    Write-Host $Error[0]
    exit 1
}

これを$vcenterなどの変数設定なしに実行すると以下のエラーとなり、想定どおりの出力とはなる。

vCenterサーバへの接続で問題が発生しました。処理を終了します。
Cannot validate argument on parameter 'Server'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.

しかし、下記のように$vcenterなどに値を入れているが、実はでたらめで接続できなかった場合を試してみると問題が発生した。

$vcenter="testvcenter"
$vcenterusername="administrator@vsphere.local"
$vcenterpassword="test"
try{
    Connect-VIServer -Server $vcenter -User $vcenterusername -Password $vcenterpassword -WarningAction 0
} catch {
    Write-Host "vCenterサーバへの接続で問題が発生しました。処理を終了します。"
    Write-Host $Error[0]
    exit 1
}

実行結果は以下のようになり、catch内が実行されていない。

Connect-VIServer : 2017/02/09 17:55:54    Connect-VIServer        Could not resolve the requested VC server.
Additional Information: There was no endpoint listening at https://testvcenter/sdk that could accept the message. This is often caused by an incorrect address or SOAP a
ction. See InnerException, if present, for more details.    
At line:6 char:5
+     Connect-VIServer -Server $vcenter -User $vcenterusername -Passwor ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (:) [Connect-VIServer], ViServerConnectionException
    + FullyQualifiedErrorId : Client20_ConnectivityServiceImpl_Reconnect_NameResolutionFailure,VMware.VimAutomation.ViCore.Cmdlets.Commands.ConnectVIServer

これを、Connect-VIServerの実行結果を見て、falseだったら例外を発生させる、ということにより、対応させることができた。

$vcenter="testvcenter"
$vcenterusername="administrator@vsphere.local"
$vcenterpassword="test"
try{
    Connect-VIServer -Server $vcenter -User $vcenterusername -Password $vcenterpassword -WarningAction 0
    if($? -eq $false){ throw }
} catch {
    Write-Host "vCenterサーバへの接続で問題が発生しました。処理を終了します。"
    Write-Host $Error[0]
    exit 1
}

誤りの場合の実行例は以下のようになる。

Connect-VIServer : 2017/02/09 18:00:57    Connect-VIServer        Could not resolve the requested VC server.
Additional Information: There was no endpoint listening at https://testvcenter/sdk that could accept the message. This is often caused by an incorrect address 
or SOAP action. See InnerException, if present, for more details.    
At line:6 char:5
+     Connect-VIServer -Server $vcenter -User $vcenterusername -Passwor ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (:) [Connect-VIServer], ViServerConnectionException
    + FullyQualifiedErrorId : Client20_ConnectivityServiceImpl_Reconnect_NameResolutionFailure,VMware.VimAutomation.ViCore.Cmdlets.Commands.ConnectVIServer
 
vCenterサーバへの接続で問題が発生しました。処理を終了します。
ScriptHalted

2018/07/06追記

PowerCLI 10.0以降では、自己証明はデフォルト拒否になりました。 このため、上にあげたスクリプトを実行すると下記の様にエラーとなります。

PS /root> Connect-VIServer -Server IPアドレス -User root -Password password -WarningAction 0
Connect-VIServer : 2018/07/06 14:29:03  Connect-VIServer                Error: Invalid server certificate. Use Set-PowerCLIConfiguration to set the value for the InvalidCertificateAction option to Ignore to ignore the certificate errors for this connection.
Additional Information: Could not establish trust relationship for the SSL/TLS secure channel with authority 'IPアドレス'.
At line:1 char:1
+ Connect-VIServer -Server IPアドレス -User root -Password password - ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : SecurityError: (:) [Connect-VIServer], ViSecurityNegotiationException
+ FullyQualifiedErrorId : Client20_ConnectivityServiceImpl_Reconnect_CertificateError,VMware.VimAutomation.ViCore.Cmdlets.Commands.ConnectVIServer

PS /root>

VMware PowerCLI Blog「New Release: VMware PowerCLI 10.0.0」の「Default Certificate Handling」に記載があるように、全体設定として無視するための「Set-PowerCLIConfiguration -InvalidCertificateAction Ignore」を設定する必要があります。

PS /root> Set-PowerCLIConfiguration -InvalidCertificateAction Ignore

Perform operation?
Performing operation 'Update PowerCLI configuration.'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):y

Scope    ProxyPolicy     DefaultVIServerMode InvalidCertificateAction  DisplayD
                                                                       eprecati
                                                                       onWarnin
                                                                       gs
-----    -----------     ------------------- ------------------------  --------
Session  UseSystemProxy  Multiple            Ignore                    True
User                                         Ignore
AllUsers


PS /root>

この処理を実行後に、改めて接続を実行

PS /root> Connect-VIServer -Server IPアドレス -User root -Password password
Name Port User
—- —- —-
IPアドレス 443 root

PS /root>

ConoHaでUbuntu 16.04 64bitを指定したパスワードでデプロイできない件は未解決のままもうすぐ10日経過

ConohaでUbuntu16.04 64bitを構築すると高確率で設定したパスワードが利用できない」の件ですが、2016/12/07 19:23頃の発生よりもうすぐ10日となりますが、何も進展を見せないままとなりました。

進捗に関する連絡も無く、
使えないことに対してまでサーバ費用が発生している件も
こちらから連絡を入れて督促を行わない限り無応答だったりと
なかなかアレなサポート状況となっています。

現時点でもなお解決予定は未定だとか

1GBのやつが45日間安い、というから使おうとしたのに、使えないまま期間終了
果たしてどうなってるんだかねぇ・・・

vSphere PowerCLIの一部コマンドがPowerShell ISEで動作しない 2016/12/15版

2017/02/27追記
Windows環境以外でも動作するPowerCLI Coreが登場し、この手順を行おうとしたら、モジュール名が異なり実施できませんでした。
PowerCLIとPowerCLI Coreの双方で動くPowerShellスクリプトの作り方」に、対処方法を記載しています。


1年前に「vSphere PowerCLIの一部コマンドがPowerShell ISEで動作しない」というのを書いた。

最近、環境を作り直すのと一緒にPowerShellを最新にして、そして、PowerCLIを最新の6.5にしてみた。(New Release: PowerCLI 6.5 R1)

以前と同じように、PowerShell ISE上で「Add-PSSnapin VMware.VimAutomation.Core」を実行すると、「Add-PSSnapin : No snap-ins have been registered for Windows PowerShell version 5.」というエラーが発生。
「Add-PSSnapin」は使わないようだ。

 C:\Users\test3> Add-PSSnapin VMware.VimAutomation.Core


Add-PSSnapin : No snap-ins have been registered for Windows PowerShell version 5.
At line:1 char:1
+ Add-PSSnapin VMware.VimAutomation.Core
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (VMware.VimAutomation.Core:String) [Add-PSSnapin], PSArgumentException
    + FullyQualifiedErrorId : AddPSSnapInRead,Microsoft.PowerShell.Commands.AddPSSnapinCommand
 

 C:\Users\test3> 

代替はなんだろ?と確認すると「Import-Module -Name VMware.VimAutomation.Core」。

いままでスクリプトにAdd-PSSnapin~と書いていたところを、どちらでも対応できるように書き換えるとすると、下記のようになるだろうか?

if ( $PSVersionTable.PSVersion.Major -lt 5){
    Add-PSSnapin VMware.VimAutomation.Core
}else{
    Import-Module -Name VMware.VimAutomation.Core
}

下記は参考資料の実行ログ

PS C:\Users\test3> Get-Module

ModuleType Version    Name                                ExportedCommands                                                                           
---------- -------    ----                                ----------------                                                                           
Script     1.0.0.0    ISE                                 {Get-IseSnippet, Import-IseSnippet, New-IseSnippet}                                        
Manifest   3.1.0.0    Microsoft.PowerShell.Management     {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Content...}                         
Manifest   3.1.0.0    Microsoft.PowerShell.Utility        {Add-Member, Add-Type, Clear-Variable, Compare-Object...}                                  



PS C:\Users\test3> Get-Module -ListAvailable


    Directory: C:\Program Files\WindowsPowerShell\Modules


ModuleType Version    Name                                ExportedCommands                                                                           
---------- -------    ----                                ----------------                                                                           
Binary     1.0.0.1    PackageManagement                   {Find-Package, Get-Package, Get-PackageProvider, Get-PackageSource...}                     
Script     1.0.0.1    PowerShellGet                       {Install-Module, Find-Module, Save-Module, Update-Module...}                               


    Directory: C:\Windows\system32\WindowsPowerShell\v1.0\Modules


ModuleType Version    Name                                ExportedCommands                                                                           
---------- -------    ----                                ----------------                                                                           
Manifest   1.0.0.0    AppLocker                           {Set-AppLockerPolicy, Get-AppLockerPolicy, Test-AppLockerPolicy, Get-AppLockerFileInform...
Manifest   1.0.0.0    BitsTransfer                        {Add-BitsFile, Remove-BitsTransfer, Complete-BitsTransfer, Get-BitsTransfer...}            
Manifest   1.0.0.0    CimCmdlets                          {Get-CimAssociatedInstance, Get-CimClass, Get-CimInstance, Get-CimSession...}              
Script     1.0.0.0    ISE                                 {New-IseSnippet, Import-IseSnippet, Get-IseSnippet}                                        
Manifest   1.0.0.0    Microsoft.PowerShell.Archive        {Compress-Archive, Expand-Archive}                                                         
Manifest   3.0.0.0    Microsoft.PowerShell.Diagnostics    {Get-WinEvent, Get-Counter, Import-Counter, Export-Counter...}                             
Manifest   3.0.0.0    Microsoft.PowerShell.Host           {Start-Transcript, Stop-Transcript}                                                        
Manifest   3.1.0.0    Microsoft.PowerShell.Management     {Add-Content, Clear-Content, Clear-ItemProperty, Join-Path...}                             
Script     1.0        Microsoft.PowerShell.ODataUtils     Export-ODataEndpointProxy                                                                  
Manifest   3.0.0.0    Microsoft.PowerShell.Security       {Get-Acl, Set-Acl, Get-PfxCertificate, Get-Credential...}                                  
Manifest   3.1.0.0    Microsoft.PowerShell.Utility        {Format-List, Format-Custom, Format-Table, Format-Wide...}                                 
Manifest   3.0.0.0    Microsoft.WSMan.Management          {Disable-WSManCredSSP, Enable-WSManCredSSP, Get-WSManCredSSP, Set-WSManQuickConfig...}     
Manifest   1.0.0.0    NetworkSwitchManager                {Disable-NetworkSwitchEthernetPort, Enable-NetworkSwitchEthernetPort, Get-NetworkSwitchE...
Manifest   1.1        PSDesiredStateConfiguration         {Set-DscLocalConfigurationManager, Start-DscConfiguration, Test-DscConfiguration, Publis...
Script     1.0.0.0    PSDiagnostics                       {Disable-PSTrace, Disable-PSWSManCombinedTrace, Disable-WSManTrace, Enable-PSTrace...}     
Binary     1.1.0.0    PSScheduledJob                      {New-JobTrigger, Add-JobTrigger, Remove-JobTrigger, Get-JobTrigger...}                     
Manifest   2.0.0.0    PSWorkflow                          {New-PSWorkflowExecutionOption, New-PSWorkflowSession, nwsn}                               
Manifest   1.0.0.0    PSWorkflowUtility                   Invoke-AsWorkflow                                                                          
Manifest   1.0.0.0    TroubleshootingPack                 {Get-TroubleshootingPack, Invoke-TroubleshootingPack}                                      


    Directory: C:\Program Files (x86)\VMware\Infrastructure\PowerCLI\Modules


ModuleType Version    Name                                ExportedCommands                                                                           
---------- -------    ----                                ----------------                                                                           
Binary     6.0.0.0    VMware.DeployAutomation                                                                                                        
Binary     6.0.0.0    VMware.ImageBuilder                                                                                                            
Binary     6.5.0.4... VMware.VimAutomation.Cis.Core                                                                                                  
Binary     6.5.0.4... VMware.VimAutomation.Cloud                                                                                                     
Manifest   6.5.0.4... VMware.VimAutomation.Common                                                                                                    
Binary     6.5.0.2... VMware.VimAutomation.Core           HookGetViewAutoCompleter                                                                   
Binary     6.0.0.0    VMware.VimAutomation.HA                                                                                                        
Binary     7.0.2.4... VMware.VimAutomation.HorizonView                                                                                               
Binary     6.5.0.4... VMware.VimAutomation.License                                                                                                   
Binary     6.5.0.4... VMware.VimAutomation.PCloud                                                                                                    
Manifest   6.5.0.4... VMware.VimAutomation.Sdk            Get-PSVersion                                                                              
Binary     6.5.0.4... VMware.VimAutomation.Storage                                                                                                   
Binary     6.5.0.4... VMware.VimAutomation.Vds                                                                                                       
Binary     6.5.0.4... VMware.VimAutomation.vROps                                                                                                     
Binary     6.0.0.0    VMware.VumAutomation                                                                                                           



PS C:\Users\test3> Import-Module -Name VMware.VimAutomation.Core

 C:\Users\test3> Get-Module

ModuleType Version    Name                                ExportedCommands                                                                           
---------- -------    ----                                ----------------                                                                           
Script     0.0        Initialize-VMware_VimAutomation_Cis                                                                                            
Script     1.0.0.0    ISE                                 {Get-IseSnippet, Import-IseSnippet, New-IseSnippet}                                        
Manifest   3.1.0.0    Microsoft.PowerShell.Management     {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Content...}                         
Manifest   3.1.0.0    Microsoft.PowerShell.Utility        {Add-Member, Add-Type, Clear-Variable, Compare-Object...}                                  
Binary     6.5.0.4... VMware.VimAutomation.Cis.Core       {Connect-CisServer, Disconnect-CisServer, Get-CisService}                                  
Manifest   6.5.0.4... VMware.VimAutomation.Common                                                                                                    
Binary     6.5.0.2... VMware.VimAutomation.Core           {Add-PassthroughDevice, Add-VirtualSwitchPhysicalNetworkAdapter, Add-VMHost, Add-VMHostN...
Manifest   6.5.0.4... VMware.VimAutomation.Sdk            Get-PSVersion                                                                              



 C:\Users\test3> 

なお、PowerCLI 6.5を起動した場合に読み込まれているモジュール一覧は以下の通り

          Welcome to VMware PowerCLI!

Log in to a vCenter Server or ESX host:              Connect-VIServer
To find out what commands are available, type:       Get-VICommand
To show searchable help for all PowerCLI commands:   Get-PowerCLIHelp
Once you've connected, display all virtual machines: Get-VM
If you need more help, visit the PowerCLI community: Get-PowerCLICommunity

       Copyright (C) VMware, Inc. All rights reserved.


PowerCLI C:\> Get-Module

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     0.0        Initialize-VMware.VimAutomation....
Script     0.0        Initialize-VMware.VimAutomation....
Script     0.0        Initialize-VMware.VimAutomation....
Script     0.0        Initialize-VMware_DeployAutomation
Script     0.0        Initialize-VMware_VimAutomation_Cis
Script     0.0        Initialize-VMware_VumAutomation
Manifest   3.1.0.0    Microsoft.PowerShell.Management     {Add-Computer, Add...
Manifest   3.1.0.0    Microsoft.PowerShell.Utility        {Add-Member, Add-T...
Binary     6.0.0.0    VMware.DeployAutomation             {Add-DeployRule, A...
Binary     6.0.0.0    VMware.ImageBuilder                 {Add-EsxSoftwareDe...
Binary     6.5.0.4... VMware.VimAutomation.Cis.Core       {Connect-CisServer...
Binary     6.5.0.4... VMware.VimAutomation.Cloud          {Add-CIDatastore, ...
Manifest   6.5.0.4... VMware.VimAutomation.Common
Binary     6.5.0.2... VMware.VimAutomation.Core           {Add-PassthroughDe...
Binary     6.0.0.0    VMware.VimAutomation.HA             Get-DrmInfo
Binary     7.0.2.4... VMware.VimAutomation.HorizonView    {Connect-HVServer,...
Binary     6.5.0.4... VMware.VimAutomation.License        Get-LicenseDataMan...
Binary     6.5.0.4... VMware.VimAutomation.PCloud         {Connect-PIServer,...
Manifest   6.5.0.4... VMware.VimAutomation.Sdk            Get-PSVersion
Binary     6.5.0.4... VMware.VimAutomation.Storage        {Copy-VDisk, Expor...
Binary     6.5.0.4... VMware.VimAutomation.Vds            {Add-VDSwitchPhysi...
Binary     6.5.0.4... VMware.VimAutomation.vROps          {Connect-OMServer,...
Binary     6.0.0.0    VMware.VumAutomation                {Add-EntityBaselin...


PowerCLI C:\>