AntoineBrtt
Contributor
Contributor

Récupérer la version ESXi ainsi que les baselines disponibles (PowerCLI)

Bonjour,

Mon but est d'obtenir la version actuelle d'ESXs et d'afficher lorsque des mises à jours (patch baselines) sont disponibles.

J'ai essayé d'envoyer une requête à la méthode "ESX Get Software"  en utilisant ce bout de code powershell :

 

$vCenter = (Get-Content "auth.txt")[0] #environnement de test
$username = (Get-Content "auth.txt")[1]
$password = (Get-Content "auth.txt")[2]

$usernameesx = (Get-Content "auth.txt")[1]
$passwordesx = (Get-Content "auth.txt")[2]

$credential = New-Object System.Management.Automation.PsCredential($username,($password | ConvertTo-SecureString -AsPlainText -Force))  

$auth = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($credential.UserName+':'+$credential.GetNetworkCredential().Password))  
$head = @{  
  Authorization = "Basic $auth"  
}  

#Disable certs
add-type @"
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    public class TrustAllCertsPolicy : ICertificatePolicy {
        public bool CheckValidationResult(
            ServicePoint srvPoint, X509Certificate certificate,
            WebRequest request, int certificateProblem) {
            return true;
        }
    }
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy

$a = Invoke-WebRequest -Uri "https://$vCenter/rest/com/vmware/cis/session" -Method Post -Headers $head -UseBasicParsing
$token = ConvertFrom-Json $a.Content | Select-Object -ExpandProperty Value  
$session = @{'vmware-api-session-id' = $token}  

$vamiHostAPI = Invoke-WebRequest -Uri "https://$vCenter/api/vcenter/host" -Method Get -Headers $session -UseBasicParsing
$vamiHostList = ConvertFrom-Json $vamiHostAPI.Content

$HostNbr = 3
$HostSystem = @{
    'name' = $vamiHostList[$HostNbr].name
    'host' = $vamiHostList[$HostNbr].host
    'connection_state' = $vamiHostList[$HostNbr].connection_state
    'power_state' = $vamiHostList[$HostNbr].power_state
}

$Body = '{
    auth_type: "EXISTING",
    host: "$($HostSystem.host)"
}'

$Params = @{
	'Method' = "Get"
	'Uri' = "https://$vCenter/api/esx/software"
	'Body' = $Body
    'Headers' = $session
}
$vamiUpdateAPiUrl = Invoke-WebRequest @Params

 

 Je m'y prend peut-être mal puisque j’obtiens une erreur (400) Demande incorrecte sans plus de précision. Mais je n'ai pas l'impression de m'y prendre mal.

Du coup, je me suis penché vers l'API PowerCLI, j'ai installé la dernière version et utilisé ce bout de code basé sur les exemples fournis par VMware :

 

$HostsSoftwareHostCredentials = Initialize-HostsSoftwareHostCredentials -HostName $($HostSystem.host) -UserName $usernameesx -Password $passwordesx
Set-PowerCLIConfiguration -InvalidCertificateAction ignore
Connect-VIServer -Server $vCenter -User $username -Password $password
Invoke-GetSoftware -AuthType EXISTING -Host $($HostSystem.host)

 

Et j'obtiens cette étrange erreur :

 

Invoke-vSphereApiClient : InvocationException: [INVALID_ARGUMENT]
Unsupported property with name: auth_type.
 ---> System.Net.WebException: Le serveur distant a retourné une erreur : (400) Demande incorrecte.
   à Microsoft.PowerShell.Commands.WebRequestPSCmdlet.GetResponse(WebRequest request)
   à Microsoft.PowerShell.Commands.WebRequestPSCmdlet.ProcessRecord()
   --- Fin de la trace de la pile d'exception interne ---
Au caractère C:\Program Files\WindowsPowerShell\Modules\VMware.Sdk.vSphere.Esx.Hosts\1.0.104.18678708\Api\SoftwareApi.ps1:257 : 33
+                 $invokeResult = Invoke-vSphereApiClient @invokeParams
+                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Invoke-vSphereApiClient

 

Ne soyez pas étonné par la version, j'obtenais la même erreur avec la toute dernière version alors j'ai rollback tous les modules vers une version de 2021, et ça n'a rien changé.

Reply
0 Kudos