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