PowerCLIでは、直接仮想マシンにコマンドを実行する機能がある。この機能を使うと、仮想マシンのOSにログインすることなく、設定変更や情報取得を行うことができる。
このコマンドは非常に有用なので、コマンドの使い方を調べて、実際に試してみた。
環境及び前提条件
環境
- vSphere 6.7 Update 3
前提条件
- vCenter ServerでESXi管理されていること (要するに無償版のESXiライセンスの環境ではないこと)
- 仮想マシンにVMware Toolsがインストールされていること
仮想マシンでコマンドを実行するInvoke-VMScript
仮想マシンに対してコマンドを実行するコマンドレットとして、Invoke-VMScript
が用意されている。構文は以下の通り。
Invoke-VMScript [-ScriptText] <String> [-VM] <VirtualMachine[]> [-HostCredential <PSCredential>] [-HostUser <String>] [-HostPassword <SecureString>] [-GuestCredential <PSCredential>] [-GuestUser <String>] [-GuestPassword <SecureString>] [-ToolsWaitSecs <Int32>] [-ScriptType <ScriptType>] [-Server <VIServer[]>] [-WhatIf] [-Confirm] [<CommonParameters>]
必要となるパラメータの説明を以下に記載する。
パラメータ | 内容 |
---|---|
VM | 仮想マシン名を指定する。 |
GuestUser | 仮想マシンのユーザを指定する。 |
GuestPassword | 仮想マシンのパスワードを指定する。 |
ScriptText | スクリプトのコマンドを記載する。コマンドが長くなる場合は、一度コマンドを変数に代入してから実行させるのがおすすめ。複数コマンドを実行したい場合は「;」でコマンドを複数区切って実行させることができる。 |
(Optional) ScriptType | 実行するスクリプトのタイプを選べる。PowerShell、Bat、Bashのいずれかを選べる。WindowsのデフォルトはPowerShellで、LinuxはBashとなる。したがって、仮想マシンがWindowsで、かつコマンドプロンプト上でコマンドを実行したい場合のみ本パラメータでBatを指定すればよく、通常は設定しなくてよい。 |
実際にいくつか簡単なコマンドを実行してみよう。
PowerShellコマンドを実行
以下は、Windows Server 2016の仮想マシンでhostname
とwhoami
とGet-WinSystemLocale
を実行する例となる。きちんとコマンドの実行結果が日本語で返ってきていることがわかる。
PS C:\> $str = "hostname ; whoami ; Get-WinSystemLocale"
PS C:\> Invoke-VMScript -VM win2016 -GuestUser "Administrator" -GuestPassword "P@ssw0rd!" -ScriptText $str
ScriptOutput
---------------------------------------------------------------------------------------------------------------------------------------------
| WIN-4DDOLQRR420
| win-4ddolqrr420\administrator
|
| LCID Name DisplayName
| ---- ---- -----------
| 1041 ja-JP 日本語 (日本)
|
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
コマンドプロンプト (Bat) のコマンドを実行
まずはver
コマンドをScriptType
オプションなしで実行してみよう。ver
コマンドはPowerShellで実行できないのでエラーになる。
PS C:\> $str = "ver"
PS C:\> Invoke-VMScript -VM win2016 -GuestUser "Administrator" -GuestPassword "P@ssw0rd!" -ScriptText $str
ScriptOutput
---------------------------------------------------------------------------------------------------------------------------------------------
| ver : 用語 'ver' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。
| 名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください
| 。
| 発生場所 行:1 文字:4
| + & {ver}
| + ~~~
| + CategoryInfo : ObjectNotFound: (ver:String) [], CommandNotFoundException
| + FullyQualifiedErrorId : CommandNotFoundException
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
このような場合は、-ScriptType Bat
を付けて実行すれば成功する。
PS C:\> $str = "ver"
PS C:\> Invoke-VMScript -VM win2016 -GuestUser "Administrator" -GuestPassword "P@ssw0rd!" -ScriptType Bat -ScriptText $str
ScriptOutput
---------------------------------------------------------------------------------------------------------------------------------------------
|
| Microsoft Windows [Version 10.0.14393]
|
---------------------------------------------------------------------------------------------------------------------------------------------
実行結果から不要な罫線を削除する
Invoke-VMScript
の出力結果は、----といった罫線で囲まれており、出力結果を使って判断等を行う場合には文字列加工が必要となり使い勝手が悪い。このような場合は一度実行結果を変数に入れたのち、ScriptOutput
メソッドを使うことで、純粋な実行結果のみを表示させることができる。また、コマの実行時の終了コードについても、ExitCode
メソッドを使うことで取得することができる。
以下実行例となる。
PS C:\> $str = "uname -a"
PS C:\> $res = Invoke-VMScript -VM VyOS-1.1.8 -GuestUser "vyos" -GuestPassword "P@ssw0rd!" -ScriptText $str
PS C:\> $res
ScriptOutput
-----------------------------------------------------------------------------------------------------------------------
| Linux vyos 3.13.11-1-amd64-vyos #1 SMP Sat Nov 11 12:10:30 CET 2017 x86_64 GNU/Linux
|
-----------------------------------------------------------------------------------------------------------------------
PS C:\> $res.ScriptOutput
Linux vyos 3.13.11-1-amd64-vyos #1 SMP Sat Nov 11 12:10:30 CET 2017 x86_64 GNU/Linux
PS C:\> $res.ExitCode
0
更新履歴
- 2020/6/3 新規作成
- 2021/8/5 「実行結果から不要な罫線を削除する」を追記
0 件のコメント:
コメントを投稿