Friday 10 April 2009

Exchange web based calendar without authentication

Run this powershell code using Glen Scales' objects found here






Code:


[void][Reflection.Assembly]::LoadFile("C:\rssfeed\EWSUtil2.dll")


$casUrl = "https://cas-server-url/ews/exchange.asmx"
$mbHash = @{ }

$mbMailboxEmail = "mailboxusername"

get-mailbox $mbMailboxEmail | foreach-object{

if ($mbHash.ContainsKey($_.WindowsEmailAddress.ToString()) -eq $false){

$mbHash.Add($_.WindowsEmailAddress.ToString(),$_.DisplayName)

}

}

$mbs = @()



$ewc = new-object EWSUtil.EWSConnection($mbMailboxEmail,$true, $null, $null, $null, $casURL)

$drDuration = new-object EWSUtil.EWS.Duration

$drDuration.StartTime = [DateTime]::Parse([DateTime]::Now.ToString("yyyy-MM-dd 08:30"))

$day = [DateTime]::Parse([DateTime]::Now.ToString("yyyy-MM-dd"))

$day = $day -replace("00:00:00", "")

$dd = [DateTime]::Parse([DateTime]::Now.ToString("yyyy-MM-dd+1 08:30"))

$drDuration.EndTime = [DateTime]::Parse([DateTime]::Now.ToString("yyyy-MM-dd 18:00"))

$tomorrow = get-date (get-date).AddDays(1) -format "d MMMM yyyy"



$batchsize = 100

$bcount = 0

$bresult = @()

if ($mbHash.Count -ne 0){

foreach($key in $mbHash.keys){

if ($bcount -ne $batchsize){

$mbs += $key

$bcount++

}

else{

$bresult += $ewc.GetAvailiblity($mbs, $drDuration, 30)

$mbs = @()

$bcount = 0

$mbs += $key

$bcount++

}

}

}





$bresult += $ewc.GetAvailiblity($mbs, $drDuration, 30)

$frow = $true

