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 "------------------------"
}
}
