APC UPS バッテリ充電レベルが危険な場合に VMWare ESXi ハイパーバイザを正しくシャットダウンする

PowerChute Business Edition の設定方法や PowerShell から VMWare に接続する方法についての記事はたくさんありますが、微妙な点について説明したものを XNUMX か所にまとめて見つけることができませんでした。 しかし、それらは存在します。

1 エントリー

私たちはエネルギーと何らかの関わりがあるにもかかわらず、電気に関する問題が時々発生します。 ここで UPS が活躍しますが、残念なことにバッテリーの寿命は長くありません。 何をするか? 消す!

すべてのサーバーが物理的なものであったため、物事は順調に進んでいたのですが、PowerChute Business Edition が私たちを助けてくれました。 サーバー 5 台までは無料で、これで十分でした。 エージェント、サーバー、コンソールが XNUMX 台のマシンにインストールされました。 終了が近づくと、エージェントは単に shutdown.exe /s /m を隣接サーバーに送信するコマンド ファイルを実行し、OS をシャットダウンしました。 誰もが生きています。
次に、仮想マシンの時代が来ました。

2. 背景と反省

それで、私たちは何を持っているのでしょうか? 何もありません。Windows Server 2008 R2 を搭載した 2019 台の物理サーバーと、Windows Server 2003、Windows Server XNUMX、CentOS を含む複数の仮想マシンを備えた XNUMX 台のハイパーバイザーです。 そしてもう XNUMX つの UPS、APC Smart-UPS です。

NUT については聞いていましたが、まだ勉強には至っておらず、手元にあった PowerChute Business Edition だけを使用していました。

ハイパーバイザーは仮想マシン自体をシャットダウンできます。あとは、ハイパーバイザーに時間になったことを通知するだけです。 VMWare.PowerCLI という便利なものがあります。これは Windows Powershell の拡張機能で、ハイパーバイザーに接続して必要なものすべてを伝えることができます。 PowerCLI 設定に関する記事も多数あります。

3.プロセス

UPS は 2008 サーバーの COM ポートに物理的に接続されていました。幸いにもそこにありました。 これは重要ではありませんが、インターフェイス コンバータ (MOXA) を介して任意の仮想 Windows サーバーに接続することができました。 さらに、特に明記されていない限り、すべてのアクションは UPS が接続されているマシン (Windows Server 2008) 上で実行されます。 PowerChute Business Edition エージェントがインストールされています。 ここが最初の微妙な点です。エージェント サービスはシステムからではなくユーザーから起動する必要があります。そうしないと、エージェントは cmd ファイルを実行できません。

次に、.Net Framework 4.7 をインストールしました。 ここで再起動が必要ですたとえインストール後にフレームワークが明示的に要求しなかったとしても、それ以外の場合はそれ以上先に進みません。 その後もアップデートが提供される可能性があり、これもインストールする必要があります。

次にPowerShell 5.1をインストールしました。 再起動も必要ですたとえ彼が尋ねなくても。
次に、PowerCLI 11.5 をインストールします。 かなり新しいバージョンなので、以前の要件が適用されます。 これはインターネット経由で行うことができ、これに関する記事はたくさんありますが、ここではすでにダウンロードしているので、すべてのファイルを Modules フォルダーにコピーしました。

チェック済み:

Get-Module -ListAvailable

OK、インストールされていることがわかります:

Import-Module VMWare.PowerCLI

はい、Powershell コンソールはもちろん管理者として起動されます。

パワーシェルの設定。

  • 任意のスクリプトの実行を許可します。

Set-ExecutionPolicy Unrestricted

  • または、スクリプト証明書の無視のみを許可することもできます。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned 

  • PowerCLI が無効な (期限切れの) 証明書を持つサーバーに接続できるようにします。

Set-PowerCLIConfiguration -InvalidCertificateAction ignore -confirm:$false

  • エクスペリエンス交換プログラムへの参加に関する PowerCLI メッセージの出力を抑制します。そうしないと、ログに多くの不要な情報が記録されます。

Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $false

  • VMWare ホストにログインするためのユーザー認証情報を、スクリプト内で明示的に表示されないように保存します。

New-VICredentialStoreItem -Host address -User user -Password 'password'

チェックすると、誰を保存したかが表示されます。

Get-VICredentialStoreItem

Connect-VIServer アドレスで接続を確認することもできます。

スクリプト自体は、たとえば、接続、オフ、念のため切断、次のオプションが可能です。


    Connect-VIserver -Server $vmhost 
    Stop-VMHost $vmhost -force -Confirm:$false 
    Disconnect-VIserver $vmhost -Confirm:$false

4. デフォルト.cmd

APC エージェントによって起動されるのと同じバッチ ファイル。 これは「C:Program Files[(x86)]APCPowerChute Business Editionagentcmdfiles」にあり、次の中にあります。

「C:Windowssystem32WindowsPowerShellv1.0powershell.exe」 - ファイル「C:...shutdown_hosts.ps1」
すべてが設定され、チェックされているようです。cmd も起動しました。正しく動作し、オフになります。

APC コンソールからコマンド ファイルのテストを実行します ([テスト] ボタンがあります)。これは機能しません。

これは、すべての作業が何も起こらなかった気まずい瞬間です。

5.カタルシス

タスクマネージャーを見ると、cmd が点滅し、powershell が点滅します。 cmd *32 とそれに応じて powershell *32 を詳しく見てみましょう。 私たちはそれを理解しています APC エージェント サービスは 32 ビットです。これは、対応するコンソールを実行することを意味します。

管理者としてpowershell x86を起動し、手順3からPowerCLIを再度インストールして設定します。

さて、PowerShell の呼び出し行を変更しましょう。

"C:Windows<b>SysWOW64</b>WindowsPowerShellv1.0powershell.exe…

6. ハッピーエンド!

出所: habr.com

コメントを追加します