foreach($fbents in $bresult){

foreach($key in $fbents.keys){

if ($frow -eq $true){

$fbboard = $fbboard + "http://primaryemail.co.uk/calendar.css`" rel=`"stylesheet`" type=`"text/css`">"

$fbBoard = $fbBoard + "My School Diary powered by http://primaryemail.co.uk`">Primary Email
"

$fbBoard = $fbBoard + ""

$fbBoard = $fbBoard + ""

for($stime = $drDuration.StartTime;$stime -lt $drDuration.EndTime;$stime = $stime.AddMinutes(30)){

$fbBoard = $fbBoard + ""

$valuehash = $fbents[$key]

if ($stime -eq $drDuration.StartTime){

}

switch($valuehash[$stime.ToString("HH:mm")].FBStatus.ToString()){

"0" {$bgColour = ""}

"1" {$bgColour = "bgcolor=`"#52F3FF`""}

"2" {$bgColour = "bgcolor=`"#153E7E`""}

"3" {$bgColour = "bgcolor=`"#4E387E`""}

"4" {$bgColour = "bgcolor=`"#98AFC7`""}

"N/A" {$bgColour = "bgcolor=`"#98AFC7`""}

}

$title = ""

if ($valuehash[$stime.ToString("HH:mm")].FBSubject -ne $null){

if ($valuehash[$stime.ToString("HH:mm")].FBLocation -ne $null){

$title = $title + $valuehash[$stime.ToString("HH:mm")].FBSubject.ToString()

}

else {

$title = $title + $valuehash[$stime.ToString("HH:mm")].FBSubject.ToString()

}

}

else {}

if($title -ne "title="){$fulltitle = $title

$title = $title.substring(0,38)

$fbBoard = $fbBoard + "" +"`r`n"

}

else{

$fbBoard = $fbBoard + "`r`n"

}

}

}

}

}











$mbHash = @{ }



get-mailbox $mbMailboxEmail| foreach-object{

if ($mbHash.ContainsKey($_.WindowsEmailAddress.ToString()) -eq $false){

$mbHash.Add($_.WindowsEmailAddress.ToString(),$_.DisplayName)

}

}

$mbs = @()



$ewc = new-object EWSUtil.EWSConnection($mbMailboxEmail,$true, $null, $null, $null, $casURL)

$drDuration = new-object EWSUtil.EWS.Duration



$tomorrow = get-date (get-date).AddDays(1) -format "d MMMM yyyy"

$tomorrow = $tomorrow + " 08:30:00"

$drDuration.StartTime = $tomorrow



$dd = [DateTime]::Parse([DateTime]::Now.ToString("yyyy-MM-dd+1 08:30"))

$tomorrow = get-date (get-date).AddDays(1) -format "d MMMM yyyy"

$tomorrow2 = $tomorrow + " 18:00:00"

$drDuration.EndTime = $tomorrow2

$drDuration.EndTime = $tomorrow2

echo $tomorrow

echo $tomorrow2

$batchsize = 100

$bcount = 0

$bresult = @()

if ($mbHash.Count -ne 0){

foreach($key in $mbHash.keys){

if ($bcount -ne $batchsize){

$mbs += $key

$bcount++

}

else{

$bresult += $ewc.GetAvailiblity($mbs, $drDuration, 30)

$mbs = @()

$bcount = 0

$mbs += $key

$bcount++

}

}

}



$bresult += $ewc.GetAvailiblity($mbs, $drDuration, 30)

$frow = $false

foreach($fbents in $bresult){

foreach($key in $fbents.keys){

$fbBoard = $fbBoard + "
Today
" + $stime.ToString("HH:mm") + " $title
"

$fbBoard = $fbBoard + "
"

for($stime = $drDuration.StartTime;$stime -lt $drDuration.EndTime;$stime = $stime.AddMinutes(30)){

$fbBoard = $fbBoard + "
"

$valuehash = $fbents[$key]

if ($stime -eq $drDuration.StartTime){

}

switch($valuehash[$stime.ToString("HH:mm")].FBStatus.ToString()){

"0" {$bgColour = ""}

"1" {$bgColour = "bgcolor=`"#52F3FF`""}

"2" {$bgColour = "bgcolor=`"#153E7E`""}

"3" {$bgColour = "bgcolor=`"#4E387E`""}

"4" {$bgColour = "bgcolor=`"#98AFC7`""}

"N/A" {$bgColour = "bgcolor=`"#98AFC7`""}

}

$title = ""

if ($valuehash[$stime.ToString("HH:mm")].FBSubject -ne $null){

if ($valuehash[$stime.ToString("HH:mm")].FBLocation -ne $null){

$title = $title + $valuehash[$stime.ToString("HH:mm")].FBSubject.ToString()

}

else {

$title = $title + $valuehash[$stime.ToString("HH:mm")].FBSubject.ToString()

}

}

else {}

if($title -ne "title="){$fulltitle = $title

$title = $title.substring(0,38)

$fbBoard = $fbBoard + "
" +"`r`n"

}

else{

$fbBoard = $fbBoard + "`r`n"

}

}

}

}







$mbHash = @{ }



get-mailbox $mbMailboxEmail| foreach-object{

if ($mbHash.ContainsKey($_.WindowsEmailAddress.ToString()) -eq $false){

$mbHash.Add($_.WindowsEmailAddress.ToString(),$_.DisplayName)

}

}

$mbs = @()



$ewc = new-object EWSUtil.EWSConnection($mbMailboxEmail,$true, $null, $null, $null, $casURL)

$drDuration = new-object EWSUtil.EWS.Duration



$tomorrow = get-date (get-date).AddDays(2) -format "d MMMM yyyy"

$tomorrow = $tomorrow + " 08:30:00"

$drDuration.StartTime = $tomorrow



$dd = [DateTime]::Parse([DateTime]::Now.ToString("yyyy-MM-dd+1 08:30"))

$tomorrow = get-date (get-date).AddDays(2) -format "d MMMM yyyy"

$tomorrow2 = $tomorrow + " 18:00:00"

$drDuration.EndTime = $tomorrow2

$drDuration.EndTime = $tomorrow2

echo $tomorrow

echo $tomorrow2

$batchsize = 100

$bcount = 0

$bresult = @()

if ($mbHash.Count -ne 0){

foreach($key in $mbHash.keys){

if ($bcount -ne $batchsize){

$mbs += $key

$bcount++

}

else{

$bresult += $ewc.GetAvailiblity($mbs, $drDuration, 30)

$mbs = @()

$bcount = 0

$mbs += $key

$bcount++

}

}

}



$bresult += $ewc.GetAvailiblity($mbs, $drDuration, 30)

$frow = $false

foreach($fbents in $bresult){

foreach($key in $fbents.keys){

$fbBoard = $fbBoard + "
$tomorrow
$title
"

$fbBoard = $fbBoard + "
"



for($stime = $drDuration.StartTime;$stime -lt $drDuration.EndTime;$stime = $stime.AddMinutes(30)){

$fbBoard = $fbBoard + "
"

$valuehash = $fbents[$key]

if ($stime -eq $drDuration.StartTime){

}

switch($valuehash[$stime.ToString("HH:mm")].FBStatus.ToString()){

"0" {$bgColour = ""}

"1" {$bgColour = "bgcolor=`"#52F3FF`""}

"2" {$bgColour = "bgcolor=`"#153E7E`""}

"3" {$bgColour = "bgcolor=`"#4E387E`""}

"4" {$bgColour = "bgcolor=`"#98AFC7`""}

"N/A" {$bgColour = "bgcolor=`"#98AFC7`""}

}

$title = ""

if ($valuehash[$stime.ToString("HH:mm")].FBSubject -ne $null){

if ($valuehash[$stime.ToString("HH:mm")].FBLocation -ne $null){

$title = $title + $valuehash[$stime.ToString("HH:mm")].FBSubject.ToString()

}

else {

$title = $title + $valuehash[$stime.ToString("HH:mm")].FBSubject.ToString()

}

}

else {}

if($title -ne "title="){$fulltitle = $title

$title = $title.substring(0,38)

$fbBoard = $fbBoard + "
" +"`r`n"

}

else{

$fbBoard = $fbBoard + "`r`n"

}

}

}

}









$mbHash = @{ }



get-mailbox $mbMailboxEmail| foreach-object{

if ($mbHash.ContainsKey($_.WindowsEmailAddress.ToString()) -eq $false){

$mbHash.Add($_.WindowsEmailAddress.ToString(),$_.DisplayName)

}

}

$mbs = @()



$ewc = new-object EWSUtil.EWSConnection($mbMailboxEmail,$true, $null, $null, $null, $casURL)

$drDuration = new-object EWSUtil.EWS.Duration



$tomorrow = get-date (get-date).AddDays(3) -format "d MMMM yyyy"

$tomorrow = $tomorrow + " 08:30:00"

$drDuration.StartTime = $tomorrow



$dd = [DateTime]::Parse([DateTime]::Now.ToString("yyyy-MM-dd+1 08:30"))

$tomorrow = get-date (get-date).AddDays(3) -format "d MMMM yyyy"

$tomorrow2 = $tomorrow + " 18:00:00"

$drDuration.EndTime = $tomorrow2

$drDuration.EndTime = $tomorrow2

echo $tomorrow

echo $tomorrow2

$batchsize = 100

$bcount = 0

$bresult = @()

if ($mbHash.Count -ne 0){

foreach($key in $mbHash.keys){

if ($bcount -ne $batchsize){

$mbs += $key

$bcount++

}

else{

$bresult += $ewc.GetAvailiblity($mbs, $drDuration, 30)

$mbs = @()

$bcount = 0

$mbs += $key

$bcount++

}

}

}





$bresult += $ewc.GetAvailiblity($mbs, $drDuration, 30)

$frow = $false

foreach($fbents in $bresult){

foreach($key in $fbents.keys){

$fbBoard = $fbBoard + "
$tomorrow
$title
"

$fbBoard = $fbBoard + "
"



for($stime = $drDuration.StartTime;$stime -lt $drDuration.EndTime;$stime = $stime.AddMinutes(30)){

$fbBoard = $fbBoard + "
"

$valuehash = $fbents[$key]

if ($stime -eq $drDuration.StartTime){

}

switch($valuehash[$stime.ToString("HH:mm")].FBStatus.ToString()){

"0" {$bgColour = ""}

"1" {$bgColour = "bgcolor=`"#52F3FF`""}

"2" {$bgColour = "bgcolor=`"#153E7E`""}

"3" {$bgColour = "bgcolor=`"#4E387E`""}

"4" {$bgColour = "bgcolor=`"#98AFC7`""}

"N/A" {$bgColour = "bgcolor=`"#98AFC7`""}

}

$title = ""

if ($valuehash[$stime.ToString("HH:mm")].FBSubject -ne $null){

if ($valuehash[$stime.ToString("HH:mm")].FBLocation -ne $null){

$title = $title + $valuehash[$stime.ToString("HH:mm")].FBSubject.ToString()

}

else {

$title = $title + $valuehash[$stime.ToString("HH:mm")].FBSubject.ToString()

}

}

else {}

if($title -ne "title="){$fulltitle = $title

$title = $title.substring(0,38)

$fbBoard = $fbBoard + "
" +"`r`n"

}

else{

$fbBoard = $fbBoard + "`r`n"

}

}

}

}









$mbHash = @{ }



get-mailbox $mbMailboxEmail| foreach-object{

if ($mbHash.ContainsKey($_.WindowsEmailAddress.ToString()) -eq $false){

$mbHash.Add($_.WindowsEmailAddress.ToString(),$_.DisplayName)

}

}

$mbs = @()



$ewc = new-object EWSUtil.EWSConnection($mbMailboxEmail,$true, $null, $null, $null, $casURL)

$drDuration = new-object EWSUtil.EWS.Duration



$tomorrow = get-date (get-date).AddDays(4) -format "d MMMM yyyy"

$tomorrow = $tomorrow + " 08:30:00"

$drDuration.StartTime = $tomorrow



$dd = [DateTime]::Parse([DateTime]::Now.ToString("yyyy-MM-dd+1 08:30"))

$tomorrow = get-date (get-date).AddDays(4) -format "d MMMM yyyy"

$tomorrow2 = $tomorrow + " 18:00:00"

$drDuration.EndTime = $tomorrow2

$drDuration.EndTime = $tomorrow2

echo $tomorrow

echo $tomorrow2

$batchsize = 100

$bcount = 0

$bresult = @()

if ($mbHash.Count -ne 0){

foreach($key in $mbHash.keys){

if ($bcount -ne $batchsize){

$mbs += $key

$bcount++

}

else{

$bresult += $ewc.GetAvailiblity($mbs, $drDuration, 30)

$mbs = @()

$bcount = 0

$mbs += $key

$bcount++

}

}

}





$bresult += $ewc.GetAvailiblity($mbs, $drDuration, 30)

$frow = $false

foreach($fbents in $bresult){

foreach($key in $fbents.keys){

$fbBoard = $fbBoard + "
$tomorrow
$title
"

$fbBoard = $fbBoard + "
"



for($stime = $drDuration.StartTime;$stime -lt $drDuration.EndTime;$stime = $stime.AddMinutes(30)){

$fbBoard = $fbBoard + "
"

$valuehash = $fbents[$key]

if ($stime -eq $drDuration.StartTime){

}

switch($valuehash[$stime.ToString("HH:mm")].FBStatus.ToString()){

"0" {$bgColour = ""}

"1" {$bgColour = "bgcolor=`"#52F3FF`""}

"2" {$bgColour = "bgcolor=`"#153E7E`""}

"3" {$bgColour = "bgcolor=`"#4E387E`""}

"4" {$bgColour = "bgcolor=`"#98AFC7`""}

"N/A" {$bgColour = "bgcolor=`"#98AFC7`""}

}

$title = ""

if ($valuehash[$stime.ToString("HH:mm")].FBSubject -ne $null){

if ($valuehash[$stime.ToString("HH:mm")].FBLocation -ne $null){

$title = $title + $valuehash[$stime.ToString("HH:mm")].FBSubject.ToString()

}

else {

$title = $title + $valuehash[$stime.ToString("HH:mm")].FBSubject.ToString()

}

}

else {}

if($title -ne "title="){$fulltitle = $title

$title = $title.substring(0,38)

$fbBoard = $fbBoard + "
" +"`r`n"

}

else{

$fbBoard = $fbBoard + "`r`n"

}

}

}

}







$mbHash = @{ }



get-mailbox $mbMailboxEmail| foreach-object{

if ($mbHash.ContainsKey($_.WindowsEmailAddress.ToString()) -eq $false){

$mbHash.Add($_.WindowsEmailAddress.ToString(),$_.DisplayName)

}

}

$mbs = @()



$ewc = new-object EWSUtil.EWSConnection($mbMailboxEmail,$true, $null, $null, $null, $casURL)

$drDuration = new-object EWSUtil.EWS.Duration



$tomorrow = get-date (get-date).AddDays(5) -format "d MMMM yyyy"

$tomorrow = $tomorrow + " 08:30:00"

$drDuration.StartTime = $tomorrow



$dd = [DateTime]::Parse([DateTime]::Now.ToString("yyyy-MM-dd+1 08:30"))

$tomorrow = get-date (get-date).AddDays(5) -format "d MMMM yyyy"

$tomorrow2 = $tomorrow + " 18:00:00"

$drDuration.EndTime = $tomorrow2

$drDuration.EndTime = $tomorrow2

echo $tomorrow

echo $tomorrow2

$batchsize = 100

$bcount = 0

$bresult = @()

if ($mbHash.Count -ne 0){

foreach($key in $mbHash.keys){

if ($bcount -ne $batchsize){

$mbs += $key

$bcount++

}

else{

$bresult += $ewc.GetAvailiblity($mbs, $drDuration, 30)

$mbs = @()

$bcount = 0

$mbs += $key

$bcount++

}

}

}



$bresult += $ewc.GetAvailiblity($mbs, $drDuration, 30)

$frow = $false

foreach($fbents in $bresult){

foreach($key in $fbents.keys){

$fbBoard = $fbBoard + "
$tomorrow
$title
"

$fbBoard = $fbBoard + "
"

for($stime = $drDuration.StartTime;$stime -lt $drDuration.EndTime;$stime = $stime.AddMinutes(30)){

$fbBoard = $fbBoard + "
"

$valuehash = $fbents[$key]

if ($stime -eq $drDuration.StartTime){

}

switch($valuehash[$stime.ToString("HH:mm")].FBStatus.ToString()){

"0" {$bgColour = ""}

"1" {$bgColour = "bgcolor=`"#52F3FF`""}

"2" {$bgColour = "bgcolor=`"#153E7E`""}

"3" {$bgColour = "bgcolor=`"#4E387E`""}

"4" {$bgColour = "bgcolor=`"#98AFC7`""}

"N/A" {$bgColour = "bgcolor=`"#98AFC7`""}

}

$title = ""

if ($valuehash[$stime.ToString("HH:mm")].FBSubject -ne $null){

if ($valuehash[$stime.ToString("HH:mm")].FBLocation -ne $null){

$title = $title + $valuehash[$stime.ToString("HH:mm")].FBSubject.ToString()

}

else {

$title = $title + $valuehash[$stime.ToString("HH:mm")].FBSubject.ToString()

}

}

else {}

if($title -ne "title="){$fulltitle = $title

$title = $title.substring(0,38)

$fbBoard = $fbBoard + "
" +"`r`n"

}

else{

$fbBoard = $fbBoard + "`r`n"

}

}

}

}







$mbHash = @{ }



get-mailbox $mbMailboxEmail| foreach-object{

if ($mbHash.ContainsKey($_.WindowsEmailAddress.ToString()) -eq $false){

$mbHash.Add($_.WindowsEmailAddress.ToString(),$_.DisplayName)

}

}

$mbs = @()



$ewc = new-object EWSUtil.EWSConnection($mbMailboxEmail,$true, $null, $null, $null, $casURL)

$drDuration = new-object EWSUtil.EWS.Duration



$tomorrow = get-date (get-date).AddDays(6) -format "d MMMM yyyy"

$tomorrow = $tomorrow + " 08:30:00"

$drDuration.StartTime = $tomorrow



$dd = [DateTime]::Parse([DateTime]::Now.ToString("yyyy-MM-dd+1 08:30"))

$tomorrow = get-date (get-date).AddDays(6) -format "d MMMM yyyy"

$tomorrow2 = $tomorrow + " 18:00:00"

$drDuration.EndTime = $tomorrow2

$drDuration.EndTime = $tomorrow2

echo $tomorrow

echo $tomorrow2

$batchsize = 100

$bcount = 0

$bresult = @()

if ($mbHash.Count -ne 0){

foreach($key in $mbHash.keys){

if ($bcount -ne $batchsize){

$mbs += $key

$bcount++

}

else{

$bresult += $ewc.GetAvailiblity($mbs, $drDuration, 30)

$mbs = @()

$bcount = 0

$mbs += $key

$bcount++

}

}

}



$bresult += $ewc.GetAvailiblity($mbs, $drDuration, 30)

$frow = $false

foreach($fbents in $bresult){

foreach($key in $fbents.keys){

$fbBoard = $fbBoard + "
$tomorrow
$title
"

$fbBoard = $fbBoard + "
"

for($stime = $drDuration.StartTime;$stime -lt $drDuration.EndTime;$stime = $stime.AddMinutes(30)){

$fbBoard = $fbBoard + "
"

$valuehash = $fbents[$key]

if ($stime -eq $drDuration.StartTime){

}

switch($valuehash[$stime.ToString("HH:mm")].FBStatus.ToString()){

"0" {$bgColour = ""}

"1" {$bgColour = "bgcolor=`"#52F3FF`""}

"2" {$bgColour = "bgcolor=`"#153E7E`""}

"3" {$bgColour = "bgcolor=`"#4E387E`""}

"4" {$bgColour = "bgcolor=`"#98AFC7`""}

"N/A" {$bgColour = "bgcolor=`"#98AFC7`""}

}

$title = ""

if ($valuehash[$stime.ToString("HH:mm")].FBSubject -ne $null){

if ($valuehash[$stime.ToString("HH:mm")].FBLocation -ne $null){

$title = $title + $valuehash[$stime.ToString("HH:mm")].FBSubject.ToString()

}

else {

$title = $title + $valuehash[$stime.ToString("HH:mm")].FBSubject.ToString()

}

}

else {}

if($title -ne "title="){$fulltitle = $title

$title = $title.substring(0,38)

$fbBoard = $fbBoard + "
" +"`r`n"

}

else{

$fbBoard = $fbBoard + "`r`n"

}

}

}

}





del c:\fbboard.htm

$fbBoard | out-file "c:\fbboard.htm"

(Get-Content C:\fbboard.htm) |

Foreach-Object {$_ -replace "\|\|", " & "} |

Set-Content C:\calendar.htm
 
$tomorrow
$title