Juin 302022
 

Trouver le chemin du disque

Identifier les partitions existantes et la place libre

partedUtil getptbl /vmfs/devices/disks/t10.ATA_____HGST_HTS721010A9E630__________________________JR10006PHDWJHE

gpt
121601 255 63 1953525168
1 64      204863   C12A7328F81F11D2BA4B00A0C93EC93B systemPartition 128
5 208896  1232895  EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
6 1234944 2258943  EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
7 2260992 15470591 4EB2EA3978554790A79EFAE495E21F8D vmfsl 0
  • Je peux créer à partir de la partition 8
  • Je peux prendre le dernier block utilisé (15470591) +1 (block suivant) +2048(taille de block) = 15472640
  • Mon disque a une taille de (1953525168) – les blocks précédents (15472640) = 1938052528

Trouver les identifiants de partitions

partedUtil showGuids
 Partition Type       GUID
 vmfs                 AA31E02A400F11DB9590000C2911D1B8
 vmkDiagnostic        9D27538040AD11DBBF97000C2911D1B8
 vsan                 381CFCCC728811E092EE000C2911D0B2
 virsto               77719A0CA4A011E3A47E000C29745A24
 VMware Reserved      9198EFFC31C011DB8F78000C2911D1B8
 Basic Data           EBD0A0A2B9E5443387C068B6B72699C7
 Linux Swap           0657FD6DA4AB43C484E50933C84B4F4F
 Linux Lvm            E6D6D379F50744C2A23C238F2A3DF928
 Linux Raid           A19D880F05FC4D3BA006743F0F84911E
 Efi System           C12A7328F81F11D2BA4B00A0C93EC93B
 Microsoft Reserved   E3C9E3160B5C4DB8817DF92DF00215AE
 Unused Entry         00000000000000000000000000000000

Ajouter une partition

partedUtil add /vmfs/devices/disks/t10.ATA_____HGST_HTS721010A9E630__________________________JR10006PHDWJHE gpt « 8 15472640 1938052528 AA31E02A400F11DB9590000C2911D1B8 0″

partedutil add <chemin du disque> <partition type> <partition numéro> <Secteur de début> <secteur de fin> <type de partition> 0 (je ne sais pas a quoi sert le zéro)

La formater

vmkfstools -C  vmfs6 -S « LOCAL Datastore » /vmfs/devices/disks/t10.ATA_____HGST_HTS721010A9E630__________________________JR10006PHDWJHE:8

-C ‘type de formatage’  -S ‘nom du datastore’  <chemin du disque : numéro de partition>

Sep 152016
 

Pré-requis :

Un share réseau sur lequel l’objet COMPUTER de la machine VEEAM a les droits en écriture.
Le soft ignore les paramètres de credentials créés pour l’occasion, alors, autant s’en passer complètement 🙂
Le script doit être lancé en tant qu’administrateur !!

J’ai préféré créer un script qui fait tout plutôt que de faire de la config dans l’application et dans le script.

Le script :

# Author: Vladimir Eremin
# Created Date: 3/24/2015
# http://forums.veeam.com/member31097.html
#
# Adapted by Myself
# Must be run as administrator !
# backup everything except VMs defined

##################################################################
#                   User Defined Variables
##################################################################

$ExceptionVMNames = @('DSVA-VM01','VM-VEEAM-01')           # Theses VMs will NOT be backuped.
$HostName = "ESXNAME01"
$Directory = "\\NAS01.DOMAIN.COM\VEEAM"
$CompressionLevel = "5"              # Desired compression level (Optional; Possible values: 0 - None, 4 - Dedupe-friendly, 5 - Optimal, 6 - High, 9 - Extreme)
$EnableQuiescence = $True            # Quiesce VM when taking snapshot (Optional; VMware Tools are required; Possible values: $True/$False)
$Retention = "In3days"               # Possible values: Never , Tonight, TomorrowNight, In3days, In1Week, In2Weeks, In1Month)

$EnableNotification = $True          # Send an eMail about the backup when completed.
$SMTPServer = "smtp.domain.com"
$EmailFrom = "veeam.site1@domain.com"
$EmailTo = "myself@domain.com"
$EmailSubject = "VM backup of SITE 1"




# Pour la création des objets nécessaires au backup. Il n'est pas nécessaire de les créer dans l'interface graphique.
$ESX_name='ESXNAME01.domain.com'
$ESX_User='root'
$ESX_password='MemePasEnReve:-)'
$NAS_name='NAS01'

