PowerShell est un outil en ligne de commande dorénavant intégré à tous les environnements Windows.
Cet outil est extrêmement puissant, et avec le vent en poupe, puisqu’il permet de simplifier l’exécution et l’automatisation des tâches de configuration et d’administration.

Dans mon travail d’Administrateur de bases de données, j’effectue de nombreux Audits d’environnements afin de vérifier, par exemple, si les bonnes pratiques sont bien appliquées.
C’est pourquoi j’ai été très vite confronté à PowerShell, afin de regrouper et synthétiser la récolte d’informations sous la forme de fonction.

A travers ce blog, je vais vous montrer comment automatiser la configuration de Bonnes Pratiques pour Windows Server.

Option d’alimentation (Power Options)

Cette option est par défaut fixée à “Balanced”. Toutefois, pour un serveur de production, nous voulons des performances maximales en tout temps. Ainsi, une valeur fixée à “High Performance” sera beaucoup plus pertinente. Afin de récupérer ou modifier la valeur de cette option, nous allons passer par les instances CIM.

Voici comment récupérer la valeur en cours sur votre serveur:

$PowerPlan = (Get-CimInstance Win32_PowerPlan -Namespace rootcimv2power | where {$_.Isactive}).ElementName;

 

Et voici comment modifier cette valeur à “High Performance”:

$PowerPlan = Get-CimInstance Win32_PowerPlan -Namespace rootcimv2power | where {$_.ElementName -eq 'High Performance'}";

Invoke-CimMethod $PowerPlan -MethodName Activate | Out-Null;

 

 Performance d’applications (Processor Scheduling)

Cette option est par défaut fixé à “Background Services” pour un Windows Server. Sur un serveur, nous voulons bien-entendu favoriser les services aux applications. Ainsi la valeur par défaut est celle que nous souhaitons. Afin de récupérer ou modifier la valeur de cette option, nous allons passer cette fois-ci par le registre.

Voici comment récupérer la valeur en cours sur votre serveur:

$path = 'HKLM:SYSTEMCurrentControlSetControlPriorityControl';
If ((Test-Path $path) -and ((Get-Item $Path).GetValue('Win32PrioritySeparation', $null) -ne $null)){
	$ProcessorScheduling = (Get-ItemProperty -Name Win32PrioritySeparation -Path $path).Win32PrioritySeparation
}	

switch ($ProcessorScheduling){
	24 {$ProcessorScheduling = 'Background services'}
	38 {$ProcessorScheduling = 'Programs'}
	default {$ProcessorScheduling = 'Background services'}
}

 

Et voici comment modifier cette valeur à “Background services”:

$path = 'HKLM:SYSTEMCurrentControlSetControlPriorityControl';
If ((Test-Path $path) -and ((Get-Item $Path).GetValue('Win32PrioritySeparation', $null) -ne $null)){
	Set-ItemProperty -Name Win32PrioritySeparation -Path $path -Value 24 | Out-Null;
}
else{
	New-ItemProperty -Name Win32PrioritySeparation -Path $path -Value 24 -PropertyType 'DWORD' | Out-Null;
}

 

Effets Visuels (Visual Effects)

Cette option est gérée par Windows par défaut. Toutefois il est recommandé pour un serveur de modifier cette valeur à “Best Performance”, ce qui va désactiver tous les petits effets appliquer par Windows afin d’améliorer l’affichage. A noter que c’est une configuration d’utilisateur, ce qui signifie que la modification ne sera appliquée que pour l’utilisateur courant. Si vous désirez modifier cette valeur pour tous les utilisateurs, il faut pour cela créer une Policy.

Afin de récupérer ou modifier cette valeur, nous allons de nouveau passer par le registre. Toutefois comme c’est une configuration d’utilisateur, le chemin commence par HKCU au lieu de HKLM.

Voici comment récupérer la valeur en cours (pour l’utilisateur courant) sur votre serveur:

$path = 'HKCU:SoftwareMicrosoftWindowsCurrentVersionExplorerVisualEffects';
If ((Test-Path $path) -and ((Get-Item $Path).GetValue('visualfxsetting', $null) -ne $null)){
	$VisualEffects = (Get-ItemProperty -Name visualfxsetting -Path $path).visualfxsetting
}	

switch ($VisualEffects){
	1 {$VisualEffects = 'Best Apperance'}
	2 {$VisualEffects = 'Best Performance'}
	3 {$VisualEffects = 'Custom'}
	default {$VisualEffects = 'Default'}
}

 

Et voici comment modifier cette valeur à “Best performance”:

$path = 'HKCU:SoftwareMicrosoftWindowsCurrentVersionExplorerVisualEffects';
If ((Test-Path $path) -and ((Get-Item $Path).GetValue('visualfxsetting', $null) -ne $null)){
	Set-ItemProperty -Name visualfxsetting -Path $path -Value 2 | Out-Null;
}
else{
	New-ItemProperty -Name visualfxsetting -Path $path -Value 2 -PropertyType 'DWORD' | Out-Null;
}

Conclusion

Comme vous avez pu le constater, PowerShell vous permet de configurer rapidement et facilement votre serveur. Je vous conseille vivement de vous constituer un script de configuration de Windows Server que vous exécutez à chaque nouvelle installation.

Une manière rapide et pédagogique de vous constituer ce type de script est d’assister à notre évènement Windows Server 2016 dans lequel je vous montre comment configurer votre serveur avec PowerShell:

Date: le 12 avril 2016
Lieu: Lausanne, Hotel Mövenpick

Inscrivez-vous jusqu’au 29 mars 2016 ==>hyperlien sur page web suivante: https://www.dbi-services.com/fr/non-classe-fr/event-windows-server-2016/