Lorsque vous devez ajouter de l'espace à un disque utilisé par Windows, que votre machine a plusieurs disques de la même taille et que vous devez trouver sur quel disque il faut ajouter de l'espace sous vCenter, il faut trouver un point commun.
La solution est d'utiliser le UUID affecté à chaque disque par VMWare. C'est UUID est reporté sous Windows au niveau du Serial Number du disque présenté à la VM.
Pour trouver le Serial Number de vos disques sous Windows, une solution simple est d'utiliser un VbScript qui exécutera une requête WMI.
Le vbscript :
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive",,48)
MaLigne = ""
Wscript.Echo "SerialNumber" & VbTab & "DeviceID" & VbTab & "PNPDeviceID" & VbTab & "Caption" & VbTab & "Name"
For Each objItem in colItems
MaLigne = objItem.SerialNumber & VbTab & objItem.DeviceID & VbTab & objItem.PNPDeviceID & VbTab & objItem.Caption & VbTab & objItem.Name
Wscript.Echo MaLigne
Next
Lien vers le fichier : cliquez ici
Le VbScript va sortir un tableau de vos disques Windows de ce type.
Le serial Number correspond au UUID du disque VMWare.
Dans la base WMI le PNPDeviceID correspond au Device Instance Path
En WMI le PNPDeviceID correspond au Device Instance Path que l'on retrouve dans les propriétés d'un disque
Le script Powershell permet de sortir ce résultat contenant le UUID des disques. Cette information permettra de croiser les informations avec celles données par le vbScript lancé directement sur la VM
Le script powershell
param ([string]$VIserver, [string]$VILogin, [string]$VIMotdepasse, [string]$vmname)
#Exemple d'utilisation
#.\Get-VMWinUUIDMap.ps1 -VIserver "NomVcenter.local" -VILogin "LoginVcenter" -vmname "NomVmAchecker"
Write-Host "vCenter : $VIserver"
Write-Host "Login pour vCenter : $VILogin"
Write-Host "Nom VM : $vmname"
$HostCred = $Host.UI.PromptForCredential("Please enter credentials", "Enter ESX host credentials for $ESXHost", "$VILogin", "")
function CheckVIToolKit()
{
## Before we do anything we must check to see if the user has the VI toolkit installed.
## If user does not then we prompt the user and exit.
$Error.Clear()
Get-PSSnapin vmware*
if($Error.Count -ne 0)
{
Clear-Host
Write-Host "`n`n`t`t ERROR - To run this script, the VI Toolkit must be installed and registered with Powershell. If the VI Tollkit is installed," -foregroundcolor red -backgroundColor yellow
Write-Host "`t`t go to the Settings menu in Powershell Plus and click on Manage Snapins." -foregroundcolor red -backgroundColor yellow
# Read-Host "`n`n`t Press <Enter> to continue."
break
}
}## EOF: CheckVIToolKit()
$DebugPreference = "SilentlyContinue"
asnp vmware* #Import modules VMWares
$ErrorActionPreference = "Continue"
if ($verbose) {$VerbosePreference = "Continue"}
if ($debug) {$DebugPreference = "Continue"}
CheckVIToolKit
#Connect-VIServer -Server $VIserver -User $VILogin -Password $VIMotdepasse
Connect-VIServer -Server $VIserver -Credential $HostCred
if ($global:DefaultVIServer.ProductLine -ne "vpx"){Write-Host -ForegroundColor Red "You must be connected to a vCenter to run this script!";break}
if (!($vmdisks=(get-vm $vmname|get-view).Config.Hardware.Device|?{$_.Backing.Uuid}|%{$_|select @{n="VMlabel";e={$_.DeviceInfo.label}},@{n="VMFilename";e={$_.Backing.FileName}},@{n="UUID";e={($_.Backing.Uuid).replace("-","")}},@{n="VMSize";e={$_.CapacityInKB/1MB}}})){Write-Host -ForegroundColor Red "Not a valid VM!";break}
#Affichage des noms de colonnes
Write-Host "UUID`tVMlabel`tVMFilename`tVMSize"
foreach ($vmdisk in $vmdisks)
{
$UneLigne = "$($vmdisk.UUID)`t$($vmdisk.VMlabel)`t$($vmdisk.VMFilename)`t$($vmdisk.VMSize)"
Write-Host $UneLigne
}
Lien vers le fichier : cliquez ici
Pages Web
Site Web | Description |
---|---|
Van-lieshout.com | Post sur la problématique de comment interroger en WMI une VM sans passer par le réseau |
Téléchargement(s)
Nom | Site Web d origine | Description |
---|---|---|
VMware-PowerCLI-5.1.0-793... | https://my.vmware.com/fr/web/v... | vSphere PowerCli |