# Get-Command -Module VeeamPSSnapIn           # pour lister les commandes possibles...

##################################################################
#                   End User Defined Variables
##################################################################

Add-PSSnapin VeeamPSSnapin

Connect-VBRServer -server localhost

if ( Find-VBRViEntity -name $ESX_name -HostsAndClusters ) {
  Write-Host "ESX exist" -foregroundcolor GREEN
} else {
  Write-Host "ESX does not exist. Create it" -foregroundcolor CYAN
  Add-VBRESXi -Name $ESX_name -User $ESX_User -Password $ESX_password
}

$Server = Get-VBRServer -name $HostName

# Création du repository.
# Attention, les droits NTFS du share doivent autoriser l'objet COMPUTER a modifier les fichiers sur le NAS.
if (Get-VBRBackupRepository -name $NAS_name ) {
  Write-Host "Repository exist" -foregroundcolor GREEN
} else {
  Write-Host "Repository does not exist. Create it"  -foregroundcolor CYAN
  Add-VBRBackupRepository -Name $NAS_name -Type CifsShare -RotatedDrive -Description "Synology NAS" -Server $server -Folder $Directory
}

# Creation du proxy pour backup local
if ( ( Get-VBRViProxy | measure).count -ne 1  ) {
  Write-Host "Proxy does not exist. Create it" -foregroundcolor CYAN
  Get-VBRServer | ? { $_.type -eq "Local" } | Add-VBRViProxy -Description "Local Backup Proxy" -MaxTasks 2
} else {
  Write-Host "Proxy exist"  -foregroundcolor GREEN
}

#################### Main program ################

$MesssagyBody = @()

foreach ($VM in Find-VBRViEntity -Server $Server | ? {$_.type -eq "vm" -and $_.name -notin $ExceptionVMNames -and $_.name -notlike "*_clone_*" }){

  Write-Host "Starting backup of " $VM.name -nonewline -foregroundcolor cyan
  $ZIPSession = Start-VBRZip -Entity $VM -Folder $Directory -Compression $CompressionLevel -DisableQuiesce:(!$EnableQuiescence) -AutoDelete $Retention
  if ( $ZIPSession.Result -eq 'Failed' ) {
    Write-Host ". statut : " $ZIPSession.Result -foregroundcolor RED
  } else {
    Write-Host ". statut : " $ZIPSession.Result -foregroundcolor GREEN
  }


  If ($EnableNotification){
    $TaskSessions = $ZIPSession.GetTaskSessions().logger.getlog().updatedrecords
    $FailedSessions =  $TaskSessions | where {$_.status -ne "ESucceeded"}

    if ($FailedSessions -ne $Null){
      $MesssagyBody = $MesssagyBody + ($ZIPSession | Select-Object @{n="Name";e={($_.name).Substring(0, $_.name.LastIndexOf("("))}} ,@{n="Start Time";e={$_.CreationTime}},@{n="End Time";e={$_.EndTime}},Result,@{n="Details";e={$FailedSessions.Title}})
    }Else{
      $MesssagyBody = $MesssagyBody + ($ZIPSession | Select-Object @{n="Name";e={($_.name).Substring(0, $_.name.LastIndexOf("("))}} ,@{n="Start Time";e={$_.CreationTime}},@{n="End Time";e={$_.EndTime}},Result,@{n="Details";e={($TaskSessions | sort creationtime -Descending | select -first 1).Title}})
    }
  }
}

If ($EnableNotification){
  #                   Email formatting
  $style = "<style>BODY{font-family: Arial; font-size: 10pt;}"
  $style+=   "TABLE{border: 1px solid black; border-collapse: collapse;}"
  $style+=   "TH{border: 1px solid black; background: #ddddff; padding: 5px; }"
  $style+=   "TD{border: 1px solid black; padding: 5px; }"
  $style+= "</style>"

  $Message = New-Object System.Net.Mail.MailMessage $EmailFrom, $EmailTo
  $Message.Subject = $EmailSubject
  $Message.IsBodyHTML = $True
  $message.Body = $MesssagyBody | ConvertTo-Html -head $style | Out-String
  $SMTP = New-Object Net.Mail.SmtpClient($SMTPServer)
  $SMTP.Send($Message)
}
La commande pour la tache planifiée :
schtasks /create /SC daily /TN Daily_VM_backup /TR "C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -file C:\Script\Veeam_Zip_SITE1.ps1" /ST 23:00 /RU system
Et voila…
Fév 012016
 

