powers hell
DESCRIPTION
readTRANSCRIPT
Objectieven
• Na deze cursus zal u in staat zijn om:
– Te begrijpen wat PowerShell juist is
– Te begrijpen wat de basisbouwstenen zijn in PowerShell
– PowerShell te gebruiken om administratieve taken in Windows uit te voeren
Inhoudstabel
• Algemeen
• PowerShell Console
– PowerShell installeren & opstarten
– Eerste stappen in de console
– De console aanpassen
– PowerShell als rekenmachine
– Externe commando’s uitvoeren
– Cmdlets
Inhoudstabel
• PowerShell console
– Help functie
– Parameters
– Aliassen (oude gewoontes) vs. Cmdlets
– PowerShell scripts
– Variabelen
– Piping
Algemeen
• Omgeving om administratieve taken in Windows mee te verrichten
• Onderdeel van applicaties
– Microsoft Exchange Server 2007
– Microsoft SQL Server 2008
• Geschiedenis
• Toekomst
Algemeen
• Optionele download voor Windows XP, Server 2003 and Windows Vista
– Onderdeel van Windows Management Framework
• Standaard vanaf Windows Server 2008
• Tekst gebaseerd
– Command-line interpreteerder
– Hoofdletter ongevoelig
• GUI applicaties voor PowerShell
PowerShell Console
• PowerShell installeren & opstarten
• Eerste stappen in de console
– Command console – keyboard input
– Hello
– Files & folders
– Running Processes
– Console window leegmaken
– Console window verlaten
PowerShell Console
• Eerste stappen in de console
– Onvolledige invoer
– Annuleren invoer
– Sneltoetsen
– Verwijderen onjuiste invoer
– Historiek
– Auto aanvullen (tab toets)
– Selecteren (modus snel bewerken)
PowerShell Console
• PowerShell als rekenmachine
– Voorbeelden:
• 2 + 4 (Enter)
• (12+5) * 3 / 4.5 (Enter)
– Gebruik . voor kommagetallen
– Ondersteunt kilobyte, megabyte, …
• 4GB / 720MB (Enter)
• Geen spaties tussen het getal en de eenheid
PowerShell Console
Operator Description Example Result
+ Adds two values 2+4
“Hi” + “there”
1,2,3 + 4,5,6
6
“Hi there”
1,2,3,4,5,6
* Multiplies two values 2 * 4
“a” * 3
1,2 * 2
8
“aaa”
1,2,1,2
- Subtracts two values 6 – 2 4
/ Divides two values 6 / 2
7 / 4
3
1.75
% Returns the remainder
from a division
7 % 4 3
PowerShell Console
• Externe commando’s uitvoeren
– Voorbeelden
• Ipconfig
• Tracert
– Werken in de ‘oude’ console
• Cmd /c Help
• Exit
– ‘Oude’ commando’s werken in PowerShell
PowerShell Console
• Cmdlets (Commandlets)
– Ingebouwde commando’s die specifieke functies uitvoeren
– Werkwoord-ZelfstandigNaamwoord naampatroon
• Action(Verb)-Object of the action(Noun) namingconvention
• Bedoeling hiervan is de Cmdlets zelfomschrijvend te maken
PowerShell Console
• Cmdlets
– Voorbeeld: Get-Command
• Zonder parameters toont deze Cmdlet de beschikbare Cmdlets en andere elementen uit PowerShell
• Met parameters haalt deze Cmdlet basis informatie op over bv. een specifieke Cmdlet
• Voorbeelden– Get-Command *test* (-CommandType cmdlet) (* = Wildcard)
– Get-Command –verb get (add, clear, compare, …)
– Get-Command –noun process (service, …)
PowerShell Console
• Cmdlets
– Voorbeeld: Sort-Object
• Zal objecten sorteren adhv. eigenschappen-waarden
• 1 of meerdere eigenschappen kunnen worden meegegeven om op te sorteren
• Voorbeeld– Sort-Object –property prop1, prop2
PowerShell Console
• Help functie– Help over de verschillende Cmdlets
• Get-Help Get-Process: help weergeven van de CmdletGet-Process
– -detailed, -full, -examples
– Wildcard karakters in help commando’s• Get-Help *: alle help onderwerpen weergeven
• Get-Help Get-*: lijst weergeven van Cmdlets die beginnen met Get-
• Get-Command *Service*: lijst weergeven van Cmdlets die het woord Service bevatten
PowerShell Console
• Parameters
– Voegen informatie toe aan een Cmdlet zodat deze weet wat te doen
– Voorbeelden:
• Get-ChildItem (zonder parameters > huidige directory)
• Get-ChildItem –path c:\Windows (=parameter)
• Get-ChildItem –path c:\Windows –filter *.exe (=parameters)
– Get-Help Cmdlet –full
• Geeft overzicht van mogelijke parameters van de Cmdlet
PowerShell Console
• Aliassen (oude gewoontes) vs. Cmdlets
– Nieuwe Cmdlet commando’s zijn zo ontworpen zodat ze nog steeds kunnen opgeroepen worden via de oude conventionele naam
• Gebruiksgemak bij veel gebruikte commando’s
– Een overzicht van alle alias names & hun definities:
• Get-Alias
PowerShell Console
• Aliassen (oude gewoontes) vs. Cmdlets
– Enkele voorbeelden:
• dir, ls -> Get-ChildItem
• copy -> Copy-Item
• cls -> Clear-Host
• help, man -> Get-Help
– Een alias name & zijn definitie bekomt men via een parameter –name:
• Get-Alias –name Dir
PowerShell Console
• PowerShell Scripts
– Deze hebben de extensie .ps1
– Typ eender welk PowerShell commando dat we tot nu toe gezien hebben in notepad en bewaar als test.ps1
– Open dan het PowerShell script vanuit de PowerShell console
PowerShell Console
• PowerShell Scripts
– Externe bestanden openen
• Absoluut pad gebruiken
• Set-ExecutionPolicy RemoteSigned
• Set-ExecutionPolicy Default
PowerShell Console
• Variabelen
– Worden aangeduid met het startteken “$”
– Kan bestaan uit getallen, letters en speciale karakters zoals _
– Zijn hoofdletter ongevoelig
– Moeten niet expliciet worden gecreëerd voor gebruik
– Zelf gecreëerde & voorgedefinieerde variabelen
PowerShell Console
• Variabelen
– Zelf gecreëerde variabelen
• $variabeleNaam = waarde
• Waarden toekennen aan variabelen via =– $value1 = 10, $value2 = 20
• Waarden oproepen via de variabelen – $value1, $value2
• Resultaten van Cmdlets toekennen aan variabelen
• Rekenen met variabelen
PowerShell ConsoleOperator Example Equivalent Description
= $a = 3 Sets the variable to the specified value.
+= $a += 2 $a = $a + 2 Performs the addition operation in the
existing value, then assigns the result
back to the variable.
-= $a -= 13 $a = $a -13 Performs the subtraction operation in the
existing value, then assigns the result
back to the variable.
*= $a *= 3 $a = $a * 3 Multiplies the value of a variable by the
specified value and appends to the
existing value.
/= $a /= 3 $a = $a / 3 Divides the value of a variable by the
specified value.
%= $a %= 3 $a = $a % 3 Divides the value of a variable by the
specified value and assigns the remainder
(modulus) to the variable.
PowerShell Console
• Variabelen
– Variabelen in gebruik
• PowerShell houdt alle variabelen en zijn waarden bij in een virtuele drive genaamd variable:
– Get-ChildItem variable: (alle gedefinieerde variabelen)
– Get-ChildItem variable:value* (wildcard)
– Get-ChildItem variable: -include value* -exclude *1*
» Gebruik van parameters
PowerShell Console
• Variabelen
– Controle of een variabele bestaat
• Via de Cmdlet Test-Path kan je controleren of een bestand bestaat
• Zoals gezegd worden alle variabelen bewaard in variable:
• Test-Path variable:value1
PowerShell Console
• Variabelen
– Variabelen verwijderen
• Automatisch bij afsluiten PowerShell
• Expliciet via Remove-Variable value1
– Speciale variabele Cmdlets
• Get-command *variable*
PowerShell Console
• Variabelen
– Constanten
• Variabelen waarvan de waarde niet kan gewijzigd worden
• New-Variable test –value 100 –option ReadOnly
• Om te verwijderen:– Remove-Variable test –force
PowerShell Console
• Variabelen
– Beschrijving
• New-Variable –name test –value 100 –description “test”
• Via $test & Get-ChildItem variable:test wordt de beschrijving evenwel niet getoond
• De beschrijving is geen belangrijke eigenschap van een variabele en wordt daarom niet standaard getoond.
• Dit dient expliciet gevraagd te worden
• Dit kan bijvoorbeeld via de Cmdlet Format-Table
• Hierover later meer
PowerShell Console
• Variabelen
– Voorgedefinieerde variabelen
• “Automatische” PowerShell variabelen
• Bevatten reeds nuttige data
• Gebruikt door PowerShell voor interne doeleinden
• Zijn beschikbaar vanaf PowerShell is ingeladen
• Worden immers ingeladen tijdens opstarten
• Get-Childitem variable:
PowerShell Console
• Variabelen
– Voorgedefinieerde variabelen
• Verschillen niet van zelf gedefinieerde variabelen
• $HOME
• …
• Get-Help about_Automatic_variables
PowerShell Console
• Variabelen
– Omgevingsvariabelen
• Oude consoles (cmd, …) gebruiken deze
• Worden beheerd door Windows zelf
• Belangrijke bron voor PowerShell
• Bevatten veel details over het OS
• Ermee werken is identiek als werken met zelf gedefinieerde en voorgedefinieerde variabelen
PowerShell Console
• Variabelen
– Omgevingsvariabelen
• Je hoeft PowerShell enkel te vertellen welke variabele je wenst te gebruiken
• Voor omgevingsvariabelen > env:
• Enkele voorbeelden:– Locatie Windows folder > $env:windir
• Door env: toe te voegen, laat je PowerShell weten niet te zoeken in de variable: dir, maar in de Windows omgevingsvariabelen
PowerShell Console
• Variabelen– Omgevingsvariabelen
• In tegenstelling tot PowerShell variabelen die in de dirvariable: zitten, bevinden omgevingsvariabelen zich in de virtuele drive env:
• Overzicht: Get-Childitem env:
• Creatie: $env:testvar = 12
• Verwijderen:– del env:testvar
• Na afsluiten PowerShell keren de variabelen terug naar hun originele waarde
PowerShell Console
• Piping– | : data (=resultaat) Cmdlet (=commando) links
worden doorgegeven als input (=invoer) aan de Cmdlet rechts van het pipe symbool
– Dit geheel heet men ook een pipeline
– Men gebruikt pipelines om complexe commando’s samen te stellen
– Een PowerShell pipeline is een object pipeline
– De data die wordt doorgegeven tussen Cmdlets zijn objecten
PowerShell Console
• Piping
– Voorbeeld:
• Get-ChildItem | Get-Member– Cmdlet Get-Member haalt de eigenschappen en methodes op
van een object
– Om het object te specifiëren, dient men gebruik te maken van piping
PowerShell Console
• Piping
– Resultaat redirecten
• Get-ChildItem | Out-Printer
• Get-ChildItem | Out-File mylog.txt– Append
• Get-ChildItem | Out-Host -Paging
PowerShell Console
• Piping
– Resultaat opmaken
• Tabelopmaak:– Format-Table (Get-Help Format-Table voor meer info)
– Voorbeeld:
» Get-ChildItem | Format-Table –Property Name,Length
• Lijstopmaak: – Format-List (Get-Help Format-List voor meer info)
– Voorbeeld:
» Get-ChildItem | Format-List –Property Name,Length
PowerShell Console
• Piping
– Resultaat sorteren
• Get-ChildItem| Sort-Object –property Length, Name– Gesorteerde directory lijst
– Ascending/descending
PowerShell Console
• Piping
– Resultaat groeperen
• Get-Service | Group-Object –Property Status – Groepeert gelijkaardige objecten en geeft hun aantal weer
– Eigenschap dient om Group-Object te laten weten welke de criteria zijn om op te groeperen
PowerShell Console
• Piping
– Resultaat filteren (pipeline filter)
• Wanneer je enkel bent geïnteresseerd in specifieke objecten, laat dan Cmdlet Where-Object het resultaat onderzoeken en enkel deze objecten doorlaten die aan bepaalde criteria voldoen
• Opbouw: … | Where-Object {criteria}
• {} = een scriptblok
PowerShell Console
• Piping
– Resultaat filteren (pipeline filter)
• {Criteria} bestaat uit 3 delen– Eigenschap van het huidig object (in de pipeline voorgesteld
door variabele $_)
– Vergelijkingsoperator (-eq, -ne, -lt, -gt, -like, -contains)
– Waarde
• Oefening: Stel dat je enkel de running services wil weergeven, welk commando zou je dan gebruiken?
PowerShell ConsoleOperator Description Example Result
-eq -ceq -ieq Equals 5 –eq 5 $true
-ne -cne -ine Not equals 5 –ne 5 $false
-gt -cgt -igt Greater than 5 –gt 3 $true
-ge -cge -ige Greater than or equal 5 –ge 3 $true
-lt -clt -ilt Less than 5 –lt 3 $false
-le -cle -ile Less than or equal 5 –le 3 $false
-contains
-ccontains
-icontains
The collection on the left side
contains the value specified on
the right side.
1,2,3 –contains 2 $true
-notcontains
-cnotcontains
-inotcontains
The collection on the left side
does not contain the value on
the right side.
1,2,3 –notcontains 2 $false
Informatie over Computers
• Lijst maken van de Desktop SettingsGet-WmiObject –Class Win32_Desktop -ComputerName .
• Lijst maken van de BIOS informatieGet-WmiObject -Class Win32_BIOS
• Lijst maken van de processor informatieGet-WmiObject -Class Win32_Processor
• Lijst maken van de computerfabrikant en het -modelGet-WmiObject -Class Win32_ComputerSystem
• Lijst maken van de geïnstalleerde hotfixesGet-WmiObject -Class Win32_QuickFixEngineering
Informatie over Computers
• Lijst maken van de printers op een PCGwmi Win32_Printer -ComputerName pcname
• Een computer afsluiten of heropstarten(gwmi Win32_OperatingSystem).Reboot()
Werken met registersleutels
• Gebruik het register als een bestandssysteemGet-ChildItem HKLM :\Software
• Lezen van registerwaardenGet-ItemProperty
HKCU:\Software\Microsoft\Windows\CurrentVersion\Run
• Nieuwe registersleutels aanmakenNew-Item –Path HKCU:\Software\DeleteMe
• Nieuwe registerwaarde aanmakenNew-ItemProperty HKCU:\Software\DeleteMe –Name MyEntry –
PropertyType String –Value “My Text”
Werken met registersleutels
• Verwijderen van een registerwaardeRemove-ItemProperty HKLM :\Software\DeleteMe –Name MyEntry
• Verwijderen van een volledige registersleutel inclusief onderliggende subsleutels en waarden
Remove-Item HKLM :\Software\DeleteMe -Recurse
Extra oefeningen
• Resultaat opmaken met Format-* Cmdlets
– “Get” van alle services en hun “Name”, “Status”, “displayname” en “servicetype”.
– “Get” een tabel van alle services en hun “Name”, “Status”, “displayname” en “servicetype”. Zorg ervoor dat alles goed wordt weergegeven.
– Organiseer uw servicestabel op status.
HINT: gebruik de Get-Service cmdlet om de
services in een lijst weer te geven
Extra oefeningen
• Werken met Bestanden, Folders and Register Keys– Maak een lijst van alle bestanden en folders in de Windows
directory.– Maak een lijst van alle bestanden en folders in de Windows
directory maar zorg ervoor dat de data wordt weergeven per pagina.
– Maak een folder in de C: drive.– Maak een bestand in deze folder.– Hernoem dit bestand.– Kopieer deze folder inclusief de inhoud ervan. – Maak een registerkey in
HKCU:\Software\Microsoft\Windows\CurrentVersion– Verwijder de registerkey die juist heeft aangemaakt.
Terugblik op de objectieven
• U bent nu in staat om:
– Te begrijpen wat de Powershell juist is
– Begrijpen wat de basisbouwstenen zijn in de Powershell
– De Powershell te gebruiken om basisadministratie van Windows uit te voeren