Working on some minor details to retrieve loads of data (we will see where this stuff ends-up..)
Here comes a minor Powershell function to retrieve all VMDK filenames from a VMware VMX-file. Output is the VMX-filename (so you know where it came from), the VMDK-files and the location of the VMX-file (so you know where to look for it).
Sample usage:
Get-VMDKFileNamefromVMX -VMX C:\VMs\VM1\vm1.vmx,c:\VMS\VM2\vm2.vmx
function Get-VMDKFileNamefromVMX { <# .SYNOPSIS Parses a VMX-file for all VMDK-filenames .DESCRIPTION Outputs an object with all VMDK-filenames .EXAMPLE Get-VMDKFileNamefromVMX -VMX C:\VMs\VM1\vm1.vmx,c:\VMS\VM2\vm2.vmx #> [CmdletBinding()] param( [Parameter(Mandatory=$False, ValueFromPipeline=$true, HelpMessage="Location of VMX-File")] [alias("CFile")] [string[]]$VMX ) Begin { $vmx = $vmx.split(",") write-verbose "------------------------" write-verbose "Start of Get-VMDKFileNamefromVMX" Write-Verbose "VMX-files: $($vmx.count)" } Process { foreach ($file in $vmx) { write-verbose "Search for VMDK in $($file)" try { $vmdkfiles = Select-String -Path $($file) -Pattern vmdk } catch { write-error "Failed to retrieve $($file)" } write-verbose "Parsing results for VMDK" write-verbose "Found $($vmdkfiles.count) matches of VMDK" foreach ($vmdk in $vmdkfiles) { write-verbose "Found: $($vmdk.line)" $vmdkfilename = ($vmdk.line).split("=")[1] $vmdkfilename = $vmdkfilename.Replace("`"","") $vmdkfilename = $vmdkfilename.trim() $object = New-Object –TypeName PSObject $object | Add-Member –MemberType NoteProperty –Name VMX –Value $($file) $object | Add-Member –MemberType NoteProperty –Name VMDK –Value $($vmdkfilename) $object | Add-Member –MemberType NoteProperty –Name Location –Value $(Split-Path $file) $object } } } End { write-verbose "End of Get-VMDKFileNamefromVMX" write-verbose "------------------------" } }