Dans mon environnement, se trouvent des « vieux » ESX(i)s 4.1 qui se font régulièrement jeter par le vCenter.
Après avoir fait les vérifications de base (firewall, heartbeat,…), nous avons constaté que le problème venait de la vérification des certificats SSL.
Windows vérifie régulièrement que les certificats utilisés ne sont pas sur une liste de certificats révoqués. Pour ce faire, le PC (dans ce cas ci, le vCenter) se connecte chez Microsoft pour obtenir cette liste.
Or, nous n’avons pas autorisé cette connexion réseau, et donc, timeout, et le vcenter continue sa vie sans probleme.

MAIS, dernièrement, notre équipe réseau préférée a fait un changement dans la topologie et maintenant, les paquets ne sont plus justes droppés, mais rebondissent entre 2 routeurs jusqu’à la fin de leur TTL. Et donc, le timeout dure plus longtemps que prévu… et vCenter (et les ESX(i)s 4.1) n’aiment pas ça du tout.

Nous avons donc désactivé la Policy qui vérifie cette liste de certificats révoqués, et… plus AUCUN problème.

La Policy :
Local Computer Policy
-> Computer configuration
–> Windows Settings
—> Security Settings
—-> Public key Policies
====> Certificate Path Validation Settings
=====> Network retrieval
======> Define these Policy settings : aucune case cochée.

Bon, c’est moins sécurisé, mais… ça fonctionne.

Jan 292016
 

Si vous tentez d’ouvrir une console via la ligne de commande PowerShell et que vous avez cette erreur :

get-vm MGMT | Open-VMConsoleWindow
Open-VMConsoleWindow : 29-01-16 11:44:00    Open-VMConsoleWindow        Unable to find the specified browser: "C:\".
Au caractère Ligne:1 : 15
+ get-vm MGMT | Open-VMConsoleWindow
+               ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument : (:) [Open-VMConsoleWindow], InvalidArgument
+ FullyQualifiedErrorId : ViCore_ViCoreServiceImpl_GetVMConsoleWindowBrowser_FileNotFound,VMware.VimAutomation.ViCore.Cmdlets.Commands.OpenVMConsoleWindow

C’est que PowerCli ne sait pas quel browser utiliser (ouais… super le message d’erreur, hein !)
Dans ce cas, configurez le browser à utiliser via une des deux commandes suivantes (en fonction de vos préference). Cette action est à exécuter avec des droits d’administrateur.

Notez que vous devez indiquer la version 32 bit du browser !

Internet Explorer
Set-PowerCLIConfiguration –VMConsoleWindowBrowser 'C:\Program Files (x86)\Internet Explorer\iexplore.exe'
Firefox
Set-PowerCLIConfiguration –VMConsoleWindowBrowser “C:\Program Files (x86)\Mozilla Firefox\firefox.exe”

 

Sep 072015
 

Bonjour,

Si, comme moi, vous ne savez pas « vraiment » sur quel switch, ni quel port se trouve connecté la vmnic de votre ESX ET que votre switch ne supporte pas CDP, mais LLDP, voici un script maison qui va vous donner l’info.

Mon script lance une capture d’une trame spécifique émise par le switch sur chaque porte afin de faire un inventaire.
L’info est sauvée dans un datastore connu de tous les ESXs (plus facile pour récupérer l’info)

Prérequis :

  • un accès ROOT sur chaque ESX
  • Une connexion via SSH possible sur la console
  • Un datastore commun à tous les ESXs

La création du tableau de correspondance ESX <> mot de passe ROOT

$ESXs =@{'ESX01' ='abc123'}
$ESXs+=@{'ESX02' ='def456'}

Le script :

