vmware - finding orphaned files

Use following script for finding orphaned files in your vmware env…

# # Purpose : List all orphaned vmdk on all datastores in all VC's # Version: 1.1 # Author : HJA van Bokhoven # Modifications: LucD

$arrayVC = @(“server”) $report = @()

foreach ($strVC in $arrayVC) { Connect-VIServer $strVC $arrUsedDisks = Get-View -ViewType VirtualMachine | % {$_.Layout} | % {$_.Disk} | % {$_.DiskFile} $arrDS = Get-Datastore | Sort-Object -property Name foreach ($strDatastore in $arrDS) { Write-Host $strDatastore.Name $ds = Get-Datastore -Name $strDatastore.Name | % {Get-View $_.Id} $fileQueryFlags = New-Object VMware.Vim.FileQueryFlags $fileQueryFlags.FileSize = $true $fileQueryFlags.FileType = $true $fileQueryFlags.Modification = $true $searchSpec = New-Object VMware.Vim.HostDatastoreBrowserSearchSpec $searchSpec.details = $fileQueryFlags $searchSpec.matchPattern = "*.vmdk" $searchSpec.sortFoldersFirst = $true $dsBrowser = Get-View $ds.browser $rootPath = "["+$ds.summary.Name+"]"

#Workaround for vSphere 4 fileOwner bug if ($dsBrowser.Client.Version -eq "Vim4") { $searchSpec = [VMware.Vim.VIConvert]::ToVim4($searchSpec) $searchSpec.details.fileOwnerSpecified = $true $dsBrowserMoRef = [VMware.Vim.VIConvert]::ToVim4($dsBrowser.MoRef); $searchTaskMoRef = $dsBrowser.Client.VimService.SearchDatastoreSubFolders_Task($dsBrowserMoRef, $rootPath, $searchSpec) $searchResult = [VMware.Vim.VIConvert]::ToVim($dsBrowser.WaitForTask([VMware.Vim.VIConvert]::ToVim($searchTaskMoRef))) } else { $searchResult = $dsBrowser.SearchDatastoreSubFolders($rootPath, $searchSpec) }

foreach ($folder in $searchResult) { foreach ($fileResult in $folder.File) { if ($fileResult.Path) { if (-not ($arrUsedDisks -contains ($folder.FolderPath + $fileResult.Path))){ $row = "" | Select DS, Path, File, Size, ModDate, Host $row.DS = $strDatastore.Name $row.Path = $folder.FolderPath $row.File = $fileResult.Path $row.Size = $fileResult.FileSize $row.ModDate = $fileResult.Modification $row.Host = (Get-View $ds.Host[0].Key).Name $report += $row } } } } } # Disconnect session from VC disconnect-viserver -confirm:$false }

$report | Export-Csv "C:\VMDK-orphaned.csv" -noTypeInformation