Topicvoorstel: "Het grote Powershell topic"

Pagina: 1
Acties:
  • 1.364 views

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Graag zou ik een algemeen topic over Powershell beginnen. Waarom? Omdat het zo'n belangrijke taal is. Het is onontbeerlijk deze taal te kennen als men met Windows-servers bezig is. Vele mensen snappen dat nog niet echt, maar wie binnen nu en pakweg 3 jaar geen PoSh kent kan het schudden als Windows System Engineer. VBS is dood, leve PoSh.

Momenteel zijn de threads over PoSh verspreid over Programming, Windows Clients en Serversoftware en Windows Servers.

Mijn voorstel is om het in PRG te zetten, aangezien het zowel over clients als servers gaat en de lijn tussen scripten en programmeren flinterdun is. Qua complexiteit moet een Powershell-script niet onderdoen voor mening Java-script en veel extra functionaliteit is gewoon .NET programmeren. Behalve dat het OS-afhankelijk is en dat het niet compiled moet worden zie ik niet in waarom het niet in PRG thuis zou horen.

Dat gezegd zijnde, hieronder de TS. Als het goedgekeurd wordt, dan werk ik het wel verder uit.




Het grote Powershell topic

Wat?
Powershell is een scripting taal die standaard aanwezig is in alle Windows versies vanaf Windows 7 en Windows Server 2008R2. Voor eerdere versies (post-2000) is het als applicatie te downloaden, zowel in 32- als 64-bit versie.

De mensen uit de Unix wereld hadden steeds medelijden met Windows administrators omdat zij bash hebben en wij het met batch moesten doen. Daar kwam verandering in met WSH in Windows 98 dat .JS en .VBS ondersteunde (en uitgebreid kon worden naar andere talen), maar ideaal was het toch nog niet.

Enter Powershell: op de nieuwere versies van Windows is dit de basis van alles. Windows, en alle applicaties, draaien op Powershell en niet vica versa. Meer zelfs: van vele applicaties is de functionaliteit niet ten volle beschikbaar via de GUI en moet men sowieso Powershell gebruiken (zie oa. Exchange en de verschillende System Center producten).

Het voordeel van Powershell ten opzichte van VBS, de vorige standaard in Windows scripting, is dat het de positieve elementen overgenomen heeft (Object-Oriented, gebaseerd op .NET) maar de taal zelf intuïtiever gemaakt heeft en commando's - cmdlets geheten - voorziet bij elk product die er voor zorgen dat men veel compactere doch leesbaardere code kan schrijven dan voorheen. Vergelijk zelf:


Visual Basic .NET:
1
2
3
4
Dim nextSec
Set nextSec = CreateObject("WbemScripting.SWbemDateTime")
nextSec.SetVarDate(DateAdd("s", 1, currentTime))
strNext = "'" & nextSec.Value & "'"


PowerShell:
1
$strNext = "`'$([management.managementDateTimeConverter]::ToDmtfDateTime(($currentTime.AddSeconds(1))))`'"


Er is nog geen Powershell-lexer op T.net, dus voorlopig gebruik je best de C#-lexer al gaat die soms compleet de mist in.


C#:
1
$strNext = "`'$([management.managementDateTimeConverter]::ToDmtfDateTime(($currentTime.AddSeconds(1))))`'"
Historiek van PoSh
Powershell is eigenlijk ontstaan in 2003 onder de naam Monad. Het is echter niet bijzonder gekend geweest aangezien het een soort alpha-versie was van wat later Powershell zou worden. Dat kwam er 3 jaar later.

Versie 1.0 werd uitgebracht in 2006 en is beschikbaar voor Windows XP SP2, Windows Server 2003, Windows Vista en zit als een optionele feature in Windows Server 2008.

Versie 2.0 is geïntegreerd in Windows 7 en Windows Server 2008 R2. Het is beschikbaar als een aparte installatie voor Windows XP met Service Pack 3, Windows Server 2003 met Service Pack 2 en Windows Vista met Service Pack 1.