get-datacenter "MON DataCenter" | get-vmhost | foreach {
$esx=$_.name
$password=$ESXs.Get_Item($_.name)
$_ | Get-VirtualSwitch | select -expandproperty nic| foreach {
$vmnic=$_

$file= »C:\temp\$esx-$vmnic.sh »
‘ps | grep « pkt » | awk  »{ print $1 } » | kill’ | out-file $file -Encoding ascii
« pktcap-uw –uplink $vmnic –ethtype 0x88cc -c 1 -o /tmp/$vmnic  » | out-file $file -append -Encoding ascii
‘FEX=`hexdump -e « 500 \ »%_p\ » \ »\\n\ » » /tmp/’+$vmnic+’ | cut -b 67-77`’ | out-file $file -append -Encoding ascii
‘echo `hostname`,’+$vmnic+’,$FEX >> /vmfs/volumes/MonDatastore/vmnicInventory.csv’ | out-file $file -append -Encoding ascii
« putty.exe $esx -l root -pw $password -m C:\temp\$esx-$vmnic.sh »
putty.exe $esx -l root -pw $password -m C:\temp\$esx-$vmnic.sh | out-null
}
}

Si tout se passe bien, vous vous retrouvez avec un super fichier texte avec toutes les infos.

NB : J’affiche dans la console la ligne de commande que j’execute, car il m’est déjà arrivé de voir « putty » planter en pleine collecte. Plutôt que de tout relancer, je ne lance que la commande qui a planté.
NB2 : Je ne lance pas toutes les collectes en même temps, car il peux arriver que 2 commandes veuillent écrire en même temps et alors, ca plante. C’est plus lent, mais plus sur.

Juin 262015
 

Cela fait un moment que j’essaye de trouver le juste ?quilibre entre l’allocation de ressource et ce que les utilisateurs demandent.
Tr?s souvent, c’est TRES largement sur-?valu?. Bien sur, VMware ESXi s’en sort tr?s bien et optimise ? la vol?e, mais… j’aime pas.
J’ai donc cherch? comment mesurer les ressources r?ellement utilis?es et j’en suis arriv? ? ces conclusions:

  • VMware montre ce que les VMs utilisent REELLEMENT.
    • Si vous d?marrez un Windows et le laissez ? ne rien faire pendant des jours, VMware vous montrera une utilisation de quelques centaines de Mo, pas plus. Or, si vous regardez le Gestionnaire des taches, vous constaterez une utilisation de 2 Go… Comment Est-ce possible?
    • VMware note ce qui est r?ellement utilis?. Or, Windows ne fout rien… Donc, VMware montre qu’il n’utilise rien..
  • Windows r?serve ses ressources pour le cas o?. Typiquement, un SQL Server va manger la quasi totalit? de RAM disponible pour lui tout seul (gourmand) alors que potentiellement, il n’en utilise que quelques Mo… Gourmand !
    • Un bon DBA pourra limiter l’utilisation de la RAM par SQL Server pour ?viter qu’il ne vampirise toute la RAM.

Mais comment trouver la « v?rit? » dans ce merdier? Ben… En mesurant les 2 et en r?fl?chissant.

Les 3 sont :

  1. Utilisation r?elle (VMware side)
  2. Utilisation Windows
  3. Le croisement des deux

Allons-y :

1. Ressources sur les 5 derniers jours

(au del?, il agr?ge les donn?es, et ca ne veux plus rien dire)

