Wednesday, February 13, 2008

Exchange 2007: PowerShell deel 1

In 1985 ben ik begonnen met MSX BASIC, later MSX DOS en vervolgens MS DOS. Maar sinds Windows werd het tikken steeds meer klikken, natuurlijk was er wel eens een batchfile of scriptje maar het meeste kon wel het makkelijkst via de GUI. En toen kwam Microsoft met de aankondiging dat er een shell ging komen, een soort luxe cmd. Het eerste product wat voorzien werd van PowerShell is natuurlijk Exchange 2007. Toen bleek dat veel functionaliteit alleen in de Exchange Management Shell beschikbaar zou komen zorgde dat voor flink wat opschudding.

Inmiddels zijn we een jaar en een eerste servicepack verder en begin ik te ontdekken hoe ontzettend krachtig en makkelijk PowerShell in de praktijk is. Om die reden wil ik af en toe een handigheidje delen, vandaag de eerste.

In bepaalde situaties wil je de SAN oplossing graag een snapshot laten maken van de Exchange database, en wat is nu makkelijker dan dit te doen met LCR. Maar wanneer je geen VSS oid. kunt gebruiken dan zul je de database eerst moeten pauzeren om hem in een consistente staat te kunnen snapshotten. Dat kunnen we doen met Suspend-StorageGroupCopy en Resume-StorageGroupCopy. Laten we dat eens doen met alle Storage Groups:

Get-StorageGroup | Suspend-StorageGroupCopy

Met het eerste commando vragen we de Storage Groups op en door deze output te voeren aan het tweede commando worden ze ge-suspend. Alleen wordt er nu nog om een bevestiging gevraagd, dat moeten we uitschakelen:

Get-StorageGroup | Suspend-StorageGroupCopy -confirm:$FALSE

Maar wat nu als er ook Storage Groups zijn die helemaal geen LCR hebben ingeschakeld? Daar moeten we op filteren, bijvoorbeeld zo:

Get-StorageGroup | Where { $_.HasLocalCopy -eq "$TRUE" } | Suspend-StorageGroupCopy -confirm:$FALSE

Door bij voorbeeld een Get-StorageGroup | fl te geven krijg je een overzicht van alle output en kun je iets zoeken om op te filteren, ik heb gekozen voor HasLocalCopy. O ja, na de snapshot moet LCR natuurlijk weer gaan lopen, dat doen we precies zo:

Get-StorageGroup | Where { $_.HasLocalCopy -eq "$TRUE" } | Resume-StorageGroupCopy -confirm:$FALSE

No comments: