Thursday, June 23, 2011

Will your OCS / Lync Front End not start because of license issues?

I Have run into this problem 2-3 times last week, so I wanted to remind people about the issue.
The error you see is that your Lync or OCS Front End service centers will not start and errors a la the following is logged in your event viewer:

The evaluation period for Microsoft Office Communications Server 2007 R2 has expired. Please upgrade from evaluation version to the full released version of the product.

Failed to activate Office Communications Server Standard Edition Server on machine R2

Or in Lync

The evaluation period for Microsoft Lync Server 2010 has expired. Please upgrade from evaluation version to fully licensed version of the product.

There are 2 possible sources of error for this:

You (or the colleague who usually gets the blame) made a mistake
t installed the eval version of Lync and the 180 days are now gone, so the product has expired
Find the full version of Lync, copy it locally into the server and run:
msiexec.exe / fvomus server.msi EVALTOFULL = 1 / qb
If it comes back with a message that it can not upgrade FULL to FULL, then the next source of error is:

Microsoft made a mistake
Or rather they have addressed a critical issue in their CryptoAPI (and we're happy for that), but this correction criples OCS and Lync (and LCS for that matter), so the product think it is running on an evaluation version. The error is described here:

and solved by setting a registry setting or running OCSASNfix.exe from a command prompt.

Good luck out there!

Wednesday, January 12, 2011

Elevation of Privilege (EoP) Card Game

Elevation of Privilege is the easy way to get started threat modeling. Threat modeling is a core component of the design phase in the Microsoft Security Development Lifecycle (SDL).
The Elevation of Privilege (EoP) card game helps clarify the details of threat modeling and examines possible threats to software and computer systems.

Read more and get it at

The Little Book of Semaphores

In common use, “synchronization” means making two things happen at the
same time. In computer systems, synchronization is a little more general; it
refers to relationships among events—any number of events, and any kind of
relationship (before, during, after).
Computer programmers are often concerned with synchronization con-
straints, which are requirements pertaining to the order of events. Examples
Serialization: Event A must happen before Event B.
Mutual exclusion: Events A and B must not happen at the same time.
In real life we often check and enforce synchronization constraints using a
clock. How do we know if A happened before B? If we know what time both
events occurred, we can just compare the times.
In computer systems, we often need to satisfy synchronization constraints
without the benefit of a clock, either because there is no universal clock, or
because we don’t know with fine enough resolution when events occur.
That’s what this book is about: software techniques for enforcing synchronization

Here are just a few examples of the algorithms covered.

  • Readers-writers problem
  • Dining philosophers
  • The dining savages problem
  • The Santa Claus problem
  • Building H2O
  • The unisex bathroom problem
  • Baboon crossing problem

Read it at

Programming is not a craft – or is it?

Software Craftsmanship risks putting the software at the centre rather than the benefit the software is supposed to deliver, mostly because we are romantics with big egos. Programming is about automating work like crunching data, processing and presenting information, or controlling and automating machines.
Non-programmers don’t care about the aesthetics of software in the same way non-plumbers don’t care about the aesthetics of plumbing – they just want their information in the right place or their hot water to work. (Although it’s fair to say they appreciate decent boiler controls.)
Read the rest and the comments at

Thursday, November 11, 2010

Lync Server 2010 documentation RTW’ed

The first “RTM” version of the Lync Server 2010 documentation has been Released To The Web.

The easiest way to get it, is to to download the compiled help file containing all the documentation from here. This file also contains download links for Word versions (Good for printing) of the documentation.

The Links for online (always up-to-date) versions of the documentation can be found here.

Happy reading Winking smile

Friday, October 15, 2010

Getting to understand F#

I find it hard to get F# (like other functional languages) under the nails as we say in Denmark. Here is 4 short and funny articles by Ivan Towlson that shed some more light on it. The first starts here: F# and first-class functions, part 1: the composition operator

Wednesday, October 06, 2010

Javascript Libraries and ASP.NET: A Guide to jQuery, AJAX and Microsoft

When Microsoft announced they would begin providing official support for jQuery, few of us realized how profoundly that announcement would eventually impact client-side development on the ASP.NET platform. Since that announcement, using jQuery with ASP.NET has moved from the obscure, to a central role in ASP.NET MVC’s client-side story, and now to the point of potentially superseding ASP.NET AJAX itself.

Get the full picture and read the rest at:

Monday, September 13, 2010

Communications Server ‘14’ gets its new name – Lync

Our NDA has been lifted and we can now reveal the new name for the Communications Server '14 '.

The child has been named Lync, which is a combination of the words Link and Sync. Microsoft describes the name as more in line with the experience you get with a true unified communications product.

image image image

The forthcoming Communications Server "14" will thus be called "Lync Server 2010 and clients:

  • Lync 2010 (Corresponding Office Communicator)
  • Lync Attendant Console (As in OCS 2007 R2)
  • Lync Attendee to participate in web conferencing with audio-video when you do not have Lync (For example, external users who previously would have used Live Meeting Console)
  • Lync Web App which is the web-based client for web conferencing (without IP audio / video)
  • Lync Devices are network units running Lync Phone Edition phones or conference units connected directly to Ethernet and Lync Server.

Lync Server is available as a download in Release Candidate version on Microsoft's website. This version will work until February 2011th. There is also a Planning Tool ready, and Attendee console, see the Microsoft Download all Lync downloads.

In addition to downloads, you can take a look at or the press release.

Saturday, July 10, 2010

Minimizing Performance Hit when Running Home Server Backup

I’ve always been annoyed by my home server backup. It always starts when I start the PC and then it eats a lot of resources. I often either postpone the backup or change its priority to low which more importantly reduces the IO priority to low as well.

But why not automate the latter?

And that is easy:

  • Start Event Viewer
  • Find HomeBackup event 768 in the Application log
  • Right-click specifying attach task to event
  • Follow the wizard, specify powershell.exe as program and ‘-noprofile c:\IdleBackupEngine.ps1’ as argument.
  • At the end of the wizard, select to open properties afterwards and change the task to use SYSTEM with highest privileges enabled
  • Finally, create c:\IdleBackupEngine.ps1. It only contains a single line: (gps backupengine).priorityclass="idle"

Have fun – working *during* the backup

Saturday, June 19, 2010

Danish User Group CoLabora startup meeting

Hi everyone,

Fellow MVP and Exchange MCM Peter Schmidt and I have recently founded a Danish User Group focusing on UC (OCS/CS and Exchange) called CoLabora. It is run on a non-profit basis and the goal is to establish a Danish independent forum for professionals working with Microsoft Unified Communications.

We are now announcing our first User Group meeting for CoLabora, which is taking place on June 29th from 14.00 – 17.00 (followed by a Sandwich / networking) and the agenda will be focusing on Communications Server ‘14’' and the news in Exchange Server 2010 SP1 (Seen from a Danish/Nordic perspective).

For more information (In Danish) and registration go to

We hope to see some of our Danish readers at the event !

Vitamins, Painkillers and Viagra (this is not spam)

Dick Hardt has written a interesting, reflective article. Is your product or our consulting service a vitamin, a painkiller or viagra? Read the definitions in

Monday, June 14, 2010

Get-Line and Got-NewJob

Hi. It has been a while as I have been busy with my new job. I’m now working LEGO as Senior Solution Architect for Visit a great web site and any feedback is welcome.

Consequently, I’m not using PowerShell as much as I used – to at least not for so complicated solution. On the other hand I’m using it almost daily as is it so useful for test web related things.

But my new colleagues know that I know PowerShell so today Michael asked about how to get a few lines from a text file. This is easy, but if it was easy, Michael would have figured it out himself. The problem is that the file is huge (E.G. 1.5GB), so using Get-Content with Select-Object or similar would be very memory intensive and thus slow. I said that I would either call .Net directly or embed some C# code in a script.

Well, now it is evening and I’m watching the Italian-Paraguay match and – hey – why not do a little blogging while and again!

As thought, so done. Here’s my solution. It took as little more than an hour including help and validation. For newcomers, use Get-Line –? for displaying the help nicely formatted.

The script -

Get line or lines from a text file
Get one of more lines from the specified file. Line numbers are positive and the first line is number 1.
Array of strings
Get-Line $env:temp\lines.txt 23,897,45
Get lines 23, 45 and 897. Lines are returned in increasing order. E.g. line 23 is returned first, then line 45 and finally, line 897

[ValidateScript({Test-Path $_})]
# The path of the file to get the lines from
[ValidateScript({$_ -gt 0})]
# One or more line numbers (e.g. first line is 1) to retrieve from the file

add-type -TypeDefinition @'
using System;
using System.Collections.Generic;
using System.IO;

namespace Per
public class FileFunctions
public List<string> GetLines(string file, System.Collections.Generic.Queue<long> lines)
FileStream fs;
StreamReader sr;
List<string> linesFound = new List<string>();
using (fs = new System.IO.FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read, 10 * 1024 * 1024))
using (sr = new System.IO.StreamReader(fs))
int lineCounter = 0;
int linesIndex = 0;
if (lines.Count == 0)
return new List<string>();
long findLine = lines.Dequeue();
while (!sr.EndOfStream)
string line = sr.ReadLine();
if (lineCounter == findLine)
if (lines.Count == 0)
findLine = lines.Dequeue();



