Eu resolvi o problema com este código (testado no Windows 7 64bits)
# definition de la fonction native Windows permettant le test d'activation d'Aero
$def = @"
[DllImport("dwmapi.dll", PreserveSig = false)]
public static extern bool DwmIsCompositionEnabled();
"@
# chargement de la fonction native dans un namespace personnel
Add-Type -Namespace MaifCode -Name Aero -MemberDefinition $def
# fonction qui check si Aero est desactive ou non
function Check-Is-Aero{
[CmdletBinding()]
param()
Write-Verbose "[$([DateTime]::Now)] ==> Test de la presence du mode Aero pour la session utilisateur $env:USERNAME"
if([MaifCode.Aero]::DwmIsCompositionEnabled()){
Write-Verbose "[$([DateTime]::Now)] ==> Aero actif pour la session utilisateur $env:USERNAME"
return $true
}else{
Write-Verbose "[$([DateTime]::Now)] ==> Aero inactif pour la session utilisateur $env:USERNAME"
return $false
}
}
# fonction qui test si Aero est actif et le desactive dans ce cas
function Disable-Aero{
[CmdletBinding()]
param()
# test si aero actif
If(Check-Is-Aero) {
Write-Verbose "[$([DateTime]::Now)] ==> Tentative de desactivation du mode Aero pour la session utilisateur $env:USERNAME"
# desactivation du mode aero en passant sur le them par defaut
try{
Start-Process -Wait -FilePath "rundll32.exe" -ArgumentList "$env:SystemRoot\system32\shell32.dll,Control_RunDLL $env:SystemRoot\system32\desk.cpl desk,@Themes /Action:OpenTheme /file:""C:\Windows\Resources\Ease of Access Themes\basic.theme"""
}
catch [exception]
{
# si erreur alors on sort et on affiche le message d'erreur
Write-Error "Erreur dans l'execution de la desactivation du mode Aero : $error"
exit -1
}
Write-Verbose "[$([DateTime]::Now)] ==> Desactivation du mode Aero pour la session utilisateur $env:USERNAME terminee"
}else{
Write-Verbose "[$([DateTime]::Now)] ==> sortie du script sans action"
}
}
# execution du code de desactivation
Disable-Aero -Verbose
# on sort
exit 0