Aggiornare a PowerShell 5: Passaggi Facili e Script

Se decidi di installare PowerShell 5.1, ho creato una guida tecnica con alcuni script per automatizzare questo processo per te. Avvertenza: Tutti i codici menzionati in questo post sono forniti così come sono. Alcuni potrebbero funzionare, altri potrebbero non funzionare nel tuo ambiente ma, se non hai nulla con cui iniziare, ti servirà come modello da seguire.

Se hai bisogno di aiuto per individuare quale versione di PowerShell stai utilizzando, ti consiglio di dare un’occhiata a Come Controllare la Tua Versione di PowerShell (Tutti i Modi!).

Passo #1: Scoperta

Il primo passo per eseguire un aggiornamento di PowerShell su larga scala è la scoperta. Com’è attualmente configurato il panorama? Non puoi cambiare qualcosa senza prima comprenderla, e sorprendentemente, molte organizzazioni non hanno idea di ciò che possiedono!

Sistemi Operativi Esistenti

Il primo compito è capire quali sistemi operativi hai attualmente e dove vorresti installare PowerShell 5.1. Anche se, su alcuni sistemi, potresti già aver deciso di installare PowerShell 5.1 senza saperlo. PowerShell 5.1 è stato rilasciato come strumento integrato nell’aggiornamento anniversario di Windows 10 e nella versione RTM di Windows Server 2016, quindi se hai uno di questi sistemi operativi o più recenti sei già a posto.

Per gli altri, assicurati di raccogliere un elenco. Non hai uno strumento di gestione dei sistemi come SCCM? Nessun problema! Usa PowerShell per aiutare PowerShell! Se hai Active Directory, ecco un rapido comando per avere una panoramica di ciò che c’è là fuori.

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

Qual è l’aspetto del tuo ambiente? Hai vecchi computer con Windows XP o Server 2003? In tal caso, sei sfortunato. Il massimo che puoi fare è PowerShell v2, ma se hai ancora alcuni di quelli nel tuo ambiente, PowerShell è il minimo dei tuoi problemi! Per qualsiasi sistema operativo che abbia Windows 7 SP1/Windows Server 2008R2 SP1 o versioni successive, è possibile installare PowerShell 5.1.

Costruzione di un Elenco di Obiettivi Preliminari

Su sistemi operativi applicabili, PowerShell 5.1 ha alcuni prerequisiti e requisiti da soddisfare prima che funzioni.

  • Almeno .NET Framework 4.5.2 installato. Questo non è un requisito di installazione, e l’installazione procederà comunque, ma alcune funzionalità non funzioneranno quindi fallo già!
  • La versione di anteprima di PowerShell 5.1 non deve essere installata
  • Sui computer con Windows 7 o Server 2008R2 con PowerShell v3 installato, è necessario salvare il valore di PSModulePath o aggiornare prima alla v4.
  • Sui computer con Windows 7 o Server 2008R2, se si utilizza DSC, assicurarsi di abilitare WinRM.
  • L’installazione richiederà un riavvio quindi assicurati di pianificarlo.

Poiché sono pigro e intendo che tu lo sia anche, ecco uno script che ho creato per aiutarti a capire quale tipo di lavoro preliminare ti aspetta. Per il requisito WinRM, potresti includere il codice da questo script mio poiché stai toccando ogni macchina. Tuttavia, sappi che questo approccio richiede che ogni computer abbia PowerShell Remoting abilitato.

## Questo potrebbe essere Active Directory, un file di testo, un database SQL, qualsiasi cosa$computers = Get-AdComputer -Filter *foreach ($c in $computers.Name) {	try {		$session = New-PSSession -ComputerName $c		$icmParams = @{			Session = $session		}		$output = @{        	ComputerName = $c		}    	## Nel caso in cui stiano eseguendo Powerhell v3		$icmParams.ScriptBlock = { $env:PSModulePath; [Environment]::GetEnvironmentVariable("PSModulePath", "Machine") }		$output.PSModulePath = (Invoke-Command @icmParams) -split ';' | Select-Object -Unique | Sort-Object    	## Prendi la versione esistente    	$icmParams.ScriptBlock = { $PSVersionTable.BuildVersion.ToString() }    	$output.PSModulePath = Invoke-Command @icmParams		## Verifica .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	}

Assicurarsi che gli script esistenti funzionino con PowerShell 5.1

Anche se i membri del team di PowerShell stessi mi hanno detto che tutti gli script dovrebbero funzionare con PowerShell 5.1, non è sempre il caso. Per qualsiasi codice che esegue processi aziendali critici, consiglio sempre di installare la versione 5.1 sullo stesso sistema operativo di un’altra macchina e di eseguire tutti i test in questo modo solo per essere sicuri.

Passaggio n. 2: Distribuzione

Una volta completati tutti i prerequisiti e pronti per iniziare a distribuire PowerShell 5.1, il passaggio successivo è farlo! La distribuzione della versione 5.1 è simile alle altre distribuzioni software. Come procedere dipende dagli strumenti che si hanno già. Ad esempio, se si dispone di Active Directory e si desidera utilizzare GPO, si può seguire quella strada, SCCM funzionerebbe allo stesso modo. Cerco di essere agnostico rispetto al prodotto, quindi ecco come lo farei con PowerShell, naturalmente!

Innanzitutto, creerò una cartella sulla mia macchina locale chiamata C:\PowerShellDeployment. Successivamente, scaricherò le versioni appropriate di cui ho bisogno in quella cartella e prendo anche una copia di psexec mentre ci sono. Successivamente, poiché PowerShell non può aggiornarsi da solo, dobbiamo fare affidamento sul buon vecchio VBScript. Ecco uno script che ho creato tempo fa per iniziare. Lo salverò in 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

Una volta che hai salvato il file VBS sul tuo computer locale, crea uno script PowerShell come questo e conservalo in un posto sicuro.

## Ancora, non è necessario che sia 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
}

Esegui lo script sopra e dovrebbe verificare se il computer è online, copiare l’installatore di PowerShell e il file VBS sul computer remoto, eseguirli, fare pulizia e riavviare il computer. Come sempre, pianifica questo in una finestra di manutenzione! L’installazione di PowerShell richiede un riavvio, e questo lo farà senza pietà.

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