Mise à niveau vers PowerShell 5 : Étapes faciles et scripts

Si vous décidez d’installer PowerShell 5.1, j’ai créé un guide technique avec quelques scripts pour automatiser ce processus pour vous. Avertissement : Tout le code mentionné dans ce message est tel quel. Certains peuvent fonctionner, d’autres peuvent ne pas fonctionner dans votre environnement, mais si vous n’avez rien pour commencer, il servira de modèle pour vous.

Si vous avez besoin d’aide pour trouver la version de PowerShell que vous utilisez, je recommande de consulter Comment vérifier votre version de PowerShell (toutes les méthodes !).

Étape n°1 : Découverte

La première étape pour effectuer une mise à niveau PowerShell à l’échelle de l’entreprise est la découverte. À quoi ressemble actuellement le paysage ? Vous ne pouvez pas changer quelque chose sans d’abord le comprendre, et étonnamment, de nombreuses organisations n’ont aucune idée de ce qu’elles possèdent !

Systèmes d’exploitation existants

La première tâche consiste à comprendre quels systèmes d’exploitation vous avez actuellement et où vous souhaitez passer à PowerShell 5.1. Bien que, sur certains systèmes, vous ayez peut-être déjà décidé d’installer PowerShell 5.1 sans le savoir. PowerShell 5.1 a été publié en tant qu’outil groupé dans la mise à jour anniversaire de Windows 10 et dans la version RTM de Windows Server 2016, donc si vous avez l’un de ces systèmes d’exploitation ou plus récent, vous êtes déjà prêt à partir.

Pour les autres, assurez-vous de rassembler une liste. Vous n’avez pas d’outil de gestion système comme SCCM ? Pas de problème ! Utilisez PowerShell pour aider PowerShell ! Si vous avez Active Directory, voici une commande rapide pour avoir une vue d’ensemble de ce qui est disponible.

PS> Get-ADComputer -Filter "OperatingSystem -like 'Windows*'" -Properties OperatingSystem | group operatingsystem | sort name
Count Name                      Group
----- ----                      -----
922 Windows 10 Enterprise     XXXXXXXXXXXXXXXXXX
714 Windows 7 Enterprise      XXXXXXXXXXXXXXXXXX
23 Windows 7 Professional     XXXXXXXXXXXXXXXXXX
4 Windows 7 Ultimate          XXXXXXXXXXXXXXXXXX
2 Windows 8 Consumer Pre...   XXXXXXXXXXXXXXXXXX
1 Windows 8 Enterprise        XXXXXXXXXXXXXXXXXX

Quel est l’aspect de votre environnement ? Avez-vous des anciennes machines Windows XP ou Server 2003 ? Si c’est le cas, vous êtes dans une impasse. Le mieux que vous puissiez faire là-bas est PowerShell v2, mais si vous avez encore certaines de ces machines dans votre environnement, PowerShell est le moindre de vos soucis ! Pour tout système d’exploitation disposant de Windows 7 SP1/Windows Server 2008R2 SP1 ou version ultérieure, PowerShell 5.1 peut être installé.

Construction d’une liste de cibles préalables

Sur les systèmes d’exploitation concernés, PowerShell 5.1 a quelques prérequis et exigences à remplir avant de fonctionner.

  • Au moins .NET Framework 4.5.2 doit être installé. Ce n’est pas une exigence d’installation, et l’installation se poursuivra néanmoins, mais certaines fonctionnalités ne fonctionneront pas, alors faites-le déjà !
  • La version d’aperçu de PowerShell 5.1 ne doit pas être installée
  • Sur les machines Windows 7 ou Server 2008R2 avec PowerShell v3 installé, vous devez soit sauvegarder la valeur de PSModulePath, soit d’abord passer à v4.
  • Sur les machines Windows 7 ou Server 2008R2, si vous utilisez DSC, assurez-vous d’activer WinRM.
  • L’installation nécessitera un redémarrage, alors assurez-vous de planifier cela.

Parce que je suis paresseux et que j’ai l’intention que vous le soyez aussi, voici un petit script que j’ai concocté pour vous aider à comprendre le genre de travail préalable qui vous attend. Pour l’exigence WinRM, vous pourriez inclure le code de ce script à moi aussi car vous touchez chaque machine. Cependant, sachez que cette approche nécessite que chaque ordinateur ait l’Accès à distance PowerShell activé.

