PowerCLIでは、直接仮想マシンにコマンドを実行する機能がある。この機能を使うと、全仮想マシンの設定変更や情報取得を一発で行うことができたり、仮想マシンにログインせずともファイルをコピー・取得することが実現できる。
Invoke-VMScript
と同様に、このコマンドは非常に有用なので、コマンドの使い方を調べて、実際に試してみた。
環境及び前提条件
環境
- vSphere 6.7 Update 3
前提条件
- vCenter ServerでESXi管理されていること (要するに無償版のESXiライセンスの環境ではないこと)
- 仮想マシンにVMware Toolsがインストールされていること
仮想マシンに対してファイルコピー・取得をするCopy-VMGuestFile
PowerCLIを実行する環境 (ローカル) からファイルを仮想マシンにコピーしたり、逆に仮想マシンのファイルを取得するコマンドレットとして、Copy-VMGuestFile
が用意されている。構文は以下の通り。
# ローカルから仮想マシンへファイルをコピー
Copy-VMGuestFile [-Source] <String[]> [-Destination] <String> -LocalToGuest [-Force] [-VM] <VirtualMachine[]> [-HostCredential <PSCredential>] [-HostUser <String>] [-HostPassword <SecureString>] [-GuestCredential <PSCredential>] [-GuestUser <String>] [-GuestPassword <SecureString>] [-ToolsWaitSecs <Int32>] [-Server <VIServer[]>] [-WhatIf] [-Confirm] [<CommonParameters>]
# 仮想マシンからローカルへファイルを取得
Copy-VMGuestFile [-Source] <String[]> [-Destination] <String> -GuestToLocal [-Force] [-VM] <VirtualMachine[]> [-HostCredential <PSCredential>] [-HostUser <String>] [-HostPassword <SecureString>] [-GuestCredential <PSCredential>] [-GuestUser <String>] [-GuestPassword <SecureString>] [-ToolsWaitSecs <Int32>] [-Server <VIServer[]>] [-WhatIf] [-Confirm] [<CommonParameters>]
必要となるパラメータの説明を以下に記載する。
パラメータ | 内容 |
---|---|
LocalToGuest | ローカルから仮想マシンにコピーする際に指定。GuestToLocalとは同時に使用できない。 |
GuestToLocal | 仮想マシンからローカルにコピーする際に指定。LocalToGuestとは同時に使用できない。 |
VM | 仮想マシン名を指定する。 |
GuestUser | 仮想マシンのユーザを指定する。 |
GuestPassword | 仮想マシンのパスワードを指定する。 |
Source | ローカルのファイル配置場所を指定。間違いを防ぐために、フルパス指定を推奨。 |
Destination | 仮想マシンのファイル配置場所を指定。間違いを防ぐために、フルパス指定を推奨。 |
(Optional) Force | ファイルを上書きする場合や、保存先フォルダを自動生成してファイルコピーする場合に指定する。誤ってフォルダ作ったりファイルを上書きする危険なパラメータなので、利用する際は注意すること。 |
ローカルから仮想マシンへファイルをコピー
テスト用のファイルとして、「text.txt」を用意し、ローカルから仮想マシンへコピーしてみることにする。
まずはファイルが存在しないことを確認する。
PS C:\> $str = "dir c:\Users\Administrator\Desktop"
PS C:\> Invoke-VMScript -VM win2016 -GuestUser "Administrator" -GuestPassword "P@ssw0rd" -ScriptText $str
ScriptOutput
---------------------------------------------------------------------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------------------------------------------------------------------
Copy-VMGuestFile
にて、仮想マシンにファイルをコピーする。
PS C:\> Copy-VMGuestFile -LocalToGuest -VM win2016 -GuestUser "Administrator" -GuestPassword "P@ssw0rd" -Source "c:\work\test.txt" -Destination "c:\Users\Administrator\Desktop\"
コピー後に再度ファイルの確認をすると、「text.txt」が仮想マシンにコピーされていることがわかる。
PS C:\> Invoke-VMScript -VM win2016 -GuestUser "Administrator" -GuestPassword "P@ssw0rd" -ScriptText $str
ScriptOutput
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
| ディレクトリ: C:\Users\Administrator\Desktop
|
|
| Mode LastWriteTime Length Name
| ---- ------------- ------ ----
| -a---- 2020/05/23 16:42 27 test.txt
|
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
仮想マシンからローカルへファイルを取得
今度は逆に仮想マシンからファイルを取得してみる。テスト用のファイルとして、「text2.txt」を仮想マシン上に用意しておく。
まずはローカルにファイルが存在しないことを確認する。
PS C:\> dir c:\work
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2020/05/23 16:09 27 test.txt
Copy-VMGuestFile`にて、ファイルを取得する。
PS C:\> Copy-VMGuestFile -GuestToLocal -VM win2016 -GuestUser "Administrator" -GuestPassword "P@ssw0rd" -Source "c:\Users\Administrator\Desktop\test2.txt" -Destination "c:\work\"
コピー後に再度ファイルの確認をすると、「text2.txt」をローカルに取得できていることがわかる。
PS C:\> dir c:\work
ディレクトリ: C:\work
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2020/05/23 16:09 27 test.txt
-a---- 2020/05/23 18:30 27 test2.txt
コピー時にファイルを上書きする
すでにファイルが存在する場合の動作を確認しておこう。ファイルが存在する場合は、上書きできず失敗する。
PS C:\> Copy-VMGuestFile -LocalToGuest -VM win2016 -GuestUser "Administrator" -GuestPassword "P@ssw0rd" -Source "c:\work\test.txt" -Destination "c:\Users\Administrator\Desktop\"
Copy-VMGuestFile : 2020/05/23 16:16:44 Copy-VMGuestFile The specified file 'c:\Users\Administrator\Desktop\test.txt' exists in VM 'win2016'.
Specify 'Force' parameter in order to override it.
発生場所 行:1 文字:1
+ Copy-VMGuestFile -LocalToGuest -VM win2016 -GuestUser "Administrator" ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (c:\Users\Administrator\Desktop\:String) [Copy-VMGuestFile]、ViError
+ FullyQualifiedErrorId : Client20_VmGuestServiceImpl_CopyFileFromHostToGuest_DestinationFileExists,VMware.VimAutomation.ViCore.Cmdlets.
Commands.CopyVMGuestFile
この場合は。-Force
を付けて実行する。
PS C:\> Copy-VMGuestFile -LocalToGuest -VM win2016 -GuestUser "Administrator" -GuestPassword "P@ssw0rd" -Source "c:\work\test.txt" -Destination "c:\Users\Administrator\Desktop\" -Force
以下の通りファイルが上書きでコピーされる (LastWriteTimeが更新されることからファイル上書きを確認できる)。
PS C:\> Invoke-VMScript -VM win2016 -GuestUser "Administrator" -GuestPassword "P@ssw0rd" -ScriptText $str
ScriptOutput
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
| ディレクトリ: C:\Users\Administrator\Desktop
|
|
| Mode LastWriteTime Length Name
| ---- ------------- ------ ----
| -a---- 2020/05/23 16:48 27 test.txt
|
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
コピー先にフォルダを自動作成する
コピー先にフォルダが存在しない場合も、当然失敗するが、-Force
を付ければ、フォルダを作成したうえでファイルをコピーしてくれる。
PS C:\> Copy-VMGuestFile -LocalToGuest -VM win2016 -GuestUser "Administrator" -GuestPassword "P@ssw0rd" -Source "c:\work\test.txt" -Destination "c:\Users\Administrator\Desktop\folder\" -Force
以下の通り「folder」フォルダを作ったうえで、ファイルがコピーされた。
PS C:\> Invoke-VMScript -VM win2016 -GuestUser "Administrator" -GuestPassword "P@ssw0rd" -ScriptText $str
ScriptOutput
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
| ディレクトリ: C:\Users\Administrator\Desktop\folder
|
|
| Mode LastWriteTime Length Name
| ---- ------------- ------ ----
| -a---- 2020/05/23 16:50 27 test.txt
|
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
0 件のコメント:
コメントを投稿