Archive for the ‘PowerShell’ Category.

PowerShell – Exchange 2007

Jeg vil i denne blog-post prøve at samle nogle af de PS script jeg har testet og som er relateret til Exchange 2007.
Alle script bliver gemt og afviklet inde fra PowerGUI (www.powergui.org).
Jeg har tidligere lavet en kort blog-post omkring PowerGUI her – http://jravn.dk/?p=43
Det hele er testet af på en såkaldt “Admin PC” med Windows 7 RC.
Det er vigtigt at man afvikler script og PowerGUI med de fornødne rettigheder. Typisk vil man vælge en domain admins account.
Følgende software er installeret i nedenstående rækkefølge.

Installer Exchange 2007 EMC SP1 og vælg “Custom Exchange Server installation”.
Vælg herefter kun “Managemnet Tools”.

Download link (32-Bit).
http://www.microsoft.com/downloads/details.aspx?FamilyID=6be38633-7248-4532-929b-76e9c677e802&displaylang=en

Installerer herefter seneste SP eller Update Rollup (Exchange 2007 SP1 Rollup Update 9).
http://www.microsoft.com/downloads/details.aspx?FamilyID=55320be2-c65c-48bb-bab8-6335aa7d008c&displaylang=en#filelist

Installer RSAT til Windows 7 RC og vælg alle RSAT features.
http://www.microsoft.com/downloads/details.aspx?FamilyID=f6c62797-791c-48e3-b754-c7c0a09f32f3&displaylang=en#filelist

Installer Seneste Quest AD cmdlets.
http://www.quest.com/powershell/activeroles-server.aspx

Installer Seneste PowerGUI. Under installationen vælg, som vist på nedenstående billede.
http://powergui.org/downloads.jspa

 

Jeg er nu klar til at indsætte/kopiere mine ønskede script ind i PowerGUI.
For alle script i PowerGUI, gælder det, at man nemt kan eksportere visning/resultat til csv, html eller xml.
Jeg opretter forinden en folder, som jeg kalder WIN Exchange PS.

 

Code – Mailbox Seize Report. (Download link)

#Mailbox Size Report
Get-Mailbox -ResultSize ‘Unlimited’| select @{Name=”User Name”;expression={$_.displayname}},
@{Name=”Department”;expression={(get-user $_.alias).department}},
@{Name=”Storage Group”;expression={$_.database}},
@{Name=”Total Size (MB)”;expression={(get-mailboxstatistics $_).totalitemsize.value.toMB()}},
@{Name=”ItemCount”;expression={(get-mailboxstatistics $_).itemcount}},
@{Name=”LastLogonTime”;expression={(get-mailboxstatistics $_).LastLogonTime}} | Sort-Object -property  ‘Total Size (MB)’ -descending

Visning i PowerGUI.

 

Code – Mailbox Size Report – Top 10. (Download link)

#Mailbox Size Report – Top 10
Get-Mailbox -ResultSize ‘Unlimited’| select @{Name=”User Name”;expression={$_.displayname}},
@{Name=”Department”;expression={(get-user $_.alias).department}},
@{Name=”Storage Group”;expression={$_.database}},
@{Name=”Total Size (MB)”;expression={(get-mailboxstatistics $_).totalitemsize.value.toMB()}},
@{Name=”ItemCount”;expression={(get-mailboxstatistics $_).itemcount}},
@{Name=”LastLogonTime”;expression={(get-mailboxstatistics $_).LastLogonTime}} | Sort-Object -property  ‘Total Size (MB)’ -descending | select -first 10

Reference til ovenstående.
http://telnet25.wordpress.com/2009/07/02/powergui-get-mailbox-displaynamedepartmentstoragegrouptotalsize-mbitemcount/

Code – Storage Groups Statistics. (Download link)

#Storage Groups Statistics
Get-MailboxDatabase | Select Identity,
@{Name=”Size (GB)”;Expression={$objitem = (Get-MailboxDatabase $_.Identity); $path = ““” + $objitem.server + “`” + $objItem.EdbFilePath.DriveName.Remove(1).ToString() + “$”+ $objItem.EdbFilePath.PathName.Remove(0,2); $size = ((Get-ChildItem $path).length)/1048576KB; [math]::round($size, 2)}},
@{Name=”Size (MB)”;Expression={$objitem = (Get-MailboxDatabase $_.Identity); $path = ““” + $objitem.server + “`” + $objItem.EdbFilePath.DriveName.Remove(1).ToString() + “$”+ $objItem.EdbFilePath.PathName.Remove(0,2); $size = ((Get-ChildItem $path).length)/1024KB; [math]::round($size, 2)}},
@{Name=”No. Of Mbx”;expression={(Get-Mailbox -Database $_.Identity | Measure-Object).Count}} | Sort-Object -property  ‘Size (GB)’ -descending | Format-table -AutoSize

Visning i PowerGUI.

Med denne code kan man se, hvilke nye brugere der skal fordeles rundt i de enkelte maildatabaser udfra størrelse (GB) og antal mailbokse.
Reference til ovenstående.
http://exchangeshare.wordpress.com/2009/07/27/exchange-2007-database-statistics-in-powershell/

Code – List of mailbox who last logon time is older then 30 days.
Get-MailboxStatistics | where {$_.Lastlogontime -lt (get-date).AddDays(-30)} | Select displayName,LastLoggedOnUserAccount,LastLogonTime

Code – Mailboxes with forward address.
Get-Mailbox | Where {$_.ForwardingAddress -ne $null} | Select Name, ForwardingAddress, DeliverToMailboxAndForward

