30
Windows: H10 - PowerShell Pagina 1 van 30 Introductie Windows PowerShell getting started a new Windows command-line shell, designed especially for system administrators includes an interactive prompt and a scripting environment (onafhankelijk of in combinatie) built on top of the .NET Framework common language runtime (CLR) and the .NET Framework accepts and returns .NET Framework objects introduces the concept of a cmdlet o a simple, single-function command-line tool built into the shell o you can use each cmdlet separately, but their power is realized when you use these simple tools in combination to perform complex tasks o more than one hundred basic core cmdlets o you can write your own cmdlets and share them with other users. gives you access to the file system on the computer Windows PowerShell providers enable you to access other data stores o such as the registry and the digital signature certificate stores o as easily as you access the file system Windows PowerShell is not a scripting language, or at least it is not only a scripting language. PowerShell is an engine designed to execute commands that perform administrative tasks. o Creating user accounts, Configuring services, Deleting mailboxes, … The Windows PowerShell ISE required the Microsoft .NET Framework 3.5 with Service Pack 1. Interesting keys Page up Jumps to the first command in the history buffer Page down Jumps tot he last command in the history buffer Up Arrow goes back one command in the history buffer Down Arrow goes forward one command in the history buffer Home jumps tot he beginning of the command line End jumps tot he end of the command line Ctrl+LeftArrow goes to the left one word at a time Ctrl+RightArrow goes to the left right on word at a time Tab Completes input (in the console type get-c and press tab, press tab again…) F7 Shows history buffer (use the up and down arrow keys to navigate the buffer) Verifying PowerShell version Control your PowerShell version: $PSVerionTable How to Start with the Import System Modules Task? you can add all available modules to a Windows PowerShell session. get-module -listAvailable | import-module How to Start with Administrator Privileges? WinServer1 & eigen PC Rechtermuisknop PowerShell > Run as Administrator start-process powershell-verb runAs Update-Help

Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

  • Upload
    others

  • View
    29

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 1 van 30

Introductie

Windows PowerShell getting started

• a new Windows command-line shell, designed especially for system administrators

• includes an interactive prompt and a scripting environment (onafhankelijk of in combinatie)

• built on top of the .NET Framework common language runtime (CLR) and the .NET Framework

• accepts and returns .NET Framework objects

• introduces the concept of a cmdlet

o a simple, single-function command-line tool built into the shell

o you can use each cmdlet separately, but their power is realized when you use these

simple tools in combination to perform complex tasks

o more than one hundred basic core cmdlets

o you can write your own cmdlets and share them with other users.

• gives you access to the file system on the computer

• Windows PowerShell providers enable you to access other data stores

o such as the registry and the digital signature certificate stores

o as easily as you access the file system

• Windows PowerShell is not a scripting language, or at least it is not only a scripting language.

• PowerShell is an engine designed to execute commands that perform administrative tasks.

o Creating user accounts, Configuring services, Deleting mailboxes, …

• The Windows PowerShell ISE required the Microsoft .NET Framework 3.5 with Service Pack 1.

Interesting keys

Page up Jumps to the first command in the history buffer

Page down Jumps tot he last command in the history buffer

Up Arrow goes back one command in the history buffer

Down Arrow goes forward one command in the history buffer

Home jumps tot he beginning of the command line

End jumps tot he end of the command line

Ctrl+LeftArrow goes to the left one word at a time

Ctrl+RightArrow goes to the left right on word at a time

Tab Completes input (in the console type get-c and press tab, press tab again…)

F7 Shows history buffer (use the up and down arrow keys to navigate the buffer)

Verifying PowerShell version

Control your PowerShell version: $PSVerionTable

How to Start with the Import System Modules Task?

• you can add all available modules to a Windows PowerShell session.

get-module -listAvailable | import-module

How to Start with Administrator Privileges?

WinServer1 & eigen PC

• Rechtermuisknop PowerShell > Run as Administrator

start-process powershell-verb runAs Update-Help

Page 2: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 2 van 30

Asking for Help

Get-Help commandName

• You can also use Help

• PowerShell’s help system uses several parameters to reveal more information about commands

o -detailed

o -examples

o -full (toont alles, inclusief detailed help, per-parameter help, and usage examples)

o -online (opent een webbrowser en toont de cmdlet help van de Microsoft Web site)

Reading Help and Using Parameters

• Sommige parameters verwachten geen waarde (bvb. switches): -Recurse

• Voor andere parameters is er een waarde vereist, waarbij het helpbestand aangeeft wat voor

soort waarde de parameter verwacht: -Exclude <string[]>

• Andere parameters hebben waarden nodig die moeten worden opgegeven om de cmdlet te

laten functioneren: [-Name] <string>

• Sommige parameters zijn optioneel: [-Include <string[]>]

Extending the Shell

Extra cmdlets zijn beschikbaar via snap-ins en modules.

• Get-PSSnapin

• Add-PSSnapin

• Remove-PSSnapin

• Import-Module

• Remove-Module

• Get-Module (Get-Module -ListAvailable | Import-Module)

Navigating the File System

• PowerShell recognizes many command names you already know o Most common file-and-folder management commands from both cmd.exe and common

Unix shells are available o However, the parameters of the commands are often different. o For example, the following command will generate an error: dir /s

• External commands, such as ipconfig.exe, pathping.exe, and so on, continue to run exactly as they always have

o The distinction is that external commands are external executables, whereas commands such as “dir” are internal (or, intrinsic) commands

Hierarchical Storage

• The Windows file system is a hierarchical storage system o It consists of containers (folders, directories), which can contain leaf objects (files) as

well as other containers

• The file system is not the only hierarchical storage system in Windows o The registry, The certificate store, Active Directory

• One of PowerShell’s key design strategies is to adopt a set of techniques or processes, and then use them for similar tasks

o The commands to navigate the registry are the same as those used to navigate the file system

o The commands to navigate Active Directory are the same as those used to navigate the file system

Page 3: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 3 van 30

On Set of Commands for Many Forms of Storage

• The ability to use a single set of commands to navigate many forms of storage is made possible by a PowerShell feature called a PSDrive provider

• The PSDrive provider is an adapter that connects to a storage system and presents it to PowerShell o This enables common commands, like cd and dir, to be used against different kinds of

storage o Commands are passed to the provider of the drive you are accessing, and the provider does

whatever is necessary to implement the command

• Several providers ship with PowerShell by default: o The file system, The registry, The environment variables, The certificate store, IIS,

SQL Server, Active Directory

Managing PSDrives

• Get-PSDrive: geeft een overzicht van alle momenteel beschikbare schijven.

• New-PSDrive: creëert een nieuwe schijf. U moet de naam van de drive opgegeven, de naam van de te gebruiken provider en een startlocatie of pad.

• Remove-PSDrive: verwijdert een bestaand schijf.

PowerShell as cmd.exe or Bash

Path Manipulation

PowerShell Cmdlet

PowerShell alias

cmd.exe bash Purpose

Set-Location sl, cd, chdir ch, chdir cd Verander dir

Get-Location gl, pwd cd pwd Toont huidige dir

Get-ChildItem gci, dir, ls dir ls lijst van de huidige dir-inhoud

Push-Location pushd pushd pushd Bewaar het huidige pad op een stack

Pop-Location popd popd popd Verander neet de laatst pushed dir

File Manipulation

PowerShell Cmdlet

PowerShell alias cmd.exe bash Purpose

Copy-Item cpi, copy, cp copy cp Kopieër file of dir

Remove-Item ri, del, erase, rmdir, rd, rm

del, erase, rmdir, rd rm, rmdir Verwijder file of dir

Rename-Item rni, ren ren, rename mv Hernoem file of dir

Move-Item mi, move, mv move mv Verplaats file of dir

Tekst Manipulation

PowerShell Cmdlet

PowerShell alias

cmd.exe bash Purpose

Get-Content gc, type, cat type cat Geef file inhoud

Select-String ◇ find, findstr grep Toon teksten die overeenkomen met een patroon

Env var Manipulation

PowerShell Cmdlet

PowerShell alias

cmd.exe bash Purpose

Write-Output echo, write echo echo Print strings, variabelen, … naar standaarduitvoer

Set-Variable sv, set set set Stel de waarde van een variabele in / maak een variabele

Page 4: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 4 van 30

Process Manipulation

PowerShell Cmdlet

PowerShell alias

cmd.exe bash Purpose