Function Get-TrueUsage {
? param ($Name, $Start=((get-date).adddays(-5)), $End=(get-date))
# Usage : Get-TrueUsage -Name VM01 -Start ((get-date).addMonths(-2)) -End (get-date)

? $MyVM=Get-VM -Name $name
? $MyVMView=$MyVM | get-view

? $obj=New-Object PSObject
? $obj | add-Member Noteproperty -name Name -value $Name
? $obj | add-Member Noteproperty -name Datacenter -value $MyVM | Get-Datacenter

? $StatsESX= $MyVM | select Name, @{n="AssignedMemory";e={$_.MemoryGB*1024*1024}}, @{n="HostMemoryUsage";e={$_.ExtensionData.Summary.QuickStats.HostMemoryUsage*1024}} 
? $StatsMemGuest=? Get-Stat -Entity ($MyVM ) -Start $Start -Finish $End -Stat mem.active.average | measure -max -min -Average Value
? $StatsCpuGuest=? Get-Stat -Entity ($MyVM ) -Start $Start -Finish $End -Stat cpu.usage.average? | measure -max -min -Average Value

? $obj | add-Member -MemberType Noteproperty -name AssignedMem?? -value $StatsESX.AssignedMemory
? $obj | add-Member -MemberType Noteproperty -name HostUsedMem?? -value $StatsESX.HostMemoryUsage

? $obj | Add-Member -MemberType NoteProperty -Name CPUSocket???? -Value ($MyVMView.config.hardware.NumCPU/(@{$true=$MyVMView.config.hardware.NumCoresPerSocket;$False=1}[$MyVMView.config.hardware.NumCoresPerSocket -gt 0 ]))
? $obj | Add-Member -MemberType NoteProperty -Name Corepersocket -Value @{$true=$MyVMView.config.hardware.NumCoresPerSocket;$False=1}[$MyVMView.config.hardware.NumCoresPerSocket -gt 0 ]

? $obj | add-Member -MemberType Noteproperty -name GuestMaxMem?? -value (($StatsMemGuest.Maximum) )
? $obj | add-Member -MemberType Noteproperty -name GuestMinMem?? -value (($StatsMemGuest.Minimum) )
? $obj | add-Member -MemberType Noteproperty -name GuestAvgMem?? -value ([math]::round($StatsMemGuest.Average) )

? $obj | add-Member -MemberType Noteproperty -name MemPrivShar?? -value ($MyVM.ExtensionData.Summary.QuickStats.PrivateMemory + $MyVM.ExtensionData.Summary.QuickStats.SharedMemory)

? $obj | add-Member -MemberType Noteproperty -name GaspillageMem -value (([Math]::round((1-($StatsMemGuest.Maximum/$StatsESX.AssignedMemory)) *10000 ))/10000 )

? $obj | Add-Member -MemberType NoteProperty -Name GuestMaxCpu?? -value ([Math]::round(($StatsCpuGuest.Maximum)*100 )/10000)
? $obj | Add-Member -MemberType NoteProperty -Name GuestMinCpu?? -value ([Math]::round(($StatsCpuGuest.Minimum)*100 )/10000)
? $obj | Add-Member -MemberType NoteProperty -Name GuestAvgCpu?? -value ([math]::round(($StatsCpuGuest.Average)*100 )/10000)

? $obj | add-Member -MemberType Noteproperty -name GaspillageCpu -value ([Math]::truncate($MyVMView.config.hardware.NumCPU - ($MyVMView.config.hardware.NumCPU*($StatsCpuGuest.Maximum/100))))

## WMI
? try{
??? $WMIPageFile=Get-WmiObject Win32_PageFileUsage -ComputerName $MyVM | select Name,CurrentUsage,AllocatedBaseSize,PeakUsage,TempPageFile
? } catch {
??? $WMIPageFile=''|select Name,CurrentUsage,AllocatedBaseSize,PeakUsage,TempPageFile 
? }

? $obj | Add-Member -MemberType NoteProperty -Name SwapFile????????? -value ($WMIPageFile.Name)
? $obj | Add-Member -MemberType NoteProperty -Name SwapCurrentUsage? -value ($WMIPageFile.CurrentUsage)
? $obj | Add-Member -MemberType NoteProperty -Name SwapAllocatedSize -value ($WMIPageFile.AllocatedBaseSize)
? $obj | Add-Member -MemberType NoteProperty -Name SwapPeak????????? -value ($WMIPageFile.PeakUsage)

? # Calculs recommandations

? # Pic m?moire + 20% et ensuite par blocks rond
? $NewMem=$obj.GuestMaxMem *1.2 /1024
? switch ($true) {
??? ( $NewMem -gt 4096) {$NewMem=([Math]::Truncate($NewMem / 2048)+1)*2048;break}
??? ( $NewMem -gt 3072) {$NewMem=4096;break}
??? ( $NewMem -gt 2048) {$NewMem=3072;break}
??? ( $NewMem -gt 1024) {$NewMem=2048;break}
??? ( $NewMem -gt 512)? {$NewMem=1024;break}
??? default???????????? {$NewMem=512;break}
? }

? # Pic CPU 
? $NewCpu=[System.Math]::Round($obj.GuestMaxCpu * $obj.CPUSocket * $obj.Corepersocket ,0)
? if (($obj.CPUSocket + $obj.Corepersocket) -gt 2 -and $NewCpu -le 1 ) {$NewCpu=2}
? if ($NewCpu -le 1 ) {$NewCpu=1}

? $obj | Add-Member -MemberType NoteProperty -Name RecommendedMemory -value $NewMem
? $obj | Add-Member -MemberType NoteProperty -Name RecommendedCpu??? -value $NewCpu

? $obj
}

Le Performance Monitor

