Adam the Automator
Bent u klaar om uw PowerShell 7-upgrade uit te voeren en toegang te krijgen tot alle nieuwe functies? Zo ja, dan is dit artikel voor u.
Toen PowerShell 6 werd uitgebracht, was dat om een basisversie van PowerShell naar alle platforms te brengen (PowerShell Core). Met PowerShell 7 (de nieuwste PowerShell-versie op het moment van schrijven), willen we nu dat alle platforms gelijk zijn in de PowerShell die ze kunnen leveren (zowel Windows PowerShell als PowerShell Core).
In dit artikel leert u hoe u een PowerShell 7-upgrade handmatig kunt uitvoeren en hoe u het updateproces kunt automatiseren met massa-implementaties via GPO en PowerShell Remoting.
Op het moment dat dit artikel wordt geschreven, is de huidige release van PowerShell 7 Preview 3. De meeste verwijzingen in dit artikel zijn van toepassing op deze versie.
Inhoudsopgave
Hoe werkt u de PowerShell-versie bij op een machine
Net als bij PowerShell Core 6.0 is het proces om PowerShell Core 7 te installeren vergelijkbaar. Laten we eens kijken naar een paar verschillende manieren om PowerShell 7 op een enkele machine te installeren.
Voordat we te ver komen, is het de moeite waard om een paar vereisten te noemen voordat je PowerShell versie 7 installeert. U zult merken dat dit dezelfde vereisten zijn als voor PowerShell versie 6.
- De Universal C Runtime moet zijn geïnstalleerd
- Windows Management Framework (WMF) 4.0 of nieuwer – alleen als u op een versie van Windows 7 of Windows Server 2008R2 zit. Latere versies van Windows zoals Windows 8.1, Windows 10 en Windows Server 2016, WMF is niet vereist.
PowerShell 7 handmatig installeren
Download eerst PowerShell 7. Ga daarvoor naar de GitHub Releases-pagina voor PowerShell en zoek de versie die je wilt installeren. Voor dit artikel gebruiken we de PowerShell 7.0.0 preview 3 release. Op Windows, scroll een beetje naar beneden en download de PowerShell-7.0.0-preview.3-win-x86.msi MSI-pakket en voer het uit.
De wizard stelt u een paar eenvoudige vragen, zoals waar u PowerShell wilt installeren. Als u meerdere versies van PowerShell naast elkaar wilt gebruiken, moet u afzonderlijke installatiemappen gebruiken.
De wizard vraagt u ook of u PowerShell wilt registreren voor de PATH
omgevingsvariabele. Door de PowerShell installatiemap toe te voegen aan de PATH
omgevingsvariabele kunt u PowerShell aanroepen vanuit elke andere terminal, zoals een andere versie van PowerShell of zelfs cmd.exe.
Een andere optie is PowerShell registreren aan het Windows Event Logging Manifest. Deze optie maakt gebruik van de robuuste logging die bij deze versie van PowerShell wordt geleverd.
Verder wordt gevraagd of u PowerShell Remoting vanaf het begin wilt inschakelen, wat kan helpen bij alle taken op afstand.
Ten slotte wordt u gevraagd of u ‘Open Here’ contextmenu’s wilt toevoegen aan Verkenner. Met deze optie kunt u met de rechtermuisknop klikken op een map in de Windows Verkenner en een PowerShell-venster openen in die werkdirectory.
Hoewel de laatste twee volledig optioneel zijn en aan jou zijn, raad ik je sterk aan om de eerste twee in te schakelen, op deze manier:
Als u alle vragen hebt beantwoord, klikt u op Volgende en wordt de installatie gestart.
PowerShell 7 openen
Nadat PowerShell 7 is geïnstalleerd, kunt u het uitvoeren door een willekeurige opdrachtregelterminal te openen en pwsh-preview
te typen.
Merk op dat u deze opdrachtnaam niet meer zult gebruiken zodra versie 7 van PowerShell uit de “preview”-fase is. Zodra de preview-fase voorbij is, kunt u PowerShell 7 starten met
pwsh
.
PowerShell 7 installeren met PowerShell
De Microsoft PowerShell-teamleider, Steve Lee, tweette een handige manier om PowerShell 7 te installeren met behulp van PowerShell’s Invoke-RestMethod
cmdlet. Dit codefragment gebruikt het commando om de PowerShell GitHub repository te bevragen, een installatiescript te downloaden dat vervolgens PowerShell 7 downloadt en installeert met een enkele regel.
Hieronder vindt u de syntaxis om dat te doen. Open een Windows PowerShell console en voer de onderstaande one-liner uit.
iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI -Preview"
Deze code snippet gebruikt de PowerShell Invoke-Expression
cmdlet (iex
in de one-liner) om een string te accepteren en deze uit te voeren als PowerShell code. Deze string roept het Invoke-RestMethod
cmdlet aan (irm
in de one-liner) om het script te downloaden dat Steve heeft geschreven. Ik raad je ten zeerste aan om de link te gebruiken en de code zelf te bekijken voordat je dit commando uitvoert!
Het knipsel geeft vervolgens de UseMSI
en Preview
parameters door aan het script om de nieuwste MSI op te halen en te installeren.
Als u dit script volledig stil en zonder toezicht wilt uitvoeren, kunt u de Quiet
parameter gebruiken. Op het moment van schrijven wijst de Preview
parameter nog steeds naar PowerShell 7 Preview 3.
PowerShell 7 installeren met een module
Een andere manier om PowerShell 7 geïnstalleerd te krijgen is door gebruik te maken van Jeff Hicks’ PowerShell module genaamd PSReleaseTools. Deze module helpt, net als Steve’s one-liner, uw PowerShell-versie up-to-date te houden.
Met twee regels PowerShell kunt u de module downloaden met Install-Module
en met behulp van het Install-PSPreview
commando dat bij de PSRelaseTools-module wordt geleverd, kunt u PowerShell 7 preview geïnstalleerd krijgen.
PS51> Install-Module -name PSReleaseTools -ForcePS51> Install-PSPreview -mode Quiet
PowerShell 7 binnen een organisatie implementeren
Er zijn een paar opties als het gaat om het implementeren van PowerShell 7 op schaal. Laten we eens kijken naar twee veelgebruikte manieren om dit voor elkaar te krijgen.
PowerShell 7 implementeren met een GPO
PowerShell is eenvoudig te implementeren via GPO omdat het zich gemakkelijk leent voor andere Microsoft-technologieën terwijl het is verpakt als een MSI. Wanneer u dit via GPO implementeert, zijn er een paar dingen waar u op moet letten.
Gebruik een computergebaseerde GPO
Zorg er eerst voor dat u een computergebaseerd beleid gebruikt en geen gebruikersgebaseerd beleid. U kunt hier meer lezen over de verschillen tussen deze twee beleidsregels. Op servers loggen gebruikers meestal niet interactief in, waardoor een implementatie wordt gestart.
Als u PowerShell 7 op veel servers implementeert, wilt u dat de implementatie plaatsvindt ongeacht de interactie van de gebruiker met de machine.
Een netwerkbestand delen
Zorg er ook voor dat de netwerkshare waar u de PowerShell 7 MSI op zet, de juiste rechten heeft, zodat alle servers in uw omgeving er toegang toe hebben. Hoewel dit buiten het bestek van dit artikel valt, kunt u hier meer vinden over het maken van bestandsshares.
Opzetten van de GPO
U maakt vervolgens uw GPO met de volgende stappen:
- Plaats de MSI in de toegewezen fileshare waartoe uw computers toegang hebben.
- Maak een starter GPO binnen de Group Policy Management Console. U kunt hier meer lezen over starter GPO’s
- Zodra de GPO is gemaakt, opent u deze en navigeert u naar Computer Configuratie -> Software-instellingen.
- Klik met de rechtermuisknop op Software Installatie en selecteer dan Nieuw -> Pakket.
- In het dialoogvenster voegt u het volledige UNC pad naar de MSI toe. Als bijvoorbeeld een bestandsshare met de naam map zich op de server.name bevindt, zou het pad zijn: server.name-map-powershell-7.msi
- Klik op Openen -> Toegewezen -> OK.
Koppel de GPO aan de vereiste OU(‘s)
Eenmaal gemaakt, koppel de GPO aan de vereiste OU(‘s).
Controleer de voortgang van de GPO-installatie
Als u de voorkeur geeft aan een meer praktische aanpak voor het controleren van uw Group Policy-implementatie, bekijk dan dit korte script hieronder dat een rapport maakt met het Group Policy-object dat is toegepast op computers in een specifieke OU.
Zorg ervoor dat u de OU-naam (OU=Domain Controllers,DC=mylab,DC=local) wijzigt in uw OU.
Merk op dat u dit kunt uitvoeren op een domeincontroller of een aan een domein gekoppelde computer waarop de PowerShell ActiveDirectory-module is geïnstalleerd.
$computers = Get-ADComputer -Filter * -SearchBase 'OU=Domain Controllers, DC=mylab, DC=local'ForEach ($computer in $computers) { Get-GPResultantSetOfPolicy -Computer $computer -ReportType HTML -Path c:\temp\$computer.html}
Als u specifieke servers ter plaatse wilt controleren, komt de onderstaande opdracht goed van pas. Het gaat naar een computer op afstand ($computer
) en controleert de versie van PowerShell die op die computer is geïnstalleerd met $PSVersionTable.PSVersion
.
PS> Invoke-Command -Computername $computer -Scriptblock {$PSVersionTable.psversion}
Ten slotte, als u computers vindt waarop het groepsbeleid niet is toegepast, kunt u het volgende commando uitvoeren en het zal dwingen het groepsbeleid op de doelcomputer te verversen:
PS> Invoke-GPUpdate -Computer $computer
PowerShell 7 inzetten met PowerShell Remoting
Een andere geweldige manier om PowerShell in te zetten op machines op afstand is met PowerShell! Hoewel dit misschien een beetje meta lijkt, is PowerShell een robuuste scripttaal die krachtig genoeg is om te helpen bij de installatie van zijn vervanger.
Voordat u begint, moet u ervoor zorgen dat PowerShell remoting is ingeschakeld en dat u de juiste machtigingen hebt ingesteld voor het uitvoeren van commando’s op afstand in uw omgeving. Een handleiding voor het inschakelen van PSRemoting via GPO vindt u hier.
Omdat u de eerder genoemde one-liner voor het installeren van PowerShell kent, moet u dat commando in een scriptblok “verpakken” en het Invoke-Command
-commando opdracht geven het op een of meer externe machines uit te voeren.
Hieronder ziet u een voorbeeld van het doorlopen van een lijst computers die is opgeslagen in de $computers
array en het uitvoeren van het install-powershell.ps1 script op al deze computers.
$creds = $(Get-Credential)ForEach ($computer in $computers) { Invoke-Command -ComputerName $computer -Credential $creds {iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI -Preview -Quiet"}}
Samenvatting
Er zijn zoveel redenen om uw PowerShell-versie up-to-date te houden, in ieder geval op uw eigen machine als dat niet in uw productie-omgeving is. U kunt de nieuwste functies gebruiken, profiteren van de prestatieverbeteringen en er zelfs voor zorgen dat uw oudere code niet breekt op de nieuwere versies.
Zoals u ziet, zijn er veel manieren om nieuwe versies van PowerShell te downloaden en te installeren. Kies de methode die voor u in uw omgeving werkt en blijf PowerShellin’!
Verder lezen
- Hoe u uw PowerShell-versie kunt controleren (op alle manieren!)