Get-Process gps, ps tlist, tasklist ps Lijst van alle huidige runnende processen

Stop-Process spps, kill kill, taskkill kill Stop een runnend proces

Help Manipulation

PowerShell Cmdlet

PowerShell alias

cmd.exe bash Purpose

Clear-Host cls, clear cld clear Wis het scherm

Get-Help help, man help man Help over commands

Consistency is Discoverability

• Get-Command

o Geeft eenvoudige lijst met beschikbare commando’s (cmdlets) en functies van alle geladen

modules

o retourneert meer dan Get-Help (ook applications)

o Get-Command accepteert wildcards, Get-Command *proc* toont cmdlets die “proc”

bevatten

o Get-Command heeft een verb parameter, Get-Command -verb get: je ziet alle “Get”

cmdlets

o Get-Command heeft een noun parameter, Get-Command -noun *event* toont alle cmdlets that “event” hebben als deel van noun

Managing Aliases

• You can create your own aliases. You can import and export aliases to share them with

colleagues and coworkers.

• Get-Alias toon teen lijst van alle gedefinieerde aliassen. U kunt ook Dir Alias uitvoeren om een

directory lijst te zien van ALIAS: drive

• New-Alias creëert een nieuwe alias. Je moet de aliasnaam opgeven en de naam van het

commando waar het een alias voor is.

• Del of Rm kan gebruikt worden om aliassen te verwijderen van de ALIAS: drive

• Import-Alias en Export-Alias: aliaslijsten van en naar een bestand importeren en exporteren

Page 5: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 5 van 30

Hoofdstuk 1: Algemeen overzicht

Starten met PowerShell

Tips:

• “Ctrl+C”: uitvoer script afbreken

• commando “CLS”: shell interface schoonmaken

• Tab-completion: PowerShell commando automatisch aanvullen De Shell

• 2 omgevingen: Windows PowerShell

• Windows PowerShell ISE (Integrated Scripting Environment)

Syntax

Get-ChildItem -Path C:\Windows\System32 -Filter *.exe -Recurse

Meestal een WW; met een “Get-Verb” vraag je alle mogelijke werkwoorden; soms geen ww

zoals “New”. Wordt gevolgd door een ‘-e’ of een ‘/’.

WW wordt gevolgd door ZN

Parameters (opties) met daarachter de value (waarde)

Betekenis: toon alle bestanden (Get-ChildItem) uit de map “System32” (-Path) die eindigen op

extensie “.exe” (-Filter), alsook uit alle submappen (-Recurse)

Wildcards

‘*’: vervanging voor alle tekens (*.txt, verslag*.docx, Get-Serv*, *verslag*.txt)

‘?’: vervanging door 1 teken (verslag?.docx, verslag??.docx, verslag?.*, *verslag*.doc?)

Commando’s

• Show: “Show-Command Get-ChildItem” → u krijgt een venster om parameters in te vullen,

vervolgens kiest u copy om commando in de shell te kunne plakken

• Provider: “Get-PSProvider” → lijst van providers zoals: FileSystem, Certificaten, Windows

Register, …

Pipeline

|-teken → uitkomst van een commando doorgeven aan een volgend commando

Vb. print spooler stoppen: Get-Service -Name Spooler | Stop-Service

Cmdlets in de shell

Get commando

• Get-Help

• Get-Command

• Get-History

• Get-Item

• Get-ChildItem

Set commando

• Opgelet: Voorzichtig!

• Set-ACL: rechten op files en shares aanpassen

• Set-ADGroup: AD groepen aanpassen of toevoegen

• Set-ADUser: AD gebruikers aanpassen of toevoegen

• Set-Alias: aliassen aanmaken of wijzigen

• Set-Date: datum en tijd aanpassen

Page 6: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 6 van 30

In- & output

Exporteren

• Export-CSV “Get-ChildItem -Path ‘C:\windows’ | Export-Csv C:\scripts\archief\log.csv”

• Export-XML “Get-ChildItem -Path ‘c:\windows’ -Recurse | Export-Clixml

C:\scripts\archief\log.xml”

• Out-File “Get-ChildItem ‘C:\scripts\archief\*.*’ | Out-File -FilePath

C:\scripts\archief.txt”

• Out-Gridview “Get-ChildItem ‘C:\scripts\archief\*.* | Out-GridView”

• Get-Command -verb out = alle opties met “Out”

• Conversie: “Get-ChildItem -Path C:\scripts\archief\*.* |

• ConvertTo-Html \ Out-File c:\scripts\archief.html” (inhoud van de map “archief”

wegschrijven naar html)

Importeren

• “Import-Clixml -Path C:\scripts\archief\log.xml”

• “Get-Content -Path c:\ scripts\archief\log.xml” (enkel lezen)

Werken vanaf de commandline

Door een bestandsysteem “browsen”

PowerShell ondersteunt oude DOS-commando’s (mbv. aliassen)

• cd: Set-Location

• dir: Get-ChildItem

Aanmaken en verwijderen van bestanden

• Idem als van een object

• New-Item: “New-Item -ItemType file C:\scripts\new.txt”

• Remove-Item: “Remove-Item -Path C:\scripts\new.txt”

• Ook aliassen “del” en “rd” zijn mogelijk

PowerShell drives

• PowerShell herkent standaard uw drives (bv. “C:”)

• Echter is er veel meer mogelijk, nl.: certificaten (Cert), register (HKCU, HKLM), …

Eenvoudige scripts

Een aantal commando’s na elkaar uitvoeren (automatiseren!)

Vereiste: eenvoudige teksteditor als Kladblok of scripteditor als Notepad++

Kan ook in de PowerShell Integrated Scripting Environment (ISE)

Extensie: “.ps1”

Uitvoeren van een script

2 manieren om een script uit te voeren:

1. Via de commandline (cmd): “powershell.exe -noexit c:\script.ps1”

2. In PoweerShell zelf (volledige pad moet worden opgegeven): “.\script.ps1”

Page 7: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 7 van 30

Executionpolicy

• Standaard geen scripts uit te voeren

• Get-ExecutionPolicy

o Restricted: scritps niet toegelaten

o AllSigned: enkel scripts ondertekend door trusted publisher

o RemoteSigned: gedownloade scripts ondertekend door trusted publisher & eigen

scripts

o Unrestricted: alle scripts worden uitgevoerd

• “Set-ExecutionPolicy RemoteSigned” of via ISE (pop-up)

Variabelen

Variabelen in PowerShell

$-teken om variabele te definiëren (Vb. $var = ‘computername’ en ${My Variable} = 5 )

=-teken om waarde toe te kennen

Enkele en dubbele aanhalingstekens

• Enkele aanhalingstekens: letterlijke weergave van een tekst (zoveel mogelijk toepassen)

• Dubbele aanhalingstekens: variabelen worden ingevuld in de tekst; echter niet meer

geüpdatet achteraf

• ‘-teken: variabele als exacte tekst lezen

Verwijderen van een variabele

• “Dir Variabele” → lijst variabelen opvragen

• “Del Variable:<variabele>” → variabele verwijderen

• “Get-Variable | Remote-Variabele” → alle variabelen verwijderen (foutmelding:

standaardvariabelen kunnen niet verwijderd orden, de rest is wel verdwenen)

• “Remove-Variable -Name <variabelenaam>” → nette manier om variabele te verwijderen

• Opgelet: geen $-teken plaatsen, enkel de naam!

Declareren van een variabele

• Van tevoren aangeven wat de inhoud/type (getal, tekst, …) van een variabele is

• Getal: [int]$a = 5

• Tekst: [string]$b = ‘3’ of [string]$b = ‘drie’

Condities

De If-conditie

if(conditie){if actie}[optioneel]elseif(conditie){elseif actie}[optioneel]else{else actie}

PowerShell-conditie Betekent Ook wel bekend als

-eq gelijk aan =

-lt kleiner dan <

-gt groter dan >

-le kleiner of gelijk aan =<

-ge groter of gelijk aan =>

-like lijkt op & of *

Page 8: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 8 van 30

Geneste If

Switch

Loops

Do until

Do {actie} until (conditie)

Expressies gescheiden door ‘;’

Do while

Do {actie} while (conditie)

Nieuwe expressie op nieuwe regel

For loops

For (conditie){actie}

Oneindige lus? Afbreken met Ctrl+C!

Foreach loop

Foreach (item IN set){actie}

Een set kan ook opgevraagd worden…