Version 3.0 is geïntegreerd in Windows 8 en Windows Server 2012. Het is beschikbaar als een aparte installatie voor Windows 7 met Service Pack 1, voor Windows Server 2008 met Service Pack 1 en voor Windows Server 2008 R2 met Service Pack 1.

Het verschil tussen de versies is voornamelijk het aantal cmdlets, al zat er tussen 1.0 en 2.0 ook een groot verschil in de error handling (in 1.0 moest alles nog met ErrorTrapping, in 2.0 is Try-Catch toegevoegd)
Cmdlets, WTF zijn dat?
Cmdlets is een verkleinvorm van commando dat in de Powershell-context gebruikt wordt voor, tja, commando's. Elk commando heeft een specifieke naamgeving: 'verb-noun' (werkwoord streepje zelfstandig naamwoord).

Enkele voorbeelden: Start-Service, Get-ExecutionPolicy, ...

Dit systeem maakt het gemakkelijk om cmdlets te raden. Hoe zou je een service stoppen of een ExecutionPolicy wijzigen? Je kan het raden op basis van de voorbeelden - dat is de intuïtiviteit waar ik het eerder over had.

Er zijn meer dan 2000 cmdlets, exclusief de cmdlets die met bepaalde producten meekomen (ActiveDirectory, BitLocker, Exchange, SCDPM, SCOM, SCCM, SCO, SCVMM, SCSM, SQL, ...), dus het is maar goed ook dat het systeem zo logisch opgebouwd is - maar natuurlijk is dat niet voldoende om de taal ten volle te benutten. Daarvoor bestaat de cmdlet Get-Command.

Met Get-Command kan je op zoek gaan naar het commando dat je nodig hebt. Je wil bijvoorbeeld wat doen met een process, maar je weet het commando niet. Weet dat Get-Command twee belangrijke parameters heeft: -Verb en -Noun. Door deze lijn vinden we alle cmdlets die met processen te maken hebben

C#:
1
Get-Command -Noun Process


code:
1
2
3
4
5
6
7
CommandType     Name                                               ModuleName
-----------     ----                                               ----------
Cmdlet          Debug-Process                                      Microsoft.PowerShell.Management
Cmdlet          Get-Process                                        Microsoft.PowerShell.Management
Cmdlet          Start-Process                                      Microsoft.PowerShell.Management
Cmdlet          Stop-Process                                       Microsoft.PowerShell.Management
Cmdlet          Wait-Process                                       Microsoft.PowerShell.Management


Voor elke cmdlet is er een tevens help-commando beschikbaar. Enige idee hoe dat heet? Rara: Get-Help.

Met het volgende vraag je de de help voor Start-Service:

C#:
1
Get-Help Start-Service


Je hebt hier drie belangrijke parameters die je kan gebruiken: -Full, -Detailed, -Examples. Afhankelijk van je keuze krijg je meer of minder informatie terug. De parameternamen zijn zelfverklarend vermoed ik. Er is trouwens ook nog een -Online parameter, maar ik laat het aan jou over te raden waar die voor dient.

Als je de cmdlets Get-Help en Get-Command kent kan je eigenlijk beginnen met Powershell. Om echte scripts te schrijven komt er natuurlijk nog meer bij te kijken: variabelen, parameters, functions, statements, enz. Deze thread dient echter niet als inleidende cursus Powershell, wel als teaser.
Voor de Unix mensen
In vele bedrijven gebeurt het wel dat een Unix-server overgezet wordt naar Windows tot onvrede van de Unixmensen, zeker als die mensen zelf geen generische Unixmensen zijn maar verantwoordelijken voor een bepaald product en bijgevolg moeten verhuizen van een Unixomgeving naar een Windowsomgeving.

Geen nood: ik heb enkele interne trainingen gegeven aan zulke mensen en tot mijn eigen verwondering was er zelfs bij de meest hardcore Unix-adepten enig enthousiasme over Powershell. In deze context is "enig enthousiasme" spectaculair - normaal gezien stopt men met luisteren zodra het woord Windows valt.

Powershell is namelijk beter dan bash moesten ze schoorvoetend toegeven. Het is object-georiënteerd (al zijn er blijkbaar manieren om bash ook OO te maken) en eenvoudiger. Stel dat Exchange zou draaien op linux en je moet alle services stoppen. In Powershell ziet dat er als volgt uit:


