Si comme moi vous avez des appliances ZIA Virtual Service Edges à déployer sur des clusters VMware, vous aurez peut être un paramètre bien particulier à configurer pour éviter de recevoir les paquets réseau en double lorsque vous avez plusieurs interfaces physique sur votre vSwitch mais pas de LCAP pour le teaming.

Cette problématique est décrite dans la kb : Duplicate Multicast or Broadcast Packets are Received by a Virtual Machine When the Interface is Operating in Promiscuous Mode (59235) (vmware.com)

et dans la doc zscaler : Zscaler Help

Pour configurer la valeur

Get-VMHost votrenomESXici | Set-VMHostAdvancedConfiguration -Name "Net.ReversePathFwdCheckPromisc" -Value 1

Pour vérifier la valeur

Get-VMHost votrenomESXici | Get-VMHostAdvancedConfiguration -Name "Net.ReversePathFwdCheckPromisc"

Pour faire la modification sur tout un cluster par exemple

Get-Cluster votrenomCluster | Get-VMHost |Get-VMHostAdvancedConfiguration -Name "Net.ReversePathFwdCheckPromisc"

Voici une partie du script que j’utilise pour exporter mes informations d’hôtes à notre CMDB, l’intérêt principale de celui-ci est l’utilisation de “Get-View” et donc sa rapidité d’exécution.

$vCenter = Read-Host "Entrer ici le nom ou l'ip du vCenter"
Connect-VIServer $vCenter

#Creation du dossier pour l'export
md "C:\Scripts" -ErrorAction SilentlyContinue

#Inventaire Hosts
Get-View -ViewType HostSystem -Property Name, Config.Product, Summary.Hardware.Model, Summary.Hardware.MemorySize, Summary.Hardware.CpuModel, Summary.Hardware.NumCpuPkgs, Summary.Hardware.NumCpuCores, Summary, Hardware, Parent |

select Name,

    @{N='Product';E={$_.Config.Product.FullName}},

    @{N='Build';E={$_.Config.Product.Build}},
	
	@{N='Model';E={$_.Summary.Hardware.Model}},
	
	@{N='Memory';E={[Math]::Round(($_.Summary.Hardware.MemorySize)/ 1GB, 0)}},
	
	@{N='CpuModel';E={$_.Summary.Hardware.CpuModel}},
	
	@{N='CpuSocket';E={$_.Summary.Hardware.NumCPuPkgs}},
	
	@{N='CpuCore';E={$_.Summary.Hardware.NumCpuCores}},
	
	@{Name="Serial"; Expression={($_.Hardware.SystemInfo.OtherIdentifyingInfo | where {$_.IdentifierType.Key -eq "ServiceTag"}).IdentifierValue}},
	
	@{N='Cluster';E={
				
		$parent = Get-View -Id $_.Parent -Property Name,Parent
		While ($parent -isnot [VMware.Vim.ClusterComputeResource] -and $parent.Parent){
		$parent = Get-View -Id $parent.Parent -Property Name,Parent	}
		if($parent -is [VMware.Vim.ClusterComputeResource]){
		$parent.Name}}}, 
	   		
	@{N='DC';E={	  	  
		$parent = Get-View -Id $_.Parent -Property Name,Parent
		Do {$parent = Get-View -Id $parent.Parent -Property Name,Parent}
                While ($parent.Moref.Type -ne "Datacenter" -and $parent.Parent)
	        echo $parent.name}}	|
			
	Export-csv -NoTypeInformation -encoding "unicode" -append "C:\Scripts\export-Hotes.csv"

Voici le résultat dans Excel :

Dernière version de mon script powercli d’inventaire de VMs avec plusieurs optimisations récupérées sur le forum VMware principalement :

$vCenter = Read-Host "Entrer ici le nom ou l'ip du vCenter"
Connect-VIServer $vCenter

#Creation du dossier pour l'export
md "C:\Scripts" -ErrorAction SilentlyContinue

#Inventaire VMs 
Get-View -ViewType VirtualMachine -Property  Name, Guest, Parent, Summary, Config, Runtime |