Code – Mailboxes with quota limit not set to default.
Get-Mailbox | Where {$_.UseDatabaseQuotaDefaults -eq $false} | Select Name, IssueWarningQuota, ProhibitSendQuota, ProhibitSendReceiveQuota

Code – Users with Send on Behalf Of set.
Get-Mailbox | Where {$_.GrantSendOnBehalfTo -ne $null} | Select Name, GrantSendOnBehalfTo

Reference til ovenstående.
http://smtpport25.wordpress.com/2009/05/26/powershell-to-get-the-list-of-user-who-last-logon-time-is-older-then-30-days/
http://exchangeshare.wordpress.com

PowerShell links.
http://blogs.msdn.com/PowerShell/
http://social.technet.microsoft.com/forums/en-US/winserverpowershell/threads/
http://www.microsoft.com/technet/scriptcenter/scripts/message/exch2007/default.mspx?mfr=true
http://www.exchangeninjas.com/PSSCategories

PowerGUI og AD PowerShell cmdlets

PowerGUI fra Quest Software, er et freeware GUI baseret værktøj til PowerShell.
Powershell er (bliver) som bekendt det nye scriptsprog til administration af servere og workstation i et Windows/Citrix miljø.
Indlæringsprocessen for PowerShell kan være en sej kamp (syntax, cmdlets m.m.). PowerGUI kan her gøre denne proces noget lettere.
Med PowerGUI får man følgende features:

  • Pre-defineret script, som man kan starte op med og kopiere fra.
  • Mulighed for at linke imellem sine script. (feks. find bestemte brugere i en gruppe/OU, returner herefter oprettelses dato for disse brugere).
  • Mulighed for at debugge,søge,printe og kopiere sin kode.
  • Eksport af dataset til XML, CSV, HTML, og clipboard.
  • Returnering af Dataset i et gridview.
  • Grafisk lækkert MMC design.
  • PowerGUI forum med masser af script og eksempel code.

Med PowerShell kan man administrerer sit Acitive Directory og foretage diverse søgninger.
Quest har udviklet en AD PowerShell cmdlets som kan aktivers direkte i PowerGUI. Installationen er som følger:

Download og installer PowerShell
Download og installer PowerGUI

Download og installer AD PowerShell cmdlets
Start herefter PowerGUI og vælg File – PowerShell Libraries – Aktiver AD PowerShell cmdlets.

Vælg “Always run”

Højre musetast og vælg import. Gå til C:Program FilesPowerGUISnapins.


Herefter kan vi nu se at der en kommet en Active Directory folder i PowerGUI.

Hvis man klikker på Users vil der bliver oprettet et dataset med alle brugerne i AD.

 

Herfra har man mulighed for at generer diverse rapporter over ens brugere ved at tilføje/fjerne felter eller ved at benytte filters.
Eksempler kunne være. Vis mig alle brugere som er ligger i en bestemt OU/Department – List alle brugers e-mail adresser – List alle brugers Creation Date mfl.


 

Til hver AD script er der en række simple actions man kan udføre. Med tiden kan man tilføje sine egne scriptet actions.
Man får således mulighed for at bulk opdaterer diverse AD objekter. Feks kan man vælge flere brugere og gøre dem medlem af diverse Security Groups.

 

For mig er PowerGUI et must-have når jeg skal i gang med at udforske diverse muligheder med PowerShell, herunder generering af rapporter fra AD.
Samtidig giver PowerGUI også mulighed for at lave data udtræk fra SQL servere via ADO.net.
Man kan her forstille sig at man har et Hardware/Software inventory system, hvor man laver sine egne rapport Queries.

Flyt FSMO roller med PowerShell


Man kan med PowerShell flytte alle 5 FSMO roller til en ny Domain Controller.
Eneste krav er at man installerer følgende komponenter på den DC, man flytte rollerne til:

  • .NET Framwork 2.0
  • PowerShell

Først kan vi via et PowerShell script lave en FSMO query. Scriptet inderholder følgende kode:

$dom = [System.DirectoryServices.ActiveDirectory.Domain]::getcurrentdomain()
$dom | Format-List *

Inden vi kan execute vores script, skal vi via nedenstående kommando tillade script execution.

Set-ExecutionPolicy Unrestricted

For mere information omkring PowerShell ExecutionPolicy, se nedenstående link:
http://www.microsoft.com/technet/scriptcenter/topics/msh/cmdlets/set-executionpolicy.mspx

Retrieving Active Directory FSMO roles

 

Transfer FSMO roles with PowerShell

PowerShell Scriptet inderholder følgende kode:

$dse = [ADSI]“LDAP://RootDSE”

$dom = [ADSI]“”
$sid = $dom.objectsid

$dse.Put(“becomePdc”, $sid[0])
$dse.SetInfo()

$dse.Put(“becomeDomainMaster”, 1)
$dse.SetInfo()

$dse.Put(“becomeRIDMaster”, 1)
$dse.SetInfo()

$dse.Put(“becomeInfrastructureMaster”, 1)
$dse.SetInfo()

$dse.Put(“becomeSchemaMaster”, 1)
$dse.SetInfo()

Resultatet kan ses på nedenstående billede.

Man kan ligeledes via netdom, få bekræftet at FSMO rollerne er flyttet korrekt.

netdom query fsmo

Schema owner – WIN-DC-005.win.local
Domain role owner – WIN-DC-005.win.local
PDC role – WIN-DC-005.win.local
RID pool manager – WIN-DC-005.win.local
Infrastructure owner – WIN-DC-005.win.local

Alternativt til ovenstående kan man query og flytte FSMO rollerne, som vist i nedenstående links.
http://www.petri.co.il/determining_fsmo_role_holders.htm
http://www.petri.co.il/transferring_fsmo_roles.htm