Thanks,
$Cluster = "MyCluster"
$Datastores = "MyDS"
$VMFolder = "MyFolder"
$ESXHost = Get-Cluster $Cluster | Get-VMHost | select -First 1
foreach($Datastore in Get-Datastore $Datastores) {
# Collect .vmx paths of registered VMs on the datastore
$registered = @{}
Get-VM -Datastore $Datastore | %{$_.Extensiondata.LayoutEx.File | where {$_.Name -like "*.vmx"} | %{$registered.Add($_.Name,$true)}}
# Set up Search for .VMX Files in Datastore
New-PSDrive -Name TgtDS -Location $Datastore -PSProvider VimDatastore -Root '\' | Out-Null
$unregistered = @(Get-ChildItem -Path TgtDS: -Recurse | `
where {$_.FolderPath -notmatch ".snapshot" -and $_.Name -like "*.vmx" -and !$registered.ContainsKey($_.Name)})
Remove-PSDrive -Name TgtDS
#Register all .vmx Files as VMs on the datastore
foreach($VMXFile in $unregistered) {
New-VM -VMFilePath $VMXFile.DatastoreFullPath -VMHost $ESXHost -Location $VMFolder -RunAsync
}
}
==========================================================================
Can we do this wrt DS cluster against single DS ?
Also I am not clear why we need section "#Register all .vmx Files as VMs on the datastore", all we need is vms or vmx file where VM is remove from incentory but was not remove from disk
Also I am not clean why we want to do "$ESXHost = Get-Cluster xxx | Get-VMHost | select -First 1"
I guess below code is enough , which will go tho all DS cluster to find vm which are un-register ... kindly suggest
==========================================================================
foreach($Datastore in (Get-Datastorecluster xxxx)) {
# Collect .vmx paths of registered VMs on the datastore
$registered = @{}
Get-VM -Datastore $Datastore | %{$_.Extensiondata.LayoutEx.File | where {$_.Name -like "*.vmx"} | %{$registered.Add($_.Name,$true)}}
# Set up Search for .VMX Files in Datastore
New-PSDrive -Name TgtDS -Location $Datastore -PSProvider VimDatastore -Root '\' | Out-Null
$unregistered = @(Get-ChildItem -Path TgtDS: -Recurse | `
where {$_.FolderPath -notmatch ".snapshot" -and $_.Name -like "*.vmx" -and !$registered.ContainsKey($_.Name)}) | Export-Csv -NoTypeInformation -UseCulture c:\vm-unregister.csv
Remove-PSDrive -Name TgtDS
}