C#:
1
Get-Service *Exchange* | Stop-Service


In bash:
Bash:
1
ps uax | grep exchange | awk '{print $2}' | xargs kill


Als we de factor 'gewoonte' buiten beschouwing laten moeten men toch bekennen dat de PoSh-manier eenvoudiger, eleganter én efficiënter is.

Daar stop het evenwel niet voor de Unix-admins: het team achter PoSh is zo vriendelijk geweest om voor de meest courante Unix-commando's een alias te maken. Een voorbeeld: we willen de inhoud van een map zien. Dat kunnen we doen met de volgende commando's:
  • gci
  • dir
  • ls
Zowel de batch als de bash versie werken in PoSh! Deze drie aliassen - de eerste verklaart zichzelf nu - zijn van de cmdlet Get-ChildItem. Dit systeem met aliassen is redelijk uitgebreid, waardoor iemand die uit de Unix-wereld komt (of nog uit de DOS-wereld) vrij snel zijn weg kan vinden. Als een alias niet bestaat kan je hem altijd zelf maken trouwens. Er is een cmdlet Select-String waar out-of-the-box (vreemd genoeg) geen alias grep voor bestaat. Dat is dan meteen een van de eerste dingen die menig Unixer zal aliassen.

Toch nog een kleine doch belangrijke opmerking over die aliassen: de parameters die het aanvaardt zijn die van Powershell, niet van Unix (of DOS). Voor de meeste taken is dat geen probleem, maar voor exotischere dingen kan dat wel eens fout lopen.
OK, klinkt aardig. Hoe leer ik het nu?
[justify]Al doende uiteraard! Maar wat extra hulp is altijd handig :)

Vroeger was er online de geweldige Mastering PowerShell in your Lunch Break, maar die webpagina is offline gehaald omdat ze er een boek van wilden maken. Misschien vind je er wel nog ergens een kopij van terug op het internet.


Keith Hill heeft op zijn blog een interessante reeks als introductie:
Wie liever boeken heeft beveel ik zelf van harte JONES, Don, HICKS, Jeffrey; Windows Powershell: TFM; SAPIEN Press, 2007 aan. Binnenkort komt er misschien een nieuwe versie uit voor 3.0 aangezien dit boek nog 2.0 is (maar de verschillen zijn klein).
En verder...
Op mijn eigen blog gaat het over vele onderwerpen, technisch en niet technisch, maar Powershell komt toch vaak aan bod - vooral in combinatie met SC producten.

Momenteel organiseert PowerShell.org in samenwerking met Microsoft en SAPIEN The Scripting Games: elke week een nieuwe opgave om iets te scripten, met twee moeilijkheidsniveau's. het is meer een oefening dan een echte wedstrijd, maar er zijn toch enkele leuke prijzen. Stem op mijn code als je mij ziet opduiken ;)
Bedoeling van deze thread
In deze thread kan je zowel algemeen babbelen over PoSh als je problemen aanbrengen. Het combineren van PoSh en .NET met Office, WMI, SQL en dergelijke kan soms te ingewikkeld worden om alleen op te zoeken.

[ Voor 100% gewijzigd door YellowOnline op 02-05-2013 14:21 ]


Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Lijkt me prima om een topic voor te maken (met dien verstande dat ik losse specifieke problemen/vragen in losse topics niet ga verbieden :+ )

Gezien de focus op Windows-scripting en dan vooral op servers, is SWS of WOS IMHO meer voor de hand liggend. Net zoals VBA-in-Excel beter in OFF CSA past. Open gerust in SWS. (We zullen dan ook wel een alias maken in WOS).

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

Verwijderd

YellowOnline schreef op donderdag 02 mei 2013 @ 14:19:

C#:
1
Get-Service *Exchange* | Stop-Service


In bash:
Bash:
1
ps uax | grep exchange | awk '{print $2}' | xargs kill
Ten eerste is bash maar één shell, er zijn er veel meer beschikbaar, en ten tweede:
pkill -f postfix