return linesFound;

$c=new-object Per.FileFunctions
[int64[]]$sortedLines=$lines | sort -unique | where {$_ -gt 0}
$c.GetLines((Resolve-Path $path),$sortedLines)

As always: Have fun!

Friday, April 23, 2010

Office 2010 RTM now available at TechNet Subscriber Downloads

Just a quick notice, I just reinstalled my X301 yesterday (Due to SSD slowdown) and was planning on using OWA until the RTM release of Office 2010 (I have enough Beta software on my machine as it is).

Turns out that I didn’t have to wait that long ;-)

Saturday, April 17, 2010

OCS Voice in the “Cloud” for dedicated customers in US

Interesting bit of news from Microsoft Online included in the post Expanded Global Availability. SIP trunking is now supported but only for customers in US

US-based BPOS Dedicated customers can now enjoy a more complete unified communications (UC) experience in the cloud with Office Communications Online. Optimized for highly mobile information workers, the new voice capabilities enable people to make and receive phone calls anywhere using their PC and any broadband connection. The new service helps people be more productive by providing a simple UC experience, the ability to reach the right person at the right time, and improved mobility. BPOS-D can reduce the load on customers’ existing PBX (private branch exchange) investments by moving some workers onto a cloud based solution, but is not intended to replace all PBX functionality at this time.

Initially, the new voice service is offered in the US only, and it is important to note that connectivity from a qualified SIP (session initiation protocol) trunking provider is required for customers to connect to the PSTN (public switched telephone network). Currently, these services are available from Global Crossing (

We look forward to this for all non-dedicated customers and also in Europe (But we probably shouldn’t be holding our breath while waiting ;-)

Friday, April 16, 2010

OCS 2007 R2 CU 5 RTW’ed

Office Communications Server 2007 R2 Cumulative Update 5 has been released to the web (At least the downloads – KB links may not be ready yet).





Office Communications Server 2007 R2



MS download

Office Communication Server 2007 R2 Database upgrade



MS download

Attendant Console 2007 R2



MS download

Office Communicator 2007 R2



MS download

Office Communicator Phone Edition 2007 R2



MS download

As always look for the ServerUpdateInstaller.exe for easy installation on your OCS servers (But do remember to read all the related KB articles for any additional information regarding the updates – e.g. the Response Group KB has a gotcha regarding SPN’s).

The update includes some interesting changes to UCMA that starts to provide support for DNS load balancing, inband fax tone detection, retrieval of additional diversion header information etc. for Exchange 2010 UM.

According to Microsoft there will be additional release of updates for Group Chat and all the updates will be available through Microsoft Update the fourth Tuesday of April.

Happy updating.

Sunday, March 28, 2010

Adobe Reader preview handler on 64-bit Windows 7

Found this fixer – and it simply works!

Now I can preview the PDF documents in Windows Explorer (Alt+P if you do not know the feature) without having to fire up Adobe Reader and needing one more window :)

Wednesday, March 24, 2010

News on Microsoft Communications Server “Wave "14”

So news on Wave 14 starts coming in from VoiceCon in Orlando. Here is a set of partner related news including the new Microsoft solution for Survivable Branch Appliances (SBA) and not least a new range of IP phones from Aastra and Polycom (With a much better price point than the current Tanjay).


It will be even more interesting to see how much information on Wave 14 that Gurdeep Singh Pall (Vice President of UCG) announces at his Keynote presentation today at 11:15 AM – 12:00 PM EST  ;-)

You can register for a Live WebCast directly from Orlando at VoiceConTV.

Friday, March 05, 2010

Update Rollup 2 for Exchange 2010 has RTW’ed

The awaited Rollup fixes amongst other things several PO3 and IMAP issues and an update to Push Notifications.

Read more at KB979611 or proceed directly to the download site (And if you haven’t already done so – remember to look at Exchange 2010 Unified Messaging it ROCKZ ;-)

Tuesday, March 02, 2010

OCS 2007 R2 Audio Conferencing Deep Dive tonight

FYI - I’m presenting an Audio Conferencing Deep Dive tonight (March 2nd 20.00 CET and 11:00 AM Pacific )

Event Overview

Are you familiar with Microsoft Office Communications Server 2007 R2 dial-in conferencing and want to go deeper into the technical details? Or, are you thinking about deploying dial-in conferencing but have not yet done so? Attend this webcast for a demonstration of how Communications Server 2007 R2 works in practice, and get a detailed look at component interactions and call flows.

Presenter: Dennis Lundtoft Thomsen, Technical Evangelist, Inceptio Learning Solutions ApS

Dennis Thomsen works for Inceptio Learning ApS as a technical evangelist, educating Microsoft partners worldwide on bleeding edge technologies. He blogs, twitters, and writes articles on unified communications (UC), and he is writing a book on Microsoft UC to be published in the third or fourth quarter of 2010. Dennis's work focuses on large-scale enterprise and hosted Microsoft Unified Communications projects. He holds several Microsoft certifications and an Executive Master of Business Administration (MBA) degree with specialization in management of technology. Dennis was awarded a Microsoft Most Valuable Professional (MVP) award in 2007, 2008, and 2009.

View other sessions from Unified Communications: Control Your Infrastructure

It’s a level 2-300 presentation and it’s my first webcast, so don’t expect to much ;-)

Wednesday, February 17, 2010

OCS Voice Exam 71-404 period extended 2 weeks

Due to extreme winter weather conditions, Microsoft is extending Beta Exam 71-404, OCS 2007 R2 Voice Specialization for another two weeks.

Register for FREE with code OCR2J for BETA Exam 71-404  Prometric sites

Candidates should plan for up to four hours to take the Beta exam and provide feedback on every question (versus the typical two hours to take Released version exams.)

It is highly recommended that candidates for Exam 74-404 (Beta 71-404) have experience with OCS 2007 R2 and have completed the Unified Communications Voice Ignite v 2.0 (R2) Workshop. A preparation guide for the exam is available at

I’ve heard good feedback from people who have taken the Beta exam – so go ahead and try (Last available date is February 26th ;-)

Tuesday, February 09, 2010

Information Overload and Social Impact of UC

Michael J. Killian has created a 3-series post on his view on Unified Communications, Information Overload, the Social Behavior Impacts and Social Networking in The Enterprise.

Interesting and well written perspectives for anyone interested in the non-technical side of working with Unified Communications!

Thursday, February 04, 2010

NET acquires SmartSIP from Evangelyze

Good news for users of NET Gateways for their OCS implementations (and future customers ;-) NET has acquired the smartSIP product from Evangelyze -

The SmartSIP product line includes both the SmartSIP and SmartVoIP products. SmartSIP enables UC presence and interoperability for SIP phones while providing integration for Microsoft's Office Communications Server with IP-PBXs and integration for ITSP voice providers. SmartVoIP, a 2008 Internet Telephony Product of the Year, is an extension of SmartSIP that provides branch office integration with Microsoft Office Communications Server.

Read the full press release here.

Invoking the PowerShell Debugger from Script

With PowerShell v2, a new and much improved command line debugger was introduced. The old one is still around though. Anyway, more information can be found in the help subject about_Debuggers.

The strange part is that Set-PsDebug –Step invokes the old debugger and there does not seem to be a way of invoking the new one. You can only invoke the new one by setting a breakpoint. Even though, breakpoints are a very useful feature which I use a lot, I would also like to do it from inside a script.

I have played around with some ways of doing this.

First, a self-contained function

Function Invoke-Debugger{
function debug{}
$bp=Set-PSBreakPoint -Command debug
$bp | Remove-PSBreakpoint

function test{
write-host 1
write-host 2


It works great, but has the downside, that the current execution pointer is inside the Invoke-Debugger function -

Entering debug mode. Use h or ? for help.

Hit Command breakpoint on 'debug'

x.ps1:4 debug
7 $docs>>> l

1: Function Invoke-Debugger{
2: function debug{}
3: $bp=Set-PSBreakPoint -Command debug
4:* debug
5: $bp | Remove-PSBreakpoint
6: }
8: function test{
9: write-host 1
10: Invoke-Debugger
11: write-host 2
12: }
14: test

No matter how I try to tweak it, I end up in the same way.

Next, lets try using a two part approach (setting the breakpoint and doing some action to invoke it) -

$null=Set-PSBreakpoint -Variable InvokeDebugger

function test{
write-host 1
write-host 2


This is much better, now the execution pointer is right in the code -

Hit Variable breakpoint on '$InvokeDebugger' (Write access)

x.ps1:5 $InvokeDebugger=1
9 $docs>>> l

1: $null=Set-PSBreakpoint -Variable InvokeDebugger
3: function test{
4: write-host 1
5:* $InvokeDebugger=1
6: write-host 2
7: }
9: test

Eventually, this led me to this piece of code. It is easier to write than the variable assignment and you can also define an easy-writeable alias for it -

function Invoke-Debugger{}
New-Alias id Invoke-Debugger
$null=Set-PSBreakPoint –Command Invoke-Debugger

function test{
write-host 1
write-host 2


The execution pointer is right at the call. If you include any statements in Invoke-Debugger, this will not work as well while ‘step’ will take execution into the function -

Hit Command breakpoint on 'Invoke-Debugger'

x.ps1:9 id
13 $docs>>> l

4: New-Alias id Invoke-Debugger
5: $null=Set-PSBreakPoint –Command Invoke-Debugger
7: function test{
8: write-host 1
9:* id
10: write-host 2
11: }
13: test

This method also enables you to make conditional break using straight, normal code (compared to making the logic in the –action argument of Set-PSBreakPoint) -

filter test{
write-host "got $_"
if ($_ -eq 3) {id}

1..5 | test

and the output -

got 1
got 2
got 3
Hit Command breakpoint on 'Invoke-Debugger'

x.ps1:9 if ($_ -eq 3) {id}
14 $docs>>> l

4: New-Alias id Invoke-Debugger
5: $null=Set-PSBreakPoint –Command Invoke-Debugger
7: filter test{
8: write-host "got $_"
9:* if ($_ -eq 3) {id}
10: }
12: 1..5 | test

You can include the Invoke-Debugger function and the Set-PSBreakPoint in your profile, so they are available in all our scripts.

Happy debugging..

Friday, January 29, 2010

One stop shop for all your OCS patches

Microsoft has created a really useful Updates Resource Center with all the latest and greatest patches listed for both Office Communications Server and the clients.

You can also find the updates at this RSS feed.

Note this is meant as a One Stop Shop, it is NOT the place where you’ll be notified first on a new OCS/OC patch.

Good work Microsoft ;-)

Monday, January 25, 2010

Interesting webcast from AudioCodes on OCS integration futures

Besides not being totally honest on what “other vendors” can do (E.g. NET and others provides most of these features and more on top), there were a lot of different interesting news -

They spoke about Direct Connect (Formerly known as “Advanced Gateway” functionality) that apparently is supported in all their gateways from MP11x series to the Mediant (Se their Application Note that doesn’t detail QoE / ICE support however).  The good thing about direct connect is that you get rid of the need to buy and deploy Mediation Server’s  (Bad news are that it’s officially unsupported – so AudioCodes / NET has to support these configurations directly)

Other more interesting functionality was support for third party PBX handsets (Again like NET VX1200 series) on remote locations and survivability for these (If they support it).  Also their own AudioCodes endpoints support registration to OCS, by proxying through their gateways to OCS (Which then handles call control). This includes support for Wideband and future support for presence.

Also Still time to see the #AudioCodes US prez running today at 12:00 noon (EST) / 09:00am (PST) - register here And a recorded webcast should also become available soon (I will update link to it).

Sunday, January 24, 2010

Comments on the OCS 2007 R2 Workload Architecture Poster

The recently RTW’ed Architecture Poster provides a very good overview of port and certificate requirements in the different OCS workloads.

This poster of Office Communications Server 2007 R2 describes the traffic flow of protocols and ports used in each workload. Communications Server 2007 R2 supports the following workloads: IM and Presence, Conferencing, Application Sharing, and Enterprise Voice. These filtered views can assist you in architecting your deployment of Communications Server 2007 R2. The different server roles are described along with server certificate requirements. Firewall and DNS configuration requirements are also described.

I like this Poster and the idea/work put in to it and will certainly print one out for the walls in my home office. It provides a visually good overview of the Port usage and signaling/media flows used in OCS.

I have a few comments to the drawing though -

Application Sharing Workload

  • Red arrow depicting RDP/SRTP shows inbound traffic to 50,000-59,999. This is not correct – only outbound is required to endpoint. The only place this would be required is for traffic to an OCS 2007 “R1” Edge Server.
  • “A/V Edge must have publicly routable IP addresses” – true if implemented in loadbalanced config as shown (But not required for standalone Edge).

Enterprise Voice Workload

  • Red arrow depicting RDP/SRTP shows inbound traffic to 50,000-59,999. This is not correct – only outbound is required to endpoint. The only place this would be required is for traffic to an OCS 2007 “R1” Edge Server
  • I’m sure G.711 is not used through the A/V Edge as any packet loss would kill it ;-) Siren maybe used for conferencing scenarios.

A/V and Web Conferencing Workload

  • Arrows for HTTPS traffic are not correct – they should point towards the LM endpoints, as they are used for downloads of content e.g. slides.
Firewall configuration and ports on the Edge Server. Even though not OCS specific I would personally add port 53 for DNS (To internal or external depending on config) and port 80 to both external and internal (As this port is used for CRL checks). If not in the drawing then in the “Firewall Configuration” text box.
I generally like the idea about the DNS and Certificate portion in this poster, but IMHO it is to simplified. If a future update is planned the I think it should have its own page/poster to really handle the different scenarios and namespace requirements in OCS. So for certificates I would still point to the Whitepaper on Deploying Certificates in OCS 2007 and OCS 2007 R2, which does a better job of explaining the complexity of certificates usage/naming in OCS.

Friday, January 22, 2010

BETA Exam 71-404 OCS 2007 R2 – UC Voice Specialization, Will Be Available January 25, 2010

The Voice Specialization exam for OCS 2007 R2 is finally getting closer to release with the launch of the Beta Exam.

Exam 74-404 (Beta Exam 71-404) is designed to validate the skills and experience of technical professional to design, deploy, and administer Microsoft Voice solutions in production based on Microsoft® Office Communications Server 2007 Release 2  (OCS 2007 R2) and including interoperability with OCS 2007, Microsoft® Exchange Server 2007 Unified Messaging, Microsoft® Windows Server Active Directory, gateways and Private Branch Exchanges (PBX’s).

It is highly recommended that candidates for Exam 74-404 have experience with OCS 2007 R2 and have completed the Unified Communications Voice Ignite v 2.0 (R2) Workshop. A preparation guide for the exam will be available soon. Click here for more details.  

Do remember that Inceptio Learning Solutions provide fully qualified UC Voice Ignite Workshops on-site at your company/training provider (almost) anywhere in the world (Contact for further info).

Happy testing ;-)

Wednesday, January 20, 2010

Maybe I should redefine “Office 2010 x64 fully working with OC” ?

I have now been working with Office 2010 x64 a week or so as per my post Office 2010 x64 now fully working with OC and LiveMeeting Add-in. I have some intermittent problems though – when I log-in everything works fine, then on occassion I get an -


The problem appears after a while and then disappears again later. Integration seems to work fine except that this problem appears from time to time – did anyone get the same error or no error at all? (Perhaps with only one Exchange mailbox – I have two Exchange mailboxes which has other issues – so it may be part of this problem).

Monday, January 18, 2010

Reference Variables

If you want to change a value inside a function, you have to use reference variables. They do not work the same way as they do in C, C# or VbScript.

This is a simple example -

function a([ref]$v) {
"a1 v=$($v.value)"
"a2 v=$($v.value)"

"begin x=$x"
a ([ref]$x)
"end x=$x"

Note that must use [ref] when declaring the argument and also when calling. Note also that you must use ([ref]$x) in the call. Finally, you can see that [ref] actually converts the variable into a PSReference object and that you must use .Value to set/get the value.

But what if you want to transfer the reference variable across multiple function calls? Well, the logical approach is this -

function b([ref]$v) {
"b1 v=$($v.value)"
"b2 v=$($v.value)"

function a([ref]$v) {
"a1 v=$($v.value)"
b ([ref]$v)
"a2 v=$($v.value)"

"begin x=$x"
a ([ref]$x)
"end x=$x"

The pattern is simply repeated. Just like you would in other languages. But THIS WILL NOT WORK. As the first call creates a PSReference object, using ([ref]$v) creates another level of redirection and things will fail. The correct solution is -

function b([ref]$v) {
"b1 v=$($v.value)"
"b2 v=$($v.value)"

function a([ref]$v) {
"a1 v=$($v.value)"
b $v
"a2 v=$($v.value)"

"begin x=$x"
a ([ref]$x)
"end x=$x"

Note that in the second call, $v – a PSReference object – is simply transferred.

Bottom line: Avoid [ref] when you can. Return values or use scoped variables when possible. Remember that it is very easy to return multiple values from a function and assign them to different variables -

function c{

Saturday, January 16, 2010

Simple script for extracting CDR records from OCS Monitoring Server

Andre Blumberg created instructions and a small script for extracting CDR records for outbound calls. Find it here and do remember to provide your feedback for him (So we all can benefit from your/Andre’s enhancements to the script ;-)

Friday, January 15, 2010

Office 2010 x64 now fully working with OC and LiveMeeting Add-in

First part of the solution was the January Office Communicator Update to 6907.83 that solved the Outlook integration issues/error (Which forced me to “downgrade” to 32 bit Office).

The last part of this solution was the release of the 64-bit LiveMeeting add-in which can be found here and while you’re at it the update to the LiveMeeting console can be found here.

Before upgrading do remember that there is a problem with file uploading in LiveMeeting – only supported file format is native PowerPoint files. Also remember the workaround to make updating OC running 64 bit OS work correctly.

Happy installing/upgrading to 64 bit  ;-)

Wednesday, January 13, 2010

Workaround for Client Version Filtering problem using 32 bit OC on X64 OS

My colleague Claus-Ole also found and fixed the problem, but Michael Sneeringer (A OCS MCM) was kind enough (hint, hint) to describe the problem and solution in Client Version Filtering on Windows x64.

Thursday, January 07, 2010

OCS Wave 14 features

FYI - Curtis Johnstone has revealed some of the essential OCS Wave 14 features – find them in his post OCS in 2010 - The UC 14 Wave.

As an MVP I’m under NDA so I can’t add to the above, but what I can say is that the future for OCS looks promising ;-)