param ( [VMware.VimAutomation.Client20.DatastoreImpl[]] $Datastore = ( Get-Datastore ), [VMware.VimAutomation.Client20.FolderImpl] $Folder = ( Get-Folder "Discovered Virtual Machine" ) ) function GetAllVmxFiles ( $ds ) { $DsDrive = $datastore | ForEach-Object { New-PSDrive -name ($_.Name) -psProvider VimDatastore -root / -datastore $_ } $VmxFileInfo = $DsDrive | ForEach-Object { Write-Progress "Scanning datastores" "$_..." dir "$($_):" -recurse -include *.vmx # took 9 min! } $DsDrive | Remove-PSDrive $VmxFileInfo | ForEach-Object { $_.DatastoreFullPath } } function GetRegisteredVmxFiles { Get-VM | Get-View | ForEach-Object { $_.Config.Files.VmPathName } } $AllVmx = GetAllVmxFiles $datastore $RegisteredVmx = GetRegisteredVmxFiles $UnRegisteredVmx = $AllVmx | Where-Object { $RegisteredVmx -notcontains $_ } while ( $Answer -notmatch "a|[1-$( $UnRegisteredVmx.Length )]" ) { for ( $i = 1; $i -le $UnRegisteredVmx.Length; $i++ ) { Write-Host "[$i]:" $UnRegisteredVmx[$i] } $Answer = Read-Host "Enter the VM number to register it in VI, or 'A' to register all." } Write-Host "You answered $Answer"