Praat dus geen onzin. Als je zo nodig reclame wilt maken, doe het dan met fatsoenlijke argumenten.

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
F_J_K schreef op donderdag 02 mei 2013 @ 19:53:
Lijkt me prima om een topic voor te maken (met dien verstande dat ik losse specifieke problemen/vragen in losse topics niet ga verbieden :+ )

Gezien de focus op Windows-scripting en dan vooral op servers, is SWS of WOS IMHO meer voor de hand liggend. Net zoals VBA-in-Excel beter in OFF CSA past. Open gerust in SWS. (We zullen dan ook wel een alias maken in WOS).
Okido
Verwijderd schreef op donderdag 02 mei 2013 @ 20:01:
[...]

Ten eerste is bash maar één shell, er zijn er veel meer beschikbaar, en ten tweede:
pkill -f postfix

Praat dus geen onzin. Als je zo nodig reclame wilt maken, doe het dan met fatsoenlijke argumenten.
Bash is de standaard shell op de meeste distributies. Ik gaf een voorbeeld dat mij nota bene door een unixer gegeven is. Als dat fout is: sorry, je bent de eerste die er over struikelt.

En reclame... het gaat over een scripting taal onder Windows, niet over een doos Tampons. Je kan gerust zeggen dat iets volgens jou niet klopt, maar dat kan ook op een niet-agressieve manier.

Acties:
  • 0 Henk 'm!

Verwijderd

YellowOnline schreef op donderdag 02 mei 2013 @ 20:19:

Bash is de standaard shell op de meeste distributies. Ik gaf een voorbeeld dat mij nota bene door een unixer gegeven is.
Vraag het aan betere beheerders.
En reclame... het gaat over een scripting taal onder Windows, niet over een doos Tampons. Je kan gerust zeggen dat iets volgens jou niet klopt, maar dat kan ook op een niet-agressieve manier.
Dit is de manier van reageren die je uitlokt als je foutieve informatie verspreidt. Je wilt laten zien dat het fan-tas-tisch is maar hebt blijkbaar totaal geen kaas gegeten van die andere kant, die al veel langer bestaat. Je bent dus niet in staat een goede mening te vormen en baseert je argumenten op (zo te zien armzalige) kennis van anderen. Zo werkt het niet.

Van mij mag je schrijven wat je wilt over Powershell, maar elke keer dat je een vergelijking trekt met Unix/Linux zul je moeten incasseren. Ik zou dat hele stuk lekker weglaten uit je verhaal.

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Dan wint de ouderwetsche cmd. met net stop Exchange
Of met dank aan Mark Russinovich pskill notepad
Etc.
Opmerkingen als dat veel herkenbaar is via aliassen, vind ik eigenlijk best wel nuttig, hele stuk weg lijkt me dan ook niet nodig. Maar laten we er inderdaad maar geen 'mine is bigger easier then yours' van maken en termen als beter weglaten.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • Thijs B
  • Registratie: Augustus 1999
  • Niet online
objects is de echte power van powershell maar als je een 'simpele' systeembeheerder bent en geen programeur is dat concept als je er voor het eerst over leest moelijk te begrijpen.

pas toen ik deze jip en janneke uitleg las http://www.howtogeek.com/...rning-powershell-objects/
Waar objects vergeleken wordt met een fiets, begreep ik gelijk de kern van powershell en kon ik er mee aan de slag. misschien handig om die in je topic start op te nemen.

Youtube is echt super als bron voor powershell hulp met name de video's van Don Jones.

Acties:
  • 0 Henk 'm!

  • punisher007
  • Registratie: Maart 2001
  • Laatst online: 16-09 10:15
PowerShell 4.0 komt ook met Windows 8.1 en Server 2012R2 waarvan de preview versies eind deze maand verwacht worden. Desired State Configuration is een nieuwe feature.

Daarnaast is er ook een NL user group, de DuPSUG (Dutch PowerShell User Group). Zie www.dupsug.com

