$folder = Get-View (Get-Datacenter -Name | Get-Folder -Name "vm").ID $pool = Get-View (Get-Cluster -Name | Get-ResourcePool -Name "Resources").ID $esxImpl = Get-VMHost -Name $esx = Get-View $esxImpl.ID $dsBrowser = Get-View $esx.DatastoreBrowser foreach($dsImpl in $dsBrowser.Datastore){ $ds = Get-View $dsImpl $vms = @() foreach($vmImpl in $ds.Vm){ $vm = Get-View $vmImpl $vms += $vm.Config.Files.VmPathName } $datastorepath = "[" + $ds.Summary.Name + "]" $searchspec = New-Object VMware.Vim.HostDatastoreBrowserSearchSpec $searchSpec.matchpattern = "*.vmx" $taskMoRef = $dsBrowser.SearchDatastoreSubFolders_Task($datastorePath, $searchSpec) $task = Get-View $taskMoRef while ($task.Info.State -eq "running"){$task = Get-View $taskMoRef} foreach ($file in $task.info.Result){ $found = $FALSE foreach($vmx in $vms){ if(($file.FolderPath + $file.File[0].Path) -eq $vmx){ $found = $TRUE } } if (-not $found -and $task.Info.Result[0].File -ne $null){ $vmx = $file.FolderPath + $file.File[0].Path $params = @($vmx,$null,$FALSE,$pool.MoRef,$null) $folder.GetType().GetMethod("RegisterVM_Task").Invoke($folder, $params) } } }