Een array (@-teken)

Procedures en functies

• Procedure

o Afgescheiden blok code dat een duidelijk op zichzelf staand doel of gebruik heeft

o Meestal niet als zodanig in een script aangeduid

• Functie

o Met keywords aangeduid en duidelijk gedefinieerd

o Blokken code die vaak meermaals worden uitgevoerd

o Heeft duidelijk een kop en een staart

Functies – Argumenten en return codes

Function naam ($arg1, $arg2)

{actie; return $output}

Page 9: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 9 van 30

Werken met COM en WMI

• Wat PowerShell niet zelf kan, kunt u doen met .COM en .WMI

• COM (Component Object Model)

o softwaremodel dat als basis staat van veel MS toepassingen, zoals Office

o Bv.: Excel vanuit de shell of script aansturen

• WMI (Windows Management Instrumentation)

o alle Windows objecten beschikbaar maken

o Windows besturingssysteem uitlezen en managen

COM (Component Object Model)

• Eerst definiëren

o “$variabele = New-Object -comobject Comapp.application”

• Voorbeeld (excel opstarten en waarden invullen)

• Voorbeeld (Internet Explorer opstarten):

WMI (Windows Management Instrumentation)

• “Get-WMIObject -class Win32_class”

• Alles uit Windows besturingssysteem bekijken en bewerken

o opvragen geïnstalleerde besturingssysteem of updates ervan

o uitlezen van hardware specificaties

• Alle WMI-objecten weergeven

o “Get-WmiObject -List -Namespace root\wmi”

• Alle Win32 Cmdlets weergeven

o “Get-WmiObject -List | Where-Object `

{ $_.name -match ‘Win32’}”

Handig om te weten

• Commentaar

o # → 1 regel commentaar

o <# … #> → meerdere regels commentaar

• Parameter – WhatIf

o kijken wat commando doet zonder actie op object te ondernemen

o werkt enkel met acties die bewerking doen op een object (Set, New-, Add-, Remove-, …)

o Voorbeeld: Remove-Item -Path C:\scripts -WhatIf

• Parameter – Confirm

o pop-up-venster in PowerShell ISE waarbij bevestiging wordt gevraagd

• Write-output

o meestal wegschrijven naar console met “Write-Host”

o Andere manier: “Write-Warning”

o Voorbeeld 1:

o Voorbeeld 2:

Page 10: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 10 van 30

Hoofdstuk 2: Variables & constants

Variables & Naming

• New-Variable

• Set-Variable

• Clear-Variable

• Remove-Variable

• Get-Variable

• Dir variable

Managing Variables

$wmi = Get-WmiObject

Win32_OperatingSystem

$wmi.Caption

$wmi.Reboot()

Variable Types

• Common types

o String, Int, Single and Double, Boolean, Array, Hashtable, XML, Char

[int]$a = “5”

[string]$ = “Hello”

Variable Declaration &Strict Mode

• Je moet variabelen niet op voorhand declareren

o PowerShell heeft de Set-StrictMode cmdlet, die de strict mode optie instelt.

Set-StrictMode -version 2.0

Function MyFunction {

Write $var

$var = 1

Write $var

}

MyFunction

Write $var

Enkele en dubbele aanhalingstekens kunnen worden gebruikt voor het afbakenen van tekenreeksen.

Escape Character

• PowerShell’s escape-teken ` wordt gebruikt om de speciale betekenis van het volgende

onmiddellijk weg te nemen.

o Conversie van een spatie naar een letterlijke letter. Dit is handig voor padnamen die

spaties bevatten

o Conversie van een $-teken naar een letterlijk dollarteken. Dit is handig als het

dollarteken als tekst nodig is

• Het escape-teken kan ook de speciale betekenis van de carriage return verwijderen

o Dit proces kan worden gebruikt om een PowerShell-opdracht met één regel in meerdere

regels te splitsen voor een betere leesbaarheid

• Kan worden gebruikt om een speciale betekenis toe te voegen aan bepaalde niet-speciale tekens

o `t creëert een tab

o `n creëert een nieuwe regel

