Voici un script que j’ai placé dans une tâche planifiée et qui roule tous les jours dans tous mes datacenters.
Plus jamais je me ferai prendre à perdre des VMs et surtout è les chercher pendant des heures quand le vCenter plantera.
En gros, ca sort une liste des VMs et leur emplacement sur les différents datastores.
Voici deux facon de le rouler (la différence est que la premiere se roule directement (get-vmxpath) et la seconde se roule en trois étapes.
Pour chercher partout:
function Get-PathDesVMX {
[CmdletBinding()]
Param
(
[Parameter(Mandatory=$false,
Position=1,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)]
[String[]]$Name
)#End Param
Begin
{
Write-Verbose « Je cherche les paths . . . »
}#Begin
Process
{
try
{
Get-VM * |
Add-Member -MemberType ScriptProperty -Name ‘VMXPath’ -Value {$this.extensiondata.config.files.vmpathname} -Passthru -Force |
Select-Object Name,VMXPath,@{N= »Cluster »;E={Get-Cluster -VM $_}} | export-csv -notypeinformation vmxpath.csv
}
catch
{
« Erreur: Merci de vous connecter a un vcenter en premier lieu. » | Out-host
}
}
}
########################
Et pour chercher un groupe précis de VM (créer un fichier txt avec les noms des VMs.)
1: Ouvrez la fonction
2: Creer un fichier avec les noms des VM
3: rouler la commande suivante:
Get-Content ‘FICHIER_DES_VM’ | Get-PathDesVMX | Export-Csv PathDesVM.csv -NoTypeInformation
##############
function Get-PathDesVMX {
[CmdletBinding()]
Param
(
[Parameter(Mandatory=$true,
Position=1,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)]
[String[]]$Name
)#End Param
Begin
{
Write-Verbose « Je cherche les paths . . . »
}#Begin
Process
{
try
{
Get-VM -Name $Name |
Add-Member -MemberType ScriptProperty -Name ‘VMXPath’ -Value {$this.extensiondata.config.files.vmpathname} -Passthru -Force |
Select-Object Name,VMXPath,@{N= »Cluster »;E={Get-Cluster -VM $_}}
}
catch
{
« Error: Merci de vous connecter a un vcenter en premier lieu. » | Out-host
}
}
}
################