select Name,

    @{N='VMHostname';E={$_.Guest.Hostname}},
	#set variable parent puis remmonte d'un cran avec $parent.parent tant que le moref n'est pas datacenter
	@{N='Datacenter';E={
	$parent = Get-View -Id $_.Parent -Property Name,Parent
		Do {$parent = Get-View -Id $parent.Parent -Property Name,Parent }
		while ($parent.MoRef.Type -ne "DataCenter" -and $parent), $parent.name}},
	@{N='PowerState';E={$_.Summary.Runtime.PowerState}},
	@{N='OS';E={$_.Config.GuestFullName}},
	#Ancienne affichage IP
	#@{N='IP';E={$_.Guest.IPAddress}}
	#avantage de Net.IPAddress donne toutes les IPs | where -filtertype {$_ est inférieur à 'a')
	#affichage IPV4 seulement (en mode call de methode where)
	@{N='IP';E={$_.Guest.Net.IPAddress.where{$_ -notlike "*fe80*"}}},
	@{N='MacAddress';E={$_.Guest.Net.MacAddress}},
	@{N='NetworkName';E={$_.Guest.Net.Network}},
	@{N='VMToolsStatus';E={$_.Guest.ToolsStatus}},
	# use UpdateViewData() to populate the linked view, then access said linked view
	@{N='Cluster';E={$_.UpdateViewData("Runtime.host.parent.name"), $_.Runtime.LinkedView.Host.LinkedView.Parent.Name}},
	@{N='vCPU';E={$_.Summary.Config.NumCpu}},
	@{N='vRAM';E={$_.Summary.Config.MemorySizeMB}},
	#le premier split prend la premiere expression, le deuxieme retire les crochets, le [1] selectionne la premiere valeur car c'est un tableau
	@{N='Datastore';E={$_.Summary.Config.VmPathName.Split()[0].split("[]")[1]}},
	#formule mathematique [math]::round(valeur entre parentheses) puis division ou autre c'est bien de mettre 1GB il fait directement 1024 puis le chiffre après la virgule correspond au nombre de decimal
	@{N='DiskGB';E={[Math]::Round((($_.Guest.Disk | Measure-Object -Property Capacity -Sum).Sum / 1GB),0)}},
	@{N='DiskFree';E={[Math]::Round((($_.Guest.Disk | Measure-Object -Property FreeSpace -Sum).Sum / 1GB),0)}} |
	
		Export-csv -NoTypeInformation -encoding "unicode" -append "C:\Scripts\export-VMs.csv"

Voici le résultat dans Excel:

Depuis la migration de l’infrastructure VMware en 6.5, nous avions un comportement différent de la 5.5 avec un prompt des credentials utilisateurs en powercli, malgré l’utilisation d’un compte disposant des droits et n’ayant aucun souci pour se connecter au WebClient.

Le premier message d’erreur est un classique : “Could not determine user name and/or password for server”. Puis, avec un argument verbose on obtient : “Connect using SSPI was unsuccessful”.

Plusieurs cas similaires sont référencés sur le forum VMware mais aucune des solutions proposées ne réglaient notre cas. La meilleure solution consistait en un workaround décrit par LucD. Need assistance with creating and then using stored credentials.

Par contre, le post d’aaronwsmith sur le sujet logon sessions in powercli for vsphere appliance 6.5 m’a bien aiguillé.

Dans une configuration avec PSC Externe, même l’appliance VCSA doit être jointe au domaine et comme il l’indique, l’option n’est pas forcement disponible depuis le WebClient.

Pour ma part, les comptes ordinateurs étaient bien présent dans notre AD, mais en exécutant la commande “/opt/likewise/bin/domainjoin-cli query”  le retour ne faisait pas apparaitre le chemin complet avec l’OU qui était censée héberger le compte machine.

Impossible de joindre la machine au domaine. Le compte ordinateur est encore présent dans l’AD et, j’obtiens une erreur LW_ERROR_LDAP_INSUFFICIENT_ACCESS (code 0x00009d8b]

Impossible également de supprimer le compte ordinateur avec la commande “/opt/likewise/bin/domainjoin-cli leave“, malgré le succès de l’opération.

Il faut donc supprimer directement le compte ordinateur depuis l’AD, attendre quelques instants que la réplication se propage, puis exécuter la ligne de commande pour l’ajouter.

/opt/likewise/bin/domainjoin-cli join domain.com Domain_Administrator Password

Voici la syntaxe que j’utilise pour ajouter directement dans la bonne OU :

/opt/likewise/bin/domainjoin-cli join –ou “CHEMIN/OU”domain.com” “CompteAutorisé@domain.com” “Password‘”

Si tout se passe bien, vous devriez avoir un succès, et le compte ordinateur devrait être visible dans l’OU de destination.

Sur nos infrastructures, il faut bien attendre 30 secondes pour que la commande fonctionne.

Ci-dessous le “avant/ après”. L’authentification est de nouveau transparente.

Surement le dernier post avant la fin de l’année 2017, un dernier petit one-liner powercli.

Nous avions besoin de refaire une passe sur les noms de machines virtuelles pour l’outil de sauvegarde et voici comment renommer toutes celles avec des minuscules en majuscules :

get-vm | where {$_.Name -cmatch "[a-z]"} | %{Set-vm -VM $_.name -Name $_.name.ToUpper() -Confirm:$false}