o `r is een return

• help about_escape_characters

Page 11: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 11 van 30

Arrays

• Het toewijzen van variabelen aan objecten, in tegenstelling tot tekst, kan arrays van objecten in

de variabele plaatsen

$var = Get-Service

• Door komma’s gescheiden tekstlijsten worden automatisch geconverteerd naar arrays door de

schaal

$myarray = 1,2,3,4,5,6,7,8,9,0

• Indexnummers worden gebruikt om te verwijzen naar afzonderlijke elementen, waarbij het

eerste object in de array een index van 0 heeft.

$services = Get-Service

$services[0]

$services[1]

• Arrays hebben ook een property Count, waarmee het aantal elementen in de array wordt

weergegeven

$services.count

Hashtables

• Hashtables zijn speciale soorten arrays waarbij elk element bestaat uit key-value pair

o Elke key bevat een value. Van elke value kan worden verwezen door een stipverwijzing

naar de key

PS C:\> $hash = @{"Server1"="192.168.15.4";

"Server2"="192.168.15.11“;"Server3"="192.168.15.26"}

PS C:\> $hash.Server1

192.168.15.4

o Hashtables hebben ook een property Count

o Hashtables kunnen doorgestuurd worden naar Get-Member om andere eigenschappen

en methoden te zien

$hash | Get-Member

Arithmetic operatoren

• Rekenkundige operatoren kunnen wiskundige berekeningen uitvoeren in de shell en worden

door de shell geëvalueerd in standaard order-of operation regels

o Vermenigvuldiging (*), deling (/) van links naar rechts

o Optellen (+) en aftrekken (-) van links naar rechts

o Parenthetische uitdrukkingen worden van links naar rechts geëvalueerd en van de meest

diep geneste expressie naar buiten

• De shell herkent algemene Base-2 values

o KB,MB, GB, TB, KB als 1,024 enzovoort

• Het +-teken kan ook gebruikt worden voor string aaneenschakeling ($var1 + $var2)

+= x += y x = x + y

-= x -= y x = x – y

*= x *= y x = x * y

/= x /= y x = x / y

++ x += 1 x = x + 1

-- x -= 1 x = x - 1

Page 12: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 12 van 30

Vergelijkingsoperatoren

Hoofd vergelijkingsoperatoren

Case-sensitive operatoren

Case-Insensitive operatoren

-eq -ceq -ieq equal to

-ne -cne -ine not equal to

-le -cle -ile less than or equal to

-ge -cge -ige greater than or equal to

-gt -cgt -igt greater than

-lt -clt -ilt less than

Boolean operatoren

• -and returns $True wanneer beide kanten true zijn

• -or returns $True met een of beide kanten zijn true

• -not keert True and False om

– gt 10 –or 10 –gt 4

4 –gt 10 –and “Hello” –ne “Hello”

(4 –gt 10 –and (10 –lt 4 –or 10 –gt 5) –and 10 –le 10

(-not 5 –eq 5) –and (10 –eq 10)

Meer vergelijkingsoperatoren

• -contains vertelt u of een bepaald object binnen een collection bestaat

• -like voert niet-hoofdlettergevoelige vergelijkingen van wildcard strings uit

• -clike voert hoofdlettergevoelige vergelijkingen van wildcard strings uit

• -notlike het logische omgekeerde van -like

• -cnotlike het logische omgekeerde van -clike

• -is vertelt u of een object van een bepaald type is of niet

• -as converteert een bepaald object naar een ander type

Hoofdstuk 3: Scripts & constructs

Scripts

Scripts bevatten een of meerdere opdrachten die u wilt dat de shell in de juiste volgorde uitvoert.

• Het bewerken van scripts kan worden uitgevoerd in elke teksteditor; de PowerShell ISE

o Het schrijven van scripts in de shell is geen goede gewoonte

• Talloze externe partijen bieden alternatieve commerciële en gratis bewerkingsomgevingen

o Idera’s PowerShellPlus

o iTriopoli’s AdminScriptEditor

o SAPIEN Technologies’ PrimalScript

o Quest Software’s PowerGUI

• Schrijf opdrachten direct in een script in Windows PowerShell ISE en test commands door ze te

markeren en op F8 te drukken.

• Houd er rekening mee dat cmdlets zoals Read-Host een invoervenster voor grafische dialoog

genereren in plaats van een command line prompt.

• Breek lange lijnen in verschillende fysieke lijnen door te drukken op Return after the pipe line

character

Get-Process |

Sort-Object VM –descending |

Select-Object –first 10 |

Export-CSV procs.csv

Page 13: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 13 van 30

Prompting

The Read-Host cmdlet

• Enables de creatie van een prompt voor invoer bij scriptuitvoering

Enabling scripting support

• Default zal Windows het uitvoeren van scripts verhinderen

o Kan aangepast worden via Group Policies

o Kan aangepast worden met Set-ExecutionPolicy

• Zes levels die ingesteld kunnen worden:

o Restricted = default

o AllSigned = alle scripts moeten digital getekend worden door een trusted publisher

o RemoteSigned = scripts gedownload vanaf het publieke netwerk moet digitaal getekend

worden

o Unrestricted = alle scripts worden uitgevoerd, mits positief antwoord op prompt v/h

systeem

o Bypass = alle scripts worden uitgevoerd, zonder waarschuwing of prompts

o Undefined = wist de huidige execution policy, behalve wanneer deze bepaald werd via

GPO

• Je kan ook de scope instellen van de execution policy

• Scope van de execution policy: 3 mogelijkheden

o Process: Execution policy is enkel geldig voor het huidige PowerShell proces

o CurrentUser: Execution policy enkel geldig voor de huidige gebruiker

o LocalMachine: Execution policy geldig voor alle gebruikers van de computer

• Meest geschikte instelling?

Set-ExecutionPolicy RemoteSigned

Get-ExecutionPolicy -List

Scripts uitvoeren

• File association aanpassen en .ps1 bestand dubbelklikken wordt afgeraden

• In de console de naam van het script intypen

o Indien locatie script opgenomen is in de path parameter zal het script uitgevoerd worden

o Zoniet: in de map gaan staan waar het script staat

• Script triggeren van buiten de console

o -noexit: houdt console open na uitvoering

Oefening 1

Maak het volgende script aan (bestand met .ps1 extensie) en sla het op in een map. Bedenk wat dit

script doet, en voer het nadien uit van buiten de powershell console.

Page 14: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 14 van 30

Oefening 2

Zoek op wat de speciale betekenis is van de variabele $args. Gebruik je kennis van providers en

oplijstingen opvragen. Zoek ineens ook uit welke speciale variabelen powershell allemaal in huis

heeft!

Oefening 3

Pas het overgetypte script uit oefening 1 aan zodat je bij het oproepen van het script

computernamen kan doorgeven die in het script gebruikt worden. Test uit!

Scripting Constructs

• If…ElseIf…Else

• Switch

• Break

• For

• While / Do / Until

• ForEach

Onthoud altijd: scripting constructs zijn geen vereiste functie van de shell. Gebruik alleen als dat

nodig is. Vaak zijn opdrachten met 1 regel voldoende!!

If … ElseIf … Else

General Construct Notes

Nested Constructs

Typing Constructs

Page 15: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 15 van 30

Switch The Break Keyword

Switch Options

For

While / Do / Until

ForEach

Onhoud: ForEach en ForEach-Object zijn vaak helemaal overbodig!

Changing Your Thinking

• Onthoud: PowerShell hoeft geen scripttaal te zijn!

o PowerShell is echter vooral een oplossing voor administratieve automatisering. Er zijn

meestal opdrachtsequenties die taken uitvoeren en vereisten geen echte scripting.

• Gebruik de PowerShell-gerichte manier om taken te vervullen

o efficiënter

o benodigde taken sneller volbrengen

o vermogen om opdrachtsequenties on the fly te bouwen verbeteren, problemen oplossen

en de klus van IT veel beter te klaren!

Page 16: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 16 van 30

Hoofdstuk 4: WMI, Active Directory en reading/writing files

Working with WMI

WMI = Windows Management Instrumentation

WBEM = Web Based Enterprise Management

WMI = een object georiënteerde interface naar de CIM

WMI zit verankerd in Windows en kan gebruikt worden binnen verschillende soorten scripts, o.a.

VBscript, PowerShell, …

Met WMI hebben we een krachtige tool om

• parameters van het Windows OS op te vragen en/of in te stellen (BIOS instellingen)

• netwerkeigenschappen van systemen op te vragen en/of te manipuleren (TCP/IP)

• services van systemen op te vragen en/of te manipuleren

WMI model

WMI communicatie maakt gebruik van RPC protocol.

• WMI is een uitdaging in combinatie met firewalls

• Windows Firewall aangepast aan werken met WMI

WMI opgebouwd uit verschillende providers die toegang geven tot andere delen van MS

technologie.

WMI geeft op die manier toegang tot een repository van data die gestructureerd is in zogenaamde

namespaces. Elke namespace vertegenwoordigd een andere MS technologie.

Een namespace = een verzameling van gelijksoortige informatie. Aanwezige namespaces kan je

opvragen via WMI control properties (computer management). Alternatief: opvragen van

namespaces met behulp van de powershell scriptomatic.

WMI namespaces & klassen

• Meest gebruikte namespace voor ons: root\CIMv2

• in een namespace zijn klassen aanwezig

o deze definiëren de properties en de methodes van de objecten

o alle klassen opvragen met Get-WmiObject-List

o de juiste klasse vinden die voor jou probleem de (property) of de methode bevat?

o Werken met wildcards en keywords, bvb. Get-WmiObject-List “*bios*”

o Alternatief 1: zoeken op MSDN of scriptcenter

o Alternatief 2: CIM studio gebruiken

• Gebruik CIM studio en Powershell Scriptomatic

o CIM studio enkel in IE gerund als administrator, IE versie instellen op < 9 via F12

o active X toelaten, verrekijker icoon om te zoeken op keywoord (alles aanvinken)

o properties en methodes browsen in CIM studio

o script maken dat alle properties op lijst in scriptomatic

gwmi win32_Volume | get-member

• WMI is constant aan veranderingen en evolutie onderhevig, dus research blijft noodzakelijk!

• Nieuwe namespaces, nieuwe klassen, nieuwe properties en methodes bij nieuwe producten

Get-WmiObject win32_desktop | Select *

Get-WmiObject win32_desktop | Select name, screensaverexecutable

Page 17: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 17 van 30

De manier waarop credentials worden doorgegeven, wordt bepaald door het impersonation leven

1. Anonymous: credentials worden NIET doorgegeven

2. Identify: andere partij mag je credentials zien, maar niet gebruiken

3. Impersonate: andere partij mag je credentials zien en enkel gebruiken om request uit te voeren

4. Delegate: andere partij mag je credentials zien en onbemerkt gebruiken en doorgeven.

Staat default ingesteld op “impersonate”.

Andere credentials dan die van de logged-on user kunnen worden doorgegeven met de

switch -credential (en dan username opgeven, paswoord wordt gevraagd bij uitvoering).

Oefeningen

1. Connecteer met de klasse win32_computersystem

2. Zorg dat je uit die klasse alle properties te zien krijgt

3. Formatteer de output zodanig dat je de systeemproperties wegfiltert (beginnen met een _)

4. Connecteer met de klasse win32_logicaldisk

5. Gebruik de filter switch om enkel de lokale drives te tonen (drivetype 3). Andere drive-types zijn

4 (networkdrive), 5 (CD drive) en 6 (RAM disk)

6. Connecteer met de klasse win32_service en toon van alle services de displayname en hun state

7. Connecteer met de klasse win32_processen en filter op naam explorer.exe

Info opvragen met WMI

• Ook mogelijk om met SQL achtige syntax informatie op te vragen

• gebruik maken van de -query switch

• bovenaan in je script de query definiëren

• in de query definitie hoef je niet alles op te vragen met *, je kan ook selectief te werk gaan

• je kan ook info opvragen van meerdere computers tegelijk op volgende manieren:

Get-WmiObject Win32_Service -computername “PC1”, “PC2”

Get-WmiObject Win32_Service (Get-Content c:\namen.txt)

• De opgelijste computers worden sequentieel gecontacteerd voor de info. Als er een computer

afstaat of niet reageert, zal dit dus de nodige vertragingen en errors veroorzaken.

• Werken met WMI is meestal werken met grote hoeveelheden data = computationally expensive

• om performatie te optimaliseren, is het filteren van data belangrijk

o via Where-Object

o via de -filter mogelijkheid

Page 18: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 18 van 30

Instellingen wijzigen met WMI

• WMI methoden

o Sommige methoden hebben argumenten nodig, andere niet, maar altijd ronde haken

gebruiken!

o Sommige methoden kunnen enkel uitgevoerd worden met voldoende privileges,

mogelijkheid tot gebruik van -enabledAllPrivileges switch

• als de methode argumenten nodig heeft, dan moeten deze doorgegeven worden in de juiste

volgorde!

• Hoe weet je of een methode argumenten nodig heeft?

o Via WMI CIM studio: via edit method parameters

o Via powershell console

([wmiclass]’class-name’).GetMethodParameters(‘method-name’)

• Aanroepen van methoden kan rechtstreeks: Invoke-WmiMethod

invoke-wmimethod -class win32_networkadapterconfiguration -name enableDHCP

• Als er argumenten moeten opgegeven worden voor de methode doe je dit via -argumentlist

invoke-wmimethod -class win32_process -name create -argumentlist notepad.exe

• aanroepen van methoden kan ook onrechtstreeks door eerst object aan te maken end an met de

. notatie de methode op te roepen

$NICs=Get-WmiObject Win32_NetworkAdapterConfiguration | Where {$_.IPEnabled -eq “TRUE”}

foreach($kaart in $NICs) {$kaart.EnableDHCP()}

• Machine rebooten

$ToBoot = get-wmiobject Win32_OperatingSystem

$ToBoot.Reboot()

Restart-Computer

Remoting met WMI

• windows server laat WMI remoting default toe, Windows clients niet!

• Te wijten aan de instelling van de Windows firewall

o instellen via Windows Firewall with advanced security

o nieuwe inbound rule aanmaken

o kiezen voor een pre-defined rule en WMI selecteren

o in domein omgeving doe je het bovenstaande in een GPO

• Get-WmiObject: remote systemen specifiëren om te connecteren; credentials specifiëren

waarmee dit moet gebeuren.

• Probleem: als je de -crendential switch gebruikt moet je voor elk systeem waar je naar

connecteert opnieuw een paswoord ingeven

• Oplossing: Get-Credential gebruiken om een credential object in een variabele op te slaan

$comps= @(“Server1”, “Server2”, “Server3” )

@creds= Get-Credential -credential domein\administrator

Get-WmiObject -computername $comps -credential $creds

• De namen van de machines waar je de informatie van opvraagt, zitten opgeslagen in de _Server

variabele. Default wordt dit echter niet getoond bij het weergeven van output

• Oplossen met een pipeline naar Select-Object

$comps= @(“Server1”, “Server2”, “Server3” )

@creds= Get-Credential -credential domein\administrator

Get-WmiObject -computername $comps -credential $creds |

Select-Object smbiosbiosversion, manufacturer, name, serialnumber, _server

Page 19: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 19 van 30

• Een Powershell remote sessie opzetten naar een andere machine en binnen deze sessie met

WMI aan de slag gaan

• Je hebt dan bepaalde nadelen van WMI niet meer

o WMI = firewall aanpassingen nodig

o WMI remoting moet met local admin account

o de naam van het remote system niet default in output

$comps= @(“Server1”, “Server2”, “Server3” )

@creds= Get-Credential -credential domein\administrator

Invoke-Command -computername $comps -ScriptBlock {Get-WmiObject win32_bios}

-Credentials $creds

• Opgelet voor de consumptie van beschikbare bandbreedte als je WMI informatie van remote

systemen opvraagt!

• Best-practice: de opgevraagde data aan de bron al voldoende filteren en de return data

stockeren (in een variabele of een file) om er op een later tijdstip terug mee te kunnen werken

• Stockeren van return data is uiteraard niet geschikt voor data die vaak aan verandering

onderhevig is.

Readin’ and Writin’ Files

De eenvoudigste en meest directe plaats om gegevens voor langdurig gebruik op te slaan is een

bestand.

PowerShell maakt het lezen en schrijven van eenvoudige tekstbestanden niet alleen gemakkelijk,

maar stelt u ook in staat nog complexere bestanden te maken, zoals XML- en HTML-bestanden.

Manipulation files includes: Creating, Deleting, Copying, Moving, Renaming files and folders.

Navigating the File System

Navigeren naar een andere locatie: Set-Location of Cd

• 1 directory hoger: (relatief) Set-Location ..

• Bovenliggende directory of huidige drive: (relatief) Set-Location \

• Specifiek directory: (absoluut) Set-Location c:\windows

• Directory naam van de omgevingsvariabele: (absoluut) Set-Location $env:windir

• Directory naam van de variabele: (absoluut) Set-Location $home

Relatief pad is afhankelijk van de huidige directory.

• .\test.txt : verwijst naar het bestand test.txt in de huidige directory.

• ..\test.txt : verwijst naar het bestand test.txt in de bovenliggende directory

Absoluut pad is altijd uniek en onafhankelijk van de huidige directory.

Relatief pad omzetten in absoluut pad: Resolve-Path .\test.txt

Character Meaning Example Result

. Huidige directory

ii . Opent de huidige directory in Windows Explorer

.. Bovenliggende directory

Cd .. Verandert naar de bovenliggende directory

\ Root directory Cd \ Verandert naar de bovenste map van een drive

~ Home directory

Cd ~ Verandert naar de directory die PowerShell automatisch aanmaakt in eerste instantie

Nieuwe directories creëren

md test1

New-Item Test2 -type Directory

Page 20: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 20 van 30

Directories en bestanden verwijderen

Remove-Item C:\temp

Remove-Item -Recurse C:\temp Remove-Item testfile.txt -force

Als een directory zeker verwijderd mag worden, gebruik -Recurse (inclusief subdirectories)

Als een bestand tegen schrijven is beveiligd moet u -force gebruiken

Directory contents verwijderen: $recents = [Environment] ::GetFolderPath(“Recent”)

Remove-Item $recents\*.* -whatIf

Directories en bestanden verplaatsen en kopiëren

Move-Item en Copy-Item

Copy-Item C:\temp C:\temp2 Copy-Item -Recurse C:\temp C:\temp2

Wildcard karakters gebruiken:

Copy-Item $home\*.ps1 ([Environment]::GetFolderPath(“Desktop”))

$desktop = [Environment]::GetFolderPath(“Desktop”)

New-Item ($desktop + “\PS Scripts”) -ItemType Directory

Move-Item ($desktop + “\*.ps1”) ($desktop + “\PS Scripts”)

Directories hernoemen

Rename-Item C:\temp C:\temp2 Bestand hernoemen: Rename-Item testfile.txt testfile.csv

Nieuwe bestanden creëren

• Leeg bestand New-Item “new file.txt” -type File

• Out-File en Set-Content Dir > info1.txt

Dir | Out-File info2.txt

Dir | Set-Content info3.txt

Set-Content info4.txt (Get-Date)

Toegang tot bestanden en directories

Vermelding van directory inhoud: Get-ChildItem

Enkel geïnteresseerd in de namen ervan: Get-ChildItem *.ps1 -name

• -recurse : als je wilt dat je zoekopdracht ook elke subdirectory bevat

• -filter of -include : lijst van alle bestanden van een type

• -exclude : bepaalde bestanden onderdrukken

In tegenstelling tot -filter accepteren -include en -exclude wel arrays.

Get-ChildItem: $file = Get-ChildItem c:\autoexec.bat

$ file | Format-List *

Get-Item gebruikt een andere benadering voor toegang tot het bestandsobject, maar met hetzelfde

resultaat: $file = Get-Item c:\autoexec.bat

$file | Format-List *

Speciale directories vinden

• Application data = $env:localappdata

• User profile = $env:userprofile

• Data used in common =

$env:commonprogramfiles

• Public directory = $env:public

• Program directory = $env:programfiles

• Roaming profiles = $env:appdata

• Temporary files (private) = $env:tmp

• Temporary files = $env:temp

• Windows directory = $env:windir

GetFolderPath() methode geeft meer opties

Page 21: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 21 van 30

Paths construeren

• Gebruik Join-Path $path = Join-Path ([Environment]::GetFolderPath(“Desktop”)) “test.txt”

• Gebruik de methoden van Path .NET klas:

$path = [System.IO.path]::Combine([Environment]::GetFolderPath(“Desktop”),“test.txt”)

Methode Beschrijving

ChangeExtension() Verandert de bestandsextensie

Combine() Combineert pad strings; komt overeen met Join-Path

GetDirectoryName() Geeft de directory weer; komt overeen met Split-Path -parent

GetExtension() Geef de bestandsextensie weer

GetFileName() Geef de bestandsnaam weer; komt overeen met Split-Path -leaf

GetFileNameWithoutExtension() Geeft de naam zonder bestandsextensie weer

GetFullPath() Geeft het absolute pad weer

GetInvalidFileNameChars() Lijst van alle karakters die niet toegestaan zijn in een bestandsnaam

GetInvalidPathChars() Lijst van alle karakters die niet toegestaan zijn in een pad

GetPathRoot() Geeft de root directory, komt overeen met Split-Path -qualifier

GetRandomFileName() Geeft een willekeurige bestandsnaam

GetTempFileName() Geef een tijdelijke bestandsnaam in de directory Temp

GetTempPath() Geeft het pad van de directory voor tijdelijke bestanden

HasExtension() True, als het pad een bestandsextensie heeft

IsPathRooted() True, als het pad absoluut is, komt overeen met Split-Path -isAbsolute

• New-PSDrive : Nieuwe schrijf creëren

• Remove-PSDrive : Schijf verwijderen

• Get-PSDrive : Overzicht van schijven krijgen

De inhoud van tekstbestanden lezen

• Get-Content : inhoud van een tekstbestand op te halen

• Select-Object : als je enkel de eerste x lijnen van een bestand wilt lezen

• Select-String : informatie filteren

Bestanden schrijven

1. Omleiden van de uitvoer naar een bestand met behulp van de operator >

2. Out-File

3. Set-Content

Out-File opties:

-encoding Specificeert de karaktercodering die in het bestand wordt gebruikt. Deze codering kan een van de volgende waarden zijn: Unicode, UTF7, UTF8, UTF32, ASCII, BigEndianUnicode, Default of OEM. Unicode is de default encoding type.

-append Wordt toegevoegd aan het bestand in plaats van de inhoud te overschrijven.

-width Bepaalt het maximale aantal karakters op elke regel. Als de regel die wordt geschreven meer dan deze waarde bevat, wordt deze gewoon afgekapt. Default volgt deze switch de waarde die wordt gebruikt door de huidige instellingen van de Windows PowerShell-console.

-force Probeert eventuele beperkingen te overwinnen voor het schrijven naar het uitvoerbestand, zoals het overschrijven van het alleen-lezen attribuut v/h bestand.

-noClobber Voorkomt dat Out-File probeert te schrijven naar het uitvoerbestand als het al bestaat.

-Confirm Vragen om bevestiging voordat u verder gaat met de opdracht.

Page 22: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 22 van 30

Werken met WML

XML = Extensible Markup Language

XML = een documentindeling waarmee u uw eigen markeringen in het document kunt definiëren.

In het algemeen beschrijft en definieert XML gegevens, niet hoe de gegevens op het scherm moeten

verschijnen. Bij XML maakt het niet uit hoe het document er uiteindelijk uit zal zien; zijn enige zorg is

om betekenis te geven aan de gegevens die het bevat.

Een boomstructuur:

XML bestanden lezen

• Get-Content : retourneert alleen de inhoud van het bestand

Om aan Windows PowerShell te vertellen dat u wilt dat het bestand wordt behandeld als een

XML-bestand, moet u de variabele casten met de [xml] tag

[xml] $myXMLfile = Get-Content C:\temp\sample.xml

U hebt toegang tot de verschillende elementen van het XML-bestand door de punt operator te

gebruiken om toegang te krijgen tot elk onderliggende element in de structuur

XML gegevens wijzigen

• .CreateElement() : nieuwe node creëren

• .SetAttribute() en psbase.innertext : de verschillende kenmerken en gegevens invullen

• .AppendChild() : in een boom steken

XML bestanden schrijven

Nu de gegevens zijn bijgewerkt, wilt u misschien doorgaan en de wijzigingen opslaan. U slaat XML-

gegevens op in een bestand door de save methode van het XML-object aan te roepen.

$myXMLFile.save(“C:\temp\sample.xml”)

Objecten opslaan in XML bestanden

Objecten kunnen elk aantal eigenschappen en waarden bevatten en zonder XML is de enige andere

optie om de objecten in een binair formaat op te slaan.

Windows PowerShell biedt u de mogelijkheid om objecten naar en van XML-bestanden net zo

gemakkelijk te exporteren en importeren

• Export-CliXML

• Import-CliXML

Het verwerken van door komma’s gescheiden lijsten

• Import-Csv : als u informatie wilt verwerken uit door komma's gescheiden lijsten

Import-Csv begrijpt de komma-indeling en geeft de gegevens kolom voor kolom weer.

De eerste regel wordt gelezen als een kolomkop

Page 23: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 23 van 30

Administration of Active Directory under Windows 2012

Active Directory module bevat:

• cmdlets bieden de functionaliteit die de grafische Active Directory beheercentrumconsole

van kracht voorziet

• cmdlets communiceren met een webservice die deel uitmaakt van Active Directory in

Windows Server 2008 R2

o De webserver moet op slechts 1 domeincontroller op uw lokale site worden

geïnstalleerd

• Deze webservice kan worden toegevoegd aan Windows Server 2003 en Windows Server

2008 door de AD Management Gateway-service te downloaden en te installeren

Een module toevoegen

Import-Module ActiveDirectory

Eenmaal geladen, voegt de module een reeks opdrachten toe voor het beheer van Active Directory.

U kunt de lijst met opdrachten ophalen met behulp van: Get-Command -module ActiveDirectory

Active Directory: Drive

Naast het toevoegen van de Active Directory module, wordt er ook een PSDrive provider toegevoegd

• Deze provider wijst de AD: drive to uw aanmeldingsdomein

• Het belangrijkste doel van deze schijf is om een beveiligingscontext te bieden voor het

uitvoeren van cmdlets

Wanneer u een Active Directory cmdlet uitvoert, worden automatisch de legitimatiegegevens en het

domein van het huidige AD: drive gebruikt

• Dit elimineert de noodzaak om referenties voor elke opdracht in te voeren

• Omdat het een toegewezen drive is, wordt het ook mogelijk andere drives aan andere

domeinen en inloggegevens toe te wijzen. Cmdlets worden uitgevoerd met de referenties die

aan die drive zijn gekoppeld

• Als u een andere set referenties of een ander domein wilt gebruiken, moet u eerst naar de

juiste toegewezen drive gaan en vervolgens cmdlets uitvoeren

dc Domain component De componenten van een domeinnaam worden gescheiden door punten. De volgorde van componenten in AD gaat van het laagste niveau → hoogste niveau. Als uw domein bvb deploy.com wordt genoemd, verwijst u ernaar in LDAP-terminologie als dc = deploy, dc = com.

ou Organizational unit Gebruik dit om naar OU's te gaan. De financiële OU in het domein deploy.com zou ou = finance zijn, dc = deploy, dc = com. Als u geneste OU's hebt, geeft u eerst een lijst met de diepere OU's. De OU van Cleveland in de OU van Finance in het domein deploy.com zou dat bvb zijn ou = cleveland, ou = finance, dc = deploy, dc = com.

cn container In AD kunt u hiermee navigeren in speciale containers, zoals Gebruikers. De gebruikerscontainer in het deploy.com-domein zou cn = Users, dc = deploy, dc = com zijn.

Active Directory: Forest Info

Forests bieden een beveiligingsgrens voor uw organisatie in AD.

• Get-ADRootDSE = map informatiestructuur voor het domein weergeven

• toont de basisinformatie over uw domein en naamgevingsconventies

Page 24: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 24 van 30

Active Directory: Domain Controllers

Get-ADDomainController -Discover = alle domeincontrollers weergeven

Voeg het domein toe waarnaar u kijkt en u kunt alle DC's in uw omgeving vinden:

Get-ADDomainController -Discover -DomainName contoso.com

Active Directory: Global Catalog servers

GCs bevatten een subset van de gegevens die zijn opgeslagen in AD.

GC's omvatten meerdere domeinen, ze helpen bij gebruikersverificatie en verwerking van het

universele groepslidmaatschap

• weten waar uw GC's zich bevinden, helpt uw AD-omgeving soepel te laten verlopen.

Get-ADForest deploy.com | Format-List GlobalCatalogs

Active Directory: FSMO Roles

Rolnaam PowerShell naam Beschrijving

Schema Master SchemaMaster Houdt het schema of definitie vast voor alle AD-objecten in uw forest. Er kan er maar één zijn voor de hele forest.

Domain Naming Master DomainNamingMaster Bepaalt de toevoeging en verwijdering van domeinen in uw forest. Er kan er maar één zijn voor de hele forest

PowerShell naam Beschrijving

PDCEmulator Verwerkt alle aanvragen voor wachtwoordwijzigingen van uw gebruikers. Het repliceert ook de wijziging in het gehele domein. Er is er één per domein in uw forest.

RIDMaster Sequences the relative IDs (RIDs) voor het hele domein wanneer u nieuwe objecten maakt. De relatieve ID wordt gecombineerd met de domein-SID om ervoor te zorgen dat voor elk nieuw object in het domein een unieke ID wordt gemaakt. Er is er één per domein in uw forest

InfrastructureMaster Hiermee wordt informatie over objecten in het domein bewaard. Het primaire doel is ervoor te zorgen dat de groepen waartoe gebruikers behoren van andere domeinen, correct zijn. Er is er één per domein in uw forest en over het algemeen wordt het niet op dezelfde server geplaatst als een GC.

Get-ADForest deploy.com | Format-Table SchemaMaster, DomainNamingMaster

Get-ADDomain contoso.com | FT PDCEmulator, RIDMaster, InfrastructureMaster

De FSMO-rollen naar een andere server brengen:

Move-ADDirecotryServerOperationMasterRole -Identity server2 -InfrastructureMaster

Active Directory: Forest functional level

Om de forest mode te veranderen:

Set-ADForestMode -Identity deploy.com -ForestMode Windows2008R2Forest

Implicit remoting = proces om de cmdlets van een andere host te gebruiken

Filtering

Filter accepteert wildcard:

Get-ADUser -Filter ‘Name -like “*SvcAccount”’

Get-ADUser -Filter {Name -eq “GlenJohn”}

Page 25: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 25 van 30

Werken met gebruikers, groepen en OU’s

• Get-ADObject = Geeft een overzicht van meerdere AD-objecten, inclusief gebruikers en groepen.

Gebruikt filter, ldapfilter en zoekbasis om de informatie op te vragen. Gebruik dit met format en

out switches om met de uitvoer van de opdrachten te werken.

• Get-ADUser = Geeft de AD-gebruikers in het domein weer. Gebruikt filter, ldapfilter en

searchbase om de informatie op te vragen. Gebruik dit met format en out switches om met de

uitvoer van opdrachten te werken.

• New-ADUser = Creëert een nieuwe gebruiker in uw AD-omgeving. U kunt ook de meeste

eigenschappen beheren. U moet een wachtwoord instellen en het account inschakelen voor

gebruik.

• Set-ADAccountpassword = Stelt het wachtwoord in voor een AD-account. Afhankelijk van hoe u

deze opdracht gebruikt, kunt u een reeks aanwijzingen krijgen om het wachtwoord in te stellen.

• Remove-ADUser = Verwijdert een gebruiker uit AD.

• New-ADGroup = Creëert een nieuwe groep. U kunt ook het groepstype, het bereik en andere

eigenschappen van de groep opgeven.

• Add-ADGroupMember = Hiermee kunt u het lidmaatschap van een AD-groep wijzigen. Gebruik

de opdracht get-ADgroup om een groep te selecteren.

• New-ADOrganizationalUnit = Creëert een nieuw AD organizational unit.

Organizational Units beheren

• Structuur om het enorme aantal objecten te beheren dat het in de loop der jaren zal verzamelen

• Structuur vaneen bedrijf vertegenwoordigen

• Een slecht geplande OU-structuur heeft de neiging een eigen leven te gaan leiden

• Zorg ervoor dat uw model op de juiste manier is gepland voor uw bedrijf

Organizational Units creëren

New-ADOrganizationalUnit “Sales” -Path “OU=departments,DC=tactig,DC=local”

Organizational Units verwijderen

Remove-ADOrganizationalUnit “OU=Sales,OU=departments”,DC=tactig,DC=local”

Wanneer er submappen zijn, -Recursive meegeven

Organizational Units wijzigen

Set-ADOrganizationalUnit “OU=departments”,DC=tactig,DC=local”

-Description “Department-level OUs”

Manager beheren:

1. binden aan het gebruikersobject van de person die de manager wordt

$user = Get-ADUser -Filter {samAccountName -eq “nora”}

2. Stel de manager in op de OU

Set-ADOrganizationalUnit “OU=departments,DC=tactig,DC=local” -ManagedBy $user

Gebruikeraccounts creëren

New-ADUser -SamAccountName “Kimberly” -Name “Kim” -Surname “De Clercq” -DisplayName

“Kimberly De Clercq” -Path “CN=users,DC=tactig,DC=local”

Hiervoor zijn vele parameters beschikbaar.

Gebruikeraccounts wijzigen

Set-ADUser -Identity “CN=Kimberly,CN=users, DC=tactig, DC=local” -AccountExpirationDate

12/10/2019

Page 26: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 26 van 30

Welke wachtwoorden verlopen binnenkort?

Search-ADAccount -AccountExpiring -TimeSpan 90.00:00:00

Wachtwoorden wijzigen

Set-ADAccountPassword -Identity “CN=Kimberly,CN=users, DC=tactig, DC=local”

Set-ADAccountPassword -Identity Kimberly

-oldPassword (ConvertTo-SecureString -AsPlainText “p@ssw0rd” -Force)

-NewPassword (ConvertTo-SecureString -AsPlainText “azert@12345” -Force)

Reset het wachtwoord van een gebruiker als de gebruiker het is vergeten of als het huidige

wachtwoord van de gebruiker niet beschikbaar is:

Set-ADAccountPassword “CN=Kimberly,CN=users, DC=tactig, DC=local” -Reset

-NewPassword (ConvertTo-SecureString -AsPlainText “p@ssw0rd” -Force)

Wachtwoord wijzigen bij de volgende login:

Set-ADAccountPassword “CN=Kimberly,OU=users,DC=tactig,DC=local”

-ChangePasswordAtLogon $true

Gebruikersaccount beheren

$user = Get-ADUser -Identity Kimberly

Properties wijzigen van het huidige object: $user.Enabled = $true

Verplaats het huidige object terug: Set-ADUser -Instance $user

Gebruikersaccount verwijderen

Remove-ADUser -Identity “CN=Kimberly”,OU=users,DC=Tactig,DC=local”

Gebruiker identificiëren:

• Distinguished Name (DN)

• SamAccountName

• Globally Unique Identifier (GUID)

• SID

AD opzoeken voor gebruikersobjecten die aan bepaalde criteria voldoen:

Search-ADAccount -AccountDisabled | where

{$_.ObjectClass -eq ‘user’} | Remove-ADUser -Confirm

Default locatie voor gebruikeraccounts

• CN=Users,<domain DN>

• CN=Computers,<domain DN>

U kunt de default locatie omleiden waar nieuwe gebruikersobjecten worden gemaakt:

Redirusr.exe OU=DefaultUsers,DC=Tactig,DC=Local

Gebruiker groepen beheren

Maak groepsobjecten die 1 of meer AD-beveiligings-principals bevatten: gebruikers, computers,

MSA's en groepsobjecten die in andere groepen zijn genest.

Resourcemachtigingen toewijzen aan een groepsobject

• die machtigingen worden toegewezen aan elke beveiligings-principal in die groep

• i.p.v. de machtigingen voor afzonderlijke beveiligings-principals 1 voor 1 toe te wijzen

Page 27: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 27 van 30

Gebruikersgroepen toevoegen en verwijderen

Distribution Groups:

New-ADGroup -Path “CN=users,DC=Tactig,DC=local” -name “Mailing” -GroupScope Universal

-GroupCategory Distribution -DisplayName “Mailing”

Remove-ADGroup -Identity “CN=Mailing”,OU=Users,DC=Tactig,DC=local”

Gemeenschappelijke attributen

GroupScope DomainLocal 0

Global 1

Universal 2

GroupCategory Distribution 0

Security 1

Security Groups:

New-ADGroup -Path “OU=Users,DC=Tactig,DC=local” -name “Boekhouding” -GroupScope Universal

-GroupCategory Security -DisplayName “Boekhouding”

Remove-ADGroup -Identity Boekhouding

De scope en Type van een groep veranderen

Set-ADGroup -Identity Boekhouding -GroupCategory Distribution

Set-ADGroup -Identity Maililng -GroupScope Global

Alle informatie van een groep weergeven

Get-ADGroup -Filter * -Properties Name, ManagedBy | Format-Table Name, ManagedBy

Een groep verplaatsen naar een andere OU

Move-ADObject -Identity “CN=SalesAdmin,OU=Sales,DC=Tactig,DC=local”

-TargetPath “OU=Groups,DC=Tactig,DC=Local” -server “FRABRIKAM-SRV1:60000”

Lidmaatschap van een groep weergeven

Get-ADGroupMember -Identity Users

Om het lidmaatschap van geneste groepen binnen de opgegeven groep op te nemen: -Recursief

Gebruikers toevoegen en verwijderen in een groep

Add-ADGroupMember -Identity “CN=Mailing,CN=Users,DC=Tactig,DC=Local” -Members Demo

Remove-ADGroupMember -Identity “CN=Mailing,CN=Users,DC=Tactig,DC=Local” -Members Demo

Lidmaatschap van een groep kopiëren naar een andere groep

Add-ADGroupMember -Identity SalesUsers -Recursive |

Foreach {Add-ADGroupMember -Identity ProjectUsers -Member $_ }

Computeraccounts beheren

New-ADComputer: Creëert een nieuw computer object in het domein

Remove-ADComputer: Verwijdert een bestaand computer object van het domein

Get-ADComputer: 1 of meer computerobjecten worden opgehaald op basis van de criteria die u

opgeeft bij het uitvoeren van de cmdlet

Set-ADComputer: Kan worden gebruikt om de eigenschappen van een computerobject te wijzigen

Pre-creërende computeraccounts

Stel de eigenschappen in op het moment dat deze wordt gemaakt:

New-ADComputer <computername>

Page 28: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 28 van 30

Computeraccount properties beheren

Het enige dat u hoeft te doen, is de naam van de computer en de kenmerken die u wilt wijzigen

specifiëren

• Het is niet nodig om te weten waar de computer zich bevindt in de OU structuur

Set-ADComputer tom-laptop -Description “Toms Windows 7 Laptop”

Er is geen parameter voor elk attribuut dat u wilt aanpassen

• Gebruik de parameter Replace om de waarde van een kenmerk op naam te vervangen

Set-ADComputer tom-laptop -Replace @{department=”Sales”}

Computeraccount verwijderen

Remove-ADComputer tom-laptop -Confirm:$false

De aanwezigheid van de parameter Confirm aan het einde van de opdracht zorgt ervoor dat u

volgende melding niet krijgt: 'Weet u zeker dat u wilt doorgaan?

PowerPoint PowerShell

Commando’s

Net zoals in linux mogelijkheid om opdrachten uit te voeren vanuit prompt

Soorten commando’s

• Rekenkundige bewerkingen: 2 + 2 (drukt 4 af naar console)

• Afdrukken van tekst: “Dit is tekst” of Write-Host <tekst>

• Oproepen van een functie: functienaam

• Uitvoeren van een script: . .\scriptNaam.ps1

Eerste keer Set-ExecutionPolicy RemoteSigned uitvoeren voor rechten

Opgelet: .123 zal 0,123 afdrukken en geen script uitvoeren!

Regels die beginnen met # zijn commentaar

Verschillende instructies combineren op 1 rij met behulp van >>

• Voorbeeld:

switch ($var) {>> 1 { "Je koos voor de eerste optie" }>> 2 { "Je koos voor de tweede optie" }>>

3 {"Je koos voor de derde optie" }>> default { "Je maakte een ongeldige keuze" }>> }

Variabelen

Variabele-naam

Beschrijving

$^ Bevat het eerste teken van de laatste lijn die ingevoerd werd in de shell

$$ Bevat het laatste teken van de laatste lijn die ingevoerd werd in de shell

$_ Het huidige object in de pipeline; kan onder andere gebruikt worden in scripts, filters, where-clausules en switch-statements.

$? Bevat de ‘success/fail’ – status van het laatst uitgevoerde statement

$Args Wordt gebruikt bij het creëren van functies die parameters vereisen

$Error Bevat de laatste error die gegenereerd werd tijdens het uitvoeren van een statement

$foreach Verwijst naar de enumerator in een foreach-lus

$HOME The homedirectory van de gebruiker; verwijst naar %HOMEDRIVE%\%HOMEPATH%

$true Boolean ‘waar’

$false Boolean ‘vals’

$null Een null-object

Gereserveerde variabelen

$Args.Count = aantal argumenten

Page 29: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 29 van 30

Gebruiker kan ook variabelen definiëren

• $variabeleNaam(combinatie van a-z, A-Z, 0-9)

• Indien niet standaard teken in de naam, dan naam binnen accolades:

${dit#is@alternatief}, ${!@#$%|*()}

Type variabele

Type variabele hangt af van de inhoud

Voorbeelden:

• $x = 4 type = integer

• $x = “4” type = string

Bijna alle basistypes uit .Net zijn bruikbaar in Powershell

Expliciet casten

$var = [type]waarde

Voorbeelden:

• $x = [int]”4”

• $a = [xml]”<ouder><kind>Hello</kind><kind>World</kind></ouder>”

Tabellen

Verschillende warden scheiden door komma

Voorbeelden:

• $tabel = 1,2,3,”test”

Waarde ophalen door variabelen te indexeren

• $tabel[3] Drukt “test” af in console

Eigenschappen en methodes

Welke eigenschappen en methodes zijn beschikbaar voor een bepaald type?

• Get-Member

Operaties (analoog aan .Net)

= Kent de waarde v/h argument toe aan de variabele

+= Telt waarde v/h argument op bij waarde v/d variabele en slaat resultaat op in variabele

-= Trekt waarde v/h argument af v/d waarde v/d variabele en slaat resultaat op in variabele

*= Vermenigvuldigt waarde v/h argument met de variabele en slaat resultaat op in variabele

/= Deelt de waarde v/d variabele door het argument en slaat het resultaat op in de variabele

%= Slaat de rest van de deling v/d variabele door het argument op in de variabele

-lt Kleiner dan

-le Kleiner dan of gelijk aan

-gt Groter dan

-ge Groter dan of gelijk aan

-eq Gelijk aan

-ne Niet gelijk aan

-contains Controleert of het argument na de operator voorkomt in het argument voor de operator

-notcontains Controleert of het argument na de operator niet voorkomt in het argument voor de operator

-like Vergelijkbaar met -eq, maar kan wildcards verwerken.

-notlike Vergelijkbaar met -ne, maar kan wildcards verwerken.

-match Controleert of het argument voldoet aan een reguliere expressie

-notmatch Controleert of het argument niet voldoet aan een reguliere expressie

Page 30: Windows: H10 - PowerShell...Windows: H10 - PowerShell Pagina 4 van 30 Process Manipulation PowerShell Cmdlet PowerShell alias cmd.exe bash Purpose Get-Process gps, ps tlist, tasklist

Windows: H10 - PowerShell

Pagina 30 van 30

Conditiestructuren

Analoog aan .Net

If(conditie) { instructies }

else { instructies }

Switch(var) {

waarde1 { instructies }

waarde2 { instructies }

default { … }

}

Herhalingsstructuren

Analoog aan .Net

For($i=0; $i-lt 10; $i++) { instructies }

Foreach($i in $collectie) { instructies }

While(conditie) { instructies }

Tips en Tricks

PowerShell ISE

Gebruik de PowerShell ISE (Integrated Scripting Environment) om PowerShell aan te leren.

CmdLet "Get-Help"

Met de CmdLet "Get-Help", gevolgd door een commando, krijgt u meer info te zien over dit

commando (bv. "Get-Help Set-Alias"). Gebruik de parameter -Full om voorbeelden te zien van hoe

het commando kan worden gebruikt en de parameter -ShowWindow om de info in een apart

venster te tonen.

CmdLet "Get-Command"

Zoekt u een CmdLet en de info hierover, dan gebruikt u best "Get-Command" die u meer info zal

bezorgen dan "Get-Help" (bv. "Get-Command *util*" voor een lijst van CmdLets met "util" in de

naam).

Parameter "WhatIf"

Met Set-, New-, Add-, Remove- CmdLets wijzigt u de configuratie of data op uw systeem. Om zeker te

zijn dat u de juiste zaken wijzigt, kunt u met de parameter "-WhatIf" na uw commando zicht krijgen

op wat PowerShell exact aan het systeem zal veranderen. Op die manier is er nog een controle

vooraleer u de wijzigingen definitief doorvoert.