My Tools

J’ai créé ce script PowerCLI afin d’effectuer certaines tâches dans une infrastructure VMware à l’aide de PowerCLI. Vous pouvez pour le moment lister les incohérences entre le nom des VMs affichées dans le vCenter ou Web Client et le nom du dossier dans le datastore, vous pouvez également vérifier que toutes vos VMs sont bien inventorier dans le vCenter. Cet utilitaire va s’enrichir au fil du temps. Si vous avez des suggestions, n’hésitez pas en m’en faire part.


#Script PowerCLI tester en version 5.1
#By Olivier Gosselin - France
#http://www.purplescreen.eu

$vCenterFQDN = ""
$UservCenter = ""
$PasswordvCenter =""
$ListVM=Get-VM
$ListDatastore = Get-Datastore
$ClusterVMware = Get-Cluster
$PathVM=$ListVM.Extensiondata.Config.Files.VmPathName
$Name=$ListVM.Extensiondata.Config.Name
$ESXHost = Get-Cluster | Get-VMHost | select -First 1
$Array = 0

Connect-VIServer $vCenterFQDN -User $UservCenter -Password $PasswordvCenter

#Voici les fonctions du Menu Principal
function Show-Diff-VM-Store {
    foreach ($Folder in $PathVM) {
$Split= $Folder.split("[]")
$SplitSplash=$Split.split("/")
$VMonDatastore=$SplitSplash[1]
$FolderInDatastore =$SplitSplash[2].TrimStart()
$FileVMX=$SplitSplash[3]
    if ($FolderInDatastore -ne $Name["$Array"]) {
Write-Host "Datastore : $VMonDatastore // Folder : $FolderInDatastore // VM Name : "$Name["$Array"]
    }
    else {
#On affiche rien car les VMs ne vont pas migrer
    }
$Array++
    }
}

function VM-In-Inventory {
foreach ($DatastoreVM in $ListDatastore) {
$ds = Get-Datastore -Name $ListDatastore["$Array"] | %{Get-View $_.Id}
$SearchSpec = New-Object VMware.Vim.HostDatastoreBrowserSearchSpec
$SearchSpec.matchpattern = "*.vmx"
$dsBrowser = Get-View $ds.browser
$DatastorePath = "[" + $ds.Summary.Name + "]"
# Recherche des VMX sur les Datastores
$SearchResult = $dsBrowser.SearchDatastoreSubFolders($DatastorePath, $SearchSpec) | where {$_.FolderPath -notmatch ".snapshot"} | %{$_.FolderPath + ($_.File | select Path).Path}
    foreach($VMXinventory in $SearchResult) {
$VMX_Name_inventory = $VMXinventory.split("/")
    if ($VMXinventory | Where-Object {$_ -in $PathVM}) {
#VM in Inventory
    } #Fin de if
    else {
Write-Host "Path : "$VMX_Name_inventory["0"]" // VM Name : "$VMX_Name_inventory["1"]" //  In Inventory ? : No"
$input = Read-Host "Do you want to Inventory this Virtual Machine (Y/N) ? "
#On interroge pour inventorier la VM
switch ($input) {
        'Y' {
New-VM -VMFilePath $VMXinventory -VMHost $ESXHost              
#Write-Host "Yes"
        } 
        'N' {                
#Write-Host "No"
        }
     }

    } #Fin de else
} #Fin de Foreach
$Array++
} #Fin de Foreach$DatastoreVM
} #Fin function VM-In-Inventory

#Menu Principal
function Show-Main-Menu {
param (
           [string]$Title = 'My Tools for VMWare PowerCLI -- By Olivier Gosselin'
     )
     cls
     Write-Host "================ $Title ================"
    
     Write-Host "1: Show difference between name in vSphere and Datastore"
     Write-Host "2: Show VM Unregistrer, Scan All Datastore"
     Write-Host "Q: Press 'Q' to quit."
}
do {
     Show-Main-Menu
     $input = Read-Host "Please make a selection"
     switch ($input) {
        '1' {
                cls
                Show-Diff-VM-Store
        } 
        '2' {
                cls
                VM-In-Inventory
        }
     'q' {
                return
        }
    }
     pause
}
until ($input -eq 'q')