Ce truc peux sauver tout un tas de compteur de votre machine. Les ressources sont quasiment illimit?es, une vrai mine d’or.

REM Delete the counter if it allready exist.
logman STOP VMWARE_AUDIT_MEMORY
logman DELETE VMWARE_AUDIT_MEMORY 
REM Create the counter
logman CREATE counter VMWARE_AUDIT_MEMORY -f bincirc -max 500 -si 2 --v -o "C:\perflogs\VMWARE_AUDIT_MEMORY" -c "\Memory\Available MBytes"

REM We need to delete the old file as the DataCollector does not support an existing file.
del C:\perflogs\VMWARE_AUDIT_MEMORY.blg
logman START VMWARE_AUDIT_MEMORY

Le m?lange des 2

Bon, ben… J’en suis pas encore l?…

On va comparer l’utilisation r?elle VMware (get-stat), les ressources utilis?es par la VM (perfmon), la swap (wmi),…

 

Fév 082015
 

Comme certains l’ignorent peut ?tre, mais les performances sont fortement impact?es en cas de snapshot. Lorsque l’hyperviseur doit rechercher le contenu d’un secteur disque, il va voir dans le? snapshot courant s’il le trouve. S’il ne le trouve pas, alors, il va voir dans le snapshot pr?c?dent, et ainsi de suite jusqu’? revenir au fichier VMDK original? (s’il doit revenir jusque l?, sinon, il s’arr?te d?s qu’il a trouv? ce qu’il cherche.. Ca peux se traduire par un volume de donn?e fort important pour pas grand chose…

Capture

Voici un exemple sous VMware Workstation d’un exemple de copie de fichiers Dans ce cas pr?cis, les donn?es sont sur le snapshot, peu d’impact sur le VMDK original except? les binaires pour la copie elle-m?me et des infos de l’OS sur les secteurs libres… Par contre, si je copie un fichier qui n’?tait pas dans le snapshot, l’impact est diff?rent:

Capture2

Bref… Evitez les snapshot autant que possible.. Et surtout, les snapshot en cascade a chaque click (Hein Olivier 😉 ) Le Olivier en question avait une VM sur disque USB3 avec des performances catastrophiques. Effectivement, une bonne dizaine de snapshot, ca impacte FORTEMENT. (Je ne vous raconte pas les temps de consolidation qui a ?t? n?cessaire) A+ les jeunes !

Juil 162014
 

La m?thode longue consiste ? se connecter sur chaque VM, et a executer ce qui suit :

First thing is to log onto the virtual machine and open up msinfo32 via the run prompt (start > run > msinfo32).
Expand ?Software Environment? and then ?System Drivers?
Within this list you?re looking for vsepflt as shown below:

La m?thode automatis?e :
Pensez ? d?sactiver votre proxy de Internet Explorer (oui, je sais, c’est ?trange, et je n’ai ni le temps, ni l’envie de rentrer dans les d?tails)

$credentials=Get-Credential
$VMStatus=Get-VM | Where-Object { $_.PowerState -eq "PoweredOn" -and $_.Guest.OSFullName -match "WinDows" } | ForEach-Object {
$obj=New-Object PSObject
$obj | add-Member Noteproperty -name Name -value $_.name
#? $obj | add-Member Noteproperty -name vShield -value? (Invoke-VMScript -VM $_.name -ScriptType Bat -ScriptText 'driverquery | find /i "vsepflt"' -GuestCredential $credentials -ErrorAction Continue | Select-Object -ExpandProperty ScriptOutput)
$obj | add-Member Noteproperty -name ToolsVersion -value $_.ToolsVersion
$obj | add-Member Noteproperty -name ToolsVersionStatus -value $_.ToolsVersionStatus
$obj | add-Member Noteproperty -name SnapShotCount -value ($_ | Get-Snapshot | Measure-Object | select -ExpandProperty Count )
$obj | add-Member Noteproperty -name SnapShotInfo -value ($_ | Get-Snapshot | select VM,Created, SizeGB, IsCurrent, Name |Out-String )
$obj
}
$VMStatus | out-gridview

Si vous avez le m?me bug que moi, cad, que le re-enregistrement des adresses IP dans le DNS echoue et que le DNS se retrouve vide : http://support.microsoft.com/default.aspx?scid=kb;EN-US;2520155
Pour mettre a jour de maniere pseudo-automatis?e le parc

$credentials=Get-Credential

Get-VM | Where-Object { $_.PowerState -eq « PoweredOn » -and $_.Guest.OSFullName -match « WinDows » -and ($_ | get-snapshot | Measure-Object | select -ExpandProperty Count ) -eq 0 } | foreach {
Get-VM -name svMGTTST01 | foreach {
# ping to check if VM is pinguable
if (Test-Connection $_.name -ErrorAction SilentlyContinue ) { write-host « Ping to $_ : OK » -foregroundcolor green } else { write-host « Ping to $_ : Failed » -foregroundcolor red }
# Take snapshot
New-Snapshot -vm $_.name -Name « Avant VMWare Tools et vShield » -Description « VM avant execution du script automatique » -Memory:$true -Quiesce:$true -Confirm:$false
# Update tools
$_ | Get-View | foreach { $_.Guest.ToolsVersion }
$_ | Mount-Tools
# Copy BAT file
$DestinationFIle= »\\ »+(($_|get-view).Guest.HostName)+ »\c$\UpdateVMwareToolsManually.cmd »
Copy-Item -Path ‘C:\Users\Moi\Desktop\Scripts\VMwareTOols\UpdateVMwareToolsManually.cmd’ -Destination $DestinationFile
Invoke-VMScript -VM $_.name -ScriptType Bat -ScriptText ‘C:\UpdateVMwareToolsManually.cmd’ -GuestCredential $credentials | Select-Object ScriptOutput
Remove-Item $DestinationFile

# unmount
$_ | Wait-Tools

if ( (get-vm svMGTTST01 | Get-CDDrive ).isoPath.Equals(« [] /usr/lib/vmware/isoimages/windows.iso ») -eq $true ) { write-host « CD still mounted. Problem detected » -foregroundcolor red }

# Not necessary. Correct update unmount CDROM.
# $_ | Dismount-Tools

$_ | Get-View | foreach { $_.Guest.ToolsVersion }

# ping to check if VM is still pinguable
if (Test-Connection $_.name -ErrorAction SilentlyContinue ) { write-host « Ping to $_ : OK » -foregroundcolor green } else { write-host « Ping to $_ : Failed » -foregroundcolor red }

# delete snapshot
$_ | Get-Snapshot -Name « Avant VMWare Tools et vShield » | Remove-Snapshot -Confirm:$true
}

Et le script ? envoyer sur chaque VM:

SETLOCAL ENABLEDELAYEDEXPANSION

REM Usage : perform VMWareTools Assisted update and DNS registration
REM http://support.microsoft.com/default.aspx?scid=kb;EN-US;2520155
(
date /t
time /t

set DriveLetter=unknown
for %%a in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ) do? ( if exist %%a:\VMwareToolsUpgrader.exe if exist %%a:\certified.txt set DriveLetter=%%a)
echo DriveLetter : !DriveLetter!

REM check current version of vShield
driverquery | find /i « vsepflt »

!DriveLetter!:\Setup.exe /S /v « /qn REBOOT=R ADDLOCAL=ALL REMOVE=Hgfs »
ipconfig /registerdns

REM check new version of vShield
driverquery | find /i « vsepflt »

date /t
time /t
) >> C:\UpdateVMwareToolsManually.log 2>&1

Jan 272014
 

Se connecter ? tous les vCenters (si on en a plusieurs)

Connect-VIServer VC.dev
Connect-VIServer VC.acc

Sortir la liste de toutes les HBA (Fibre Channel)

Get-VMhost | Get-VMHostHBA -Type FibreChannel | Select VMHost,Device,@{N="WWN";E={"{0:X}"-f$_.PortWorldWideName}} | Sort VMhost,Device | Out-GridView

Sortir la liste de tous les identifiants BIOS (UUID) de chaque serveur

(Get-VMHost |? get-view) | select name,@{label='UUID';expression={$_.hardware.systeminfo.uuid}} | out-gridview

Sortir la liste des HOSTS, le num?ro de s?rie du chassis, l’IP de leur vCenter et l’UUID.

(Get-VMHost | get-view) | select name,
 @{label='Chassis Serial Number';expression={($_).summary.Hardware.OtherIdentifyingInfo[-1].IdentifierValue}},
@{label='vCenter IP';expression={$_.summary.ManagementServerIp}},
@{label='UUID';expression={$_.summary.hardware.uuid}} | out-gridview

xx

.summary.ManagementServerIp