## Cela pourrait être Active Directory, un fichier texte, une base de données SQL, peu importe$computers = Get-AdComputer -Filter *foreach ($c in $computers.Name) {	try {		$session = New-PSSession -ComputerName $c		$icmParams = @{			Session = $session		}		$output = @{        	ComputerName = $c		}    	## Au cas où ils exécutent PowerShell v3		$icmParams.ScriptBlock = { $env:PSModulePath; [Environment]::GetEnvironmentVariable("PSModulePath", "Machine") }		$output.PSModulePath = (Invoke-Command @icmParams) -split ';' | Select-Object -Unique | Sort-Object    	## Récupérer la version existante    	$icmParams.ScriptBlock = { $PSVersionTable.BuildVersion.ToString() }    	$output.PSModulePath = Invoke-Command @icmParams		## Vérifier .NET Framework 4.5.2		if (Get-ChildItem -Path "\$c\c$\windows\Microsoft.NET\Framework" -Directory | Where-Object {$_.Name -match '^v4.5.2.*' }) {			$output.DotNetGood = $true		} else {			$output.DotNetGood = $false		}		[pscustomobject]$output	} catch {	} finally {		Remove-PSSession -Session $session -ErrorAction Ignore	}

Assurez-vous que les scripts existants s’exécuteront avec PowerShell 5.1

Même si des membres de l’équipe PowerShell eux-mêmes m’ont dit que tous les scripts devraient fonctionner avec PowerShell 5.1, ce n’est pas toujours le cas. Pour tout code qui exécute des processus métier critiques, je recommande toujours d’installer la version 5.1 sur le même système d’exploitation d’une autre machine et de faire tous les tests de cette manière juste pour être sûr.

Étape #2 : Déploiement

Une fois que vous avez passé toutes les étapes préalables et que vous êtes prêt à commencer le déploiement de PowerShell 5.1, la prochaine étape est de le faire ! Le déploiement de la version 5.1 est similaire aux déploiements de logiciels. La façon dont vous procédez dépend des outils que vous avez déjà. Par exemple, si vous disposez de l’Active Directory et que vous souhaitez utiliser des GPO, vous pouvez choisir cette voie, SCCM fonctionnerait de la même manière. J’essaie d’être agnostique vis-à-vis des produits ici, voici donc comment je le ferais avec PowerShell bien sûr !

Tout d’abord, je vais créer un dossier sur ma machine locale appelé C:\PowerShellDeployment. Ensuite, je vais télécharger la ou les versions appropriées dont j’ai besoin dans ce dossier et prendre une copie de psexec tant que j’y suis. Ensuite, puisque PowerShell ne peut pas se mettre à niveau lui-même, nous devons revenir au bon vieux VBScript. Voici un petit script que j’ai créé il y a longtemps qui vous aidera à démarrer. Je vais le sauvegarder sous C:\PowerShellDeployment\installPs.vbs.

Set oShell = WScript.CreateObject("WScript.Shell")
Set oFso = CreateObject("Scripting.FileSystemObject")
strWorkingDir = oFso.GetParentFolderName(wscript.ScriptFullName)

'Change this to whatever file name it is
psInstallerPath = strWorkingDir & "\Windows6.1-KB2819745-x86-MultiPkg.msu"
Set swbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set swbemServices = swbemLocator.ConnectServer(".", "Root\CIMV2")
if oFSO.GetFileVersion("c:\windows\system32\windowsPowerShell\v1.0\PowerShell.exe") = "6.0.6002.18111"
then
	Set colArchs = swbemServices.ExecQuery("SELECT SystemType FROM Win32_ComputerSystem",,48)
	For Each objArch in colArchs
    	if
        	InStr(objArch.SystemType,"x64-based PC") > 0
        Then
        	oShell.Run "wusa.exe " & psInstallerPath & " /quiet /norestart",0,True
		Else
        	Wscript.Quit(10)
		End If
	Next
End if

Une fois que vous avez enregistré le VBS sur votre machine locale, créez un script PowerShell comme celui-ci et conservez-le quelque part.

## Encore une fois, cela ne doit pas être AD$computers = Get-AdComputer -Filter *foreach ($Computer in $Computers) {    if (Test-Connection -Computername $Computer -Quiet -Count 1) {        $folderPath = 'C:\PowerShellDeployment'        Copy-Item -Path $folderPath -Destination "\$Computer\c$"        psexec \$Computer cscript "$folderPath\installPs.vbs"        Remove-Item "\$Computer\c$\PowerShellDeployment" -Recurse -Force        Restart-Computer -Computername $Computer -Force}

Exécutez le script ci-dessus, et il devrait vérifier si l’ordinateur est en ligne, copier l’installateur PowerShell et le VBS sur l’ordinateur distant, l’exécuter, nettoyer après lui-même et redémarrer l’ordinateur. Comme toujours, planifiez ceci dans une fenêtre de maintenance ! L’installation de PowerShell nécessite un redémarrage, et cela le fera simplement sans aucun remords.

Source:
https://adamtheautomator.com/install-powershell-5/