http://blog.bjornhouben.com


Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Ik heb mijn plan voor een thread laten vallen en zal vroeg of laat een "Beginner's Guide" op mijn blog zetten. Met kritiek heb ik geen problemen, maar met de manier waarop van sommige mensen wél. Op mijn blog gaat dat naar | Out-Null. In een thread op GoT kan ik dat zelf niet.

Op mijn blog kan ik het trouwens in het Engels schrijven en zodoende wat internationaler van dienst zijn. Als ik wat google zie ik toch dat er aardig naar enkele van mijn PoSh-posts verwezen wordt.

Acties:
  • 0 Henk 'm!

  • Sefyu
  • Registratie: November 2006
  • Niet online
Toevallig vandaag voor het eerst met Powershell ISE te maken gehad. Ik moet wat tekst hebben uit een bestand, en programma's als UltraEdit en Dreamweaver hebben blijkbaar geen enkele functie om resultaten van zoekopdrachten te exporteren. Na enig gegoogle een simpel scriptje in elkaar gezet:

C#:
1
2
3
4
$input_path = 'C:\Users\R\Desktop\raw.txt'; 
$output_file = 'C:\Users\R\Desktop\email.txt'; 
$regex = '\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b'; 
select-string -Path $input_path -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value } > $output_file


De interface en alles wees zich vanzelf, ubersimpel allemaal.

Ik zag direct in het rechterpaneel ook allemaal voorbeeldcommands staan die me direct lieten denken: "dit kan ik waarschijnlijk goed gebruiken". Ik wil bijvoorbeeld al een tijdlang het wisselen van een geluidsinterface in WMP automatiseren. Normaal moet ik dan handmatig door diverse menu's heen, maar ik denk dat het met PS heel makkelijk gescript kan worden.

Hetzelfde met mijn audiodg.exe-probleem. Wanneer ik de eerste keer muziek af wil spelen (na een boot), wil windows eerst alle bestanden in catroot afgaan waardoor het ~10-20 seconden duurt voordat de muziek begint (zie http://superuser.com/ques...esults-in-30-second-delay). Voorheen kon ik simpelweg audiodg.exe bij het booten laten starten via taakplanner, maar dat werkt niet meer. Het lijkt mij dat ik met PS ook heel eenvoudig bij het booten de betreffende service kan starten met de juiste flags.




Ook grappig, de FAQ zegt:

Note: de code-tag kan niet 'kort' afgesloten worden dmv {/}

Maar dat kan blijkbaar wel :>

[ Voor 5% gewijzigd door RobIII op 09-06-2013 02:52 . Reden: fixed messed up quotes :Y) ]


Acties:
  • 0 Henk 'm!

  • zeef
  • Registratie: Januari 2000
  • Laatst online: 23:48
Van mij mag je zo'n topic gewoon beginnen hoor. ;)

Acties:
  • 0 Henk 'm!

  • dj_vibri
  • Registratie: Oktober 2007
  • Laatst online: 16-09 17:16

dj_vibri

int(e^x) = f(u)^n

Yellow,
ga er gewoon voor en maak het topic aan! De mensen die geïnteresseerd zijn zullen het topic lezen en de overige moeten maar scrollen.

Zelf zal ik in ieder geval het topic doorlezen en bekijken en hopelijk uit leren :) Besef maar al te goed dat Powershell "de" taal is (bv. binnen SharePoint) maar nooit echt de moeite voor gedaan om het correct te leren :)

Zou er eens werk van moeten maken, dus wat mij betreft kan dat topic nog wel eens aanslaan (tenzei de unix gebruikers (of andere) één voor één komen trollen over Powershell/Microsoft)!

Go for it!

Last night I lay in bed looking up at the stars in the sky and I thought to myself, where the heck is the ceiling.


Acties:
  • 0 Henk 'm!

  • zeef
  • Registratie: Januari 2000
  • Laatst online: 23:48
Precies. Dus als aanmoediging gooi ik dit topic dicht. Dan moet je wel een nieuw topic beginnen. :P :+

Overige vragen & opmerkingen over je TS kunnen beter via SeM of DM.

Amaze us! :)

[ Voor 10% gewijzigd door zeef op 21-06-2013 09:21 ]

Pagina: 1

Dit topic is gesloten.