Automation

 View Only
  • 1.  Rename and Backup VM vmx file

    Posted Jul 22, 2020 05:13 PM

    Is there a way to rename a vmx file by appending a string to the vmx filename in the same VM folder?

    PS C:\> (Get-VM TestVM).ExtensionData.Config.Files


    VmPathName          : [vSAN-Compute-Cluster] c224f15d-f813-5dc8-24ac-e4434b62be10/TestVM.vmx

    SnapshotDirectory   : [vSAN-Compute-Cluster] c224f15d-f813-5dc8-24ac-e4434b62be10/

    SuspendDirectory    : [vSAN-Compute-Cluster] c224f15d-f813-5dc8-24ac-e4434b62be10/

    LogDirectory        : [vSAN-Compute-Cluster] c224f15d-f813-5dc8-24ac-e4434b62be10/

    FtMetadataDirectory :

    I'd like to be able to copy the renamed file in the same folder while keeping the original .vmx file in the same LogDirectory folder. I looked at PowerCLI Script to Backup all VMX files but the backup destination is set to the local temp folder which isn't what my requirement is.



  • 2.  RE: Rename and Backup VM vmx file
    Best Answer

    Posted Jul 22, 2020 05:53 PM

    Something like this?

    $vmName = 'MyVM'

    $vm = Get-VM -Name $vmName

    $vmx = $vm.ExtensionData.LayoutEx.File | where{$_.Type -eq 'config'}

    $src = $vmx.Name

    $dst = $src -replace '.vmx','_suffix.vmx'

    $dc = Get-Datacenter -VM $vm


    $fileMgr = Get-View FileManager

    $fileMgr.CopyDatastoreFile($src,$dc.ExtensionData.MoRef,$dst,$dc.ExtensionData.MoRef,$false)



  • 3.  RE: Rename and Backup VM vmx file

    Posted Jul 29, 2020 12:12 PM

    LucD would you mind helping me with modifying it to run against multiple VMs, please? I tried but I'm having problems with substituting the variables for the 2nd VM in the ForEach loop.



  • 4.  RE: Rename and Backup VM vmx file

    Posted Jul 29, 2020 01:51 PM

    You could do something like this

    Get-VM -PipelineVariable vm |

    ForEach-Object -Process {

        $vmx = $vm.ExtensionData.LayoutEx.File | where{$_.Type -eq 'config'}

        $src = $vmx.Name

        $dst = $src -replace '.vmx','_suffix.vmx'

        $dc = Get-Datacenter -VM $vm

        $fileMgr = Get-View FileManager

        $fileMgr.CopyDatastoreFile($src,$dc.ExtensionData.MoRef,$dst,$dc.ExtensionData.MoRef,$false)

    }