Atualize para o PowerShell 5: Passos Fáceis e Scripts

Se você decidir instalar o PowerShell 5.1, criei um guia técnico com alguns scripts para automatizar esse processo para você. Aviso: Todo o código mencionado neste post é fornecido como está. Alguns podem funcionar, outros podem não funcionar em seu ambiente, mas, se você não tem nada para começar, servirá como um modelo para você iniciar.

Se precisar de ajuda para encontrar a versão do PowerShell que está executando, recomendo verificar Como Verificar a Versão do PowerShell (De Todas as Formas!).

Passo #1: Descoberta

O primeiro passo para realizar uma atualização em toda a empresa do PowerShell é a descoberta. Como está o cenário atualmente? Você não pode mudar algo sem entendê-lo primeiro, e surpreendentemente, muitas organizações não têm ideia do que possuem!

Sistemas Operacionais Existentes

A primeira tarefa é entender quais sistemas operacionais você possui atualmente, onde deseja chegar ao PowerShell 5.1. Embora, em alguns sistemas, você possa já ter decidido instalar o PowerShell 5.1 e não saber. O PowerShell 5.1 foi lançado como uma ferramenta integrada na Atualização de Aniversário do Windows 10 e na versão RTM do Windows Server 2016, então, se você tiver qualquer um desses sistemas operacionais ou mais recentes, já está pronto para seguir em frente.

Para os outros, certifique-se de fazer uma lista. Não tem uma ferramenta de gerenciamento de sistema como o SCCM? Sem problemas! Use o PowerShell para ajudar o PowerShell! Se tiver o Active Directory, aqui está um comando rápido para ter uma visão geral do que está disponível.

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 é a aparência do seu ambiente? Você possui alguma máquina com Windows XP ou Server 2003? Se sim, você está sem sorte. O melhor que você conseguirá é o PowerShell v2, mas se ainda tiver algumas dessas máquinas em seu ambiente, o PowerShell é o menor dos seus problemas! Para qualquer sistema operacional que tenha Windows 7 SP1/Windows Server 2008R2 SP1 ou superior, o PowerShell 5.1 pode ser instalado.

Construindo uma Lista de Destinos Pré-requisitos

Em sistemas operacionais aplicáveis, o PowerShell 5.1 possui alguns pré-requisitos e requisitos a serem atendidos antes de funcionar.

  • Pelo menos o .NET Framework 4.5.2 deve estar instalado. Isso não é um requisito de instalação, e a instalação continuará, mas algumas funcionalidades não funcionarão, então apenas faça isso logo!
  • A versão de pré-visualização do PowerShell 5.1 não deve estar instalada
  • Em máquinas com Windows 7 ou Server 2008R2 com PowerShell v3 instalado, você deve salvar o valor de PSModulePath ou primeiro fazer o upgrade para v4.
  • Em máquinas com Windows 7 ou Server 2008R2, se estiver usando DSC, certifique-se de habilitar o WinRM.
  • A instalação precisará de uma reinicialização, então certifique-se de agendar isso.

Porque sou preguiçoso e pretendo que você também seja, aqui está um pequeno script que criei para ajudá-lo a descobrir que tipo de trabalho prévio é necessário. Para o requisito do WinRM, você pode incluir o código deste script no seu, já que você está acessando cada máquina. No entanto, saiba que essa abordagem requer que cada computador tenha a Remoção do PowerShell ativada.

## Isso pode ser o Active Directory, um arquivo de texto, um banco de dados SQL, o que for$computadores = Get-AdComputer -Filter *foreach ($c in $computadores.Name) {	try {		$sessão = New-PSSession -ComputerName $c		$icmParams = @{			Session = $sessão		}		$output = @{        	ComputerName = $c		}    	## Caso estejam executando o PowerShell v3		$icmParams.ScriptBlock = { $env:PSModulePath; [Environment]::GetEnvironmentVariable("PSModulePath", "Machine") }		$output.PSModulePath = (Invoke-Command @icmParams) -split ';' | Select-Object -Unique | Sort-Object    	## Obtenha a versão existente    	$icmParams.ScriptBlock = { $PSVersionTable.BuildVersion.ToString() }    	$output.PSModulePath = Invoke-Command @icmParams		## Verifique o .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 $sessão -ErrorAction Ignore	}

Garanta que os scripts existentes funcionem com o PowerShell 5.1.

Mesmo que membros da equipe do PowerShell tenham me dito que todos os scripts devem funcionar com o PowerShell 5.1, esse nem sempre é o caso. Para qualquer código que esteja executando processos de negócios críticos, sempre recomendo instalar o 5.1 no mesmo sistema operacional de outra máquina e executar todos os testes dessa forma, apenas para ter certeza.

Passo #2: Implantação

Depois de ter concluído todos os pré-requisitos e estiver pronto para começar a implementar o PowerShell 5.1, o próximo passo é fazê-lo! A implementação do 5.1 é semelhante a outras implantações de software. Como você faz isso depende das ferramentas que já possui. Por exemplo, se você possui o Active Directory e deseja usar GPOs, pode seguir por esse caminho, o SCCM também funcionaria. Eu tento ser agnóstico em relação ao produto aqui, então aqui está como eu faria com o PowerShell, é claro!

Primeiro, criarei uma pasta em minha máquina local chamada C:\PowerShellDeployment. Em seguida, eu baixarei a(s) versão(ões) apropriada(s) que preciso para essa pasta e pegarei uma cópia do psexec enquanto estiver nisso. Em seguida, como o PowerShell não pode se atualizar, precisamos recorrer ao bom e velho VBScript. Aqui está um pequeno script que criei há muito tempo para ajudar você a começar. Vou salvá-lo em 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

Assim que você tiver o VBS salvo em sua máquina local, crie um script do PowerShell como este e o mantenha em algum lugar.

## Novamente, não precisa ser o 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}

Execute o script acima, e ele deverá verificar se o computador está online, copiar o instalador do PowerShell e o VBS para o computador remoto, executá-los, limpar após a execução e reiniciar o computador. Como sempre, programe isso em uma janela de manutenção! A instalação do PowerShell requer uma reinicialização, e isso fará isso sem remorso.

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