2020年6月13日土曜日

【PowerCLI】仮想マシンに対してファイルコピー・取得をする「Copy-VMGuestFile」

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 件のコメント:

コメントを投稿

人気の投稿