Monday, December 22, 2008

Viewing the downloaded Address Book file in readable format

For troubleshooting reasons I have often looked in the garbled ABS file (GalContacts.db) that is downloaded to the Office Communicator client in the %userprofile%\appdata\Local\Microsoft\Communicator\ folder. I just stumbled over this tip for creating a version of the ABS file in CSV format that is saved in "My Received Files".

Set the following registry key to enable the CSV file creation and then restart Office Communicator.

[HKEY_CURRENT_USER\Software\Microsoft\Communicator]
"DumpContactstoCSVFile"=dword:00000001

View Jeff Schertz full tip (with screenshots) in his post Viewing the OCS Address Book (for Humans).

Sunday, December 21, 2008

Office Communications Server 2007 R2 is RTM'ed

On the 19th of December Office Communications Server 2007 R2 was Released To Manufacturing (Build 6907), so it is in good time for the official launch on February 3rd.

We have been working with R2 since the Beta and are currently working hard to develop our material for our 4 days on-site Voice training delivered on R2 (Now based on RC, but will be updated to RTM before the first trainings start in January). Our new training will include training on all aspects of R2, but as usual with a special focus on Voice integration.

image

New in this version are a lot of things like telephony enhancements and new clients including the Attendant Console (A group based switchboard solution) an updated "Office Communicator for Windows Mobility R2" (Nicknamed CoMo) that includes phone state on mobile phone calls and One Number features (I will do a review of this client later), Dial-in conferencing support (Including CWA support for external clients) and of course enhancements to the overall architecture (Including a move to a 64 bit Server platform) and not least an updated CWA that now supports Desktop Sharing also for external users and non-Microsoft browsers ... and much, much more that I will talk about later (Or that you can find at other blogs).

The official launch of Office Communications Server 2007 R2 will be a soft launch and Inceptio (the company I work for) is participating as a sponsor for this event, that you can sign up for here.

What will we do in terms of spreading the word on R2?

I have had plans to publish information on R2 earlier, but I didn't since it was hard to determine what information was OK to publish and what was not (And I like my MVP benefits to much too risk it). I will now start posting information on R2 starting with the new Windows Mobility client.

Furthermore I will be speaking at Exchange Connections (March 15-18 2009) and I currently have three sessions (Subject to change).

OCS 2007 R2 from PowerPoint to Reality

So you have seen all the nice presentations and demos from Microsoft on Unified Communications and bought the idea!? As you probably guessed, it usually is a tad more complex than the marketing slides tries to convince you, so in this session I will give you the tricks for implementing OCS 2007 R2 in your organization successfully. After this session you will know where to focus your attention before, during, and after your deployment project, including advice on where to focus your attention in terms of the organizational implementation.

Tips and Tricks for Maximizing Your Investment in Unified Communications
So you have OCS 2007 R2 and/or Exchange 2007 implemented in your organization and you are starting to realize your investment by using presence, click-to-dial, one Unified Messaging inbox etc., but maybe you want even more ROI on your investment? In this session we will do a lap around the platform and look under the hood for developers. We will look at and demonstrate how to integrate business processes with Exchange 2007 SP1 Web services, how to build services that manage communications, and also take a look at Windows Workflows that talk and IM.

What Does it Take to Voice-Enable Your OCS 2007 R2 Deployment?

How do you provide OCS 2007 R2 and Exchange with its own voice? This session will focus on all the voice capabilities of OCS and Exchange. We’ll discuss the possible scenarios and how to enable them in your environment. This will include detailed discussions on the actual capabilities of the different solutions and based on experience from real-life deployment the efforts required to implement and maintain the different voice scenarios ranging from a pure standalone Enterprise Voice scenario to a full PBX and UM integrated dual forking scenario.

See all of the sessions here.

Lastly we have our training sessions including 2-4 day (based on previous experience) OCS 2007 R2 Voice Boot Camps that we deliver on-site in Europe, both as open and closed training sessions. They Include level 3-500 training on OCS 2007 R2 infrastrucutre and Voice related subjects and we bring a full lab environment including powerful portables, network, telephony equipment (E.g. Nortel CS1000, Gatewasy and/or soft PBX) wideband GN2000 headsets, and much more. The newest addition to this is our 2-day developer training on R2/Exchange 2007 SP1 (Get more info in this by contacting me at my.initials@inceptio.dk).

So I guess 2009 will be yet another busy year ;-)

CU out there !

Tuesday, December 16, 2008

WM 6.1, AccuWeather and Schap's Advanced Config

Just upgraded my HTC Touch Dual to Windows Mobile 6.1 and were doing all my settings again. One program I used to have was Schap's Advanced Config (SAC) but in v1.1. From the site, I got v2.0 and that had a nice new feature: You can change the location used by the weather forecast application. My problem was that Billund, Denmark could not be chosen from the list, but by finding Billund at www.accuweather.com, I could get the city code EUR|DK|DA008|BILLUND from the URL and specify that using SAC. Now the weather app shows the correct forecast :)

Friday, December 12, 2008

Matching multi-line text and converting it into objects

Sometimes your input is simply text and you have to work with it. If it is line-based e.g. each object is a separate line, it is not so hard, but what if the output is very dynamic and the information you need to combine spans multiple lines? In this case, you could start making some kind of state machine e.g. when the starting point is reached, set a variable, save data as you go and when the ending point or the next starting point is reached, construct the object and emit it to the pipeline so it can be used.

Well, there are better ways and in this example, I'll combine these things to make is much more straight-forward and generic -

  • Use regular expressions (regex) for matching the information you want
  • Show how to construct a regex in a readable way spanning multiple lines and containing comments
  • Using a dynamic approach, where the named captures in the regex are automatically converted into properties on the output object. This means that you only have to specify the name one, the loop processing the matches is totally generic and can be reused.

The examples uses output from repadmin /showrepl, but this is just an example I picked up more or less randomly. The idea here is to show the use of regex and converting the result to objects, the idea is not to create a bullet-proof parser of the output from repadmin /showrepl.

Here's the example -

# Define some text, in this case the text is stored in $text, but
# is could come from anywhere

$text=@'
DC Options: IS_GC
Site Options: (none)
DC object GUID: aff429b7-5694-4bda-ae4a-daa7d371ce0f
DC invocationID: b578e349-5846-46c5-8e01-b4a81d609e27
==== INBOUND NEIGHBORS ======================================
DC=company,DC=org
BLL\045ADDC001 via RPC
DC object GUID: 26446473-3433-4c73-942d-c750f0e476ec
Last attempt @ 2007-08-21 13:38:53 was successful.
CN=Configuration,DC=company,DC=org
BLL\045ADDC001 via RPC
DC object GUID: 26446473-3433-4c73-942d-c750f0e476ec
Last attempt @ 2007-08-21 13:38:53 was successful.
CN=Schema,CN=Configuration,DC=company,DC=org
BLL\045ADDC001 via RPC
DC object GUID: 26446473-3433-4c73-942d-c750f0e476ec
Last attempt @ 2007-08-21 13:38:54 was successful.
DC=DomainDnsZones,DC=company,DC=org
BLL\045ADDC001 via RPC
DC object GUID: 26446473-3433-4c73-942d-c750f0e476ec
Last attempt @ 2007-08-21 13:38:54 was successful.
DC=ForestDnsZones,DC=company,DC=org
BLL\045ADDC001 via RPC
DC object GUID: 26446473-3433-4c73-942d-c750f0e476ec
Last attempt @ 2007-08-21 13:38:54 was successful.
'
@

$regex=[regex] "(?msx)
# Option m = multi-line e.g. ^=start of line and $=end of line
# Option s = single-line e.g. . includes end-of-line
# Option x = spaces and comments are allowed in the pattern making this
# line possible

# Start of line (^), match partition, eat until end of line ($)
^ (?<partition> (CN|DC)=[^`$]+? )`$

# any chars - ? means lazy i.e. match as few characters as possible
.+?

# match site before \ using a series of wordchar
(?<Site> \w+) \\

# match domain controller afterwards
(?<DC> \w+)

# any chars
.+?

# match the date last attempted, note the spaces are escaped as option x is used
Last\ attempt\D+ (?<date> [\d\-]+\ [\d\:\.apm]+ )
"


# Search for pattern matches in $text
$regex.matches($text) | Foreach-Object {
# Save current pipeline object, so it is available from inside the next foreach-object
$match=$_
# Construct a new, empty object. Always return objects as output whenever possible. It
# makes using the output must easier
$obj=new-object object
# Get all the group names defined in the pattern - ignore the numeric, auto ones
$regex.GetGroupNames() | Where-Object {$_ -notmatch '^\d+$'} | Foreach-Object {
# And add each match as a property. When multiple results are returned, the
# value must be picked up using an index number hence the GroupNumberFromName call
add-member -inputobject $obj NoteProperty $_ $match.groups[$regex.GroupNumberFromName($_)].value
}
# emit the object to the pipeline
$obj

}



This is the output -




partition                     Site                          DC                            date
--------- ---- -- ----
DC=company,DC=org... BLL 045ADDC001 2007-08-21 13:38:53
CN=Configuration,DC=compan... BLL 045ADDC001 2007-08-21 13:38:53
CN=Schema,CN=Configuration... BLL 045ADDC001 2007-08-21 13:38:54
DC=DomainDnsZones,DC=compa... BLL 045ADDC001 2007-08-21 13:38:54
DC=ForestDnsZones,DC=compa... BLL 045ADDC001 2007-08-21 13:38:54



A final note: If you input is an array of strings, you have to convert it into a single text string before calling $regex.matches. This can easily be done, by joining the elements using newline as a delimiter -




[string]::join("`n",$array)

Friday, November 21, 2008

Update Rollup 5 for Exchange Server 2007 SP1 released

The latest update for Exchange Server 2007 SP1 was released by Microsoft yesterday.

As usual, a number of issues are fixed – a couple of highlights:

955989 (http://support.microsoft.com/kb/955989/ ) The SPN registration of a cluster fails, and Error event IDs 1119 and 1034 are logged in an Exchange Server 2007 Service Pack 1 environment

954197 (http://support.microsoft.com/kb/954197/ ) Exchange 2007 CAS cannot copy the OAB from the OAB share on Windows Server 2008-based Exchange 2007 CCR clusters

Download link: http://www.microsoft.com/downloads/details.aspx?familyid=652ed33a-11a1-459c-8ffe-90b9cbfe7903&displaylang=en&tm

Fix list: http://support.microsoft.com/?kbid=953467

Happy patching :-)

Tuesday, November 11, 2008

Office Communicator Mobile update

Just a quick note to point your attention to the latest release of Office Communicator Mobile (2007 Release).

A couple of fixes in the new release, most notably KB954769, which now enables login to Communicator Mobile when running in High Security mode - the update makes Communicator Mobile use NTLM for both medium security and high security mode.

Update description and list of fixes: http://support.microsoft.com/?kbid=954767

Update download link: http://www.microsoft.com/downloads/details.aspx?familyid=2eea3e24-f216-4887-92b0-f37d942e26e0&displaylang=en&tm

Thursday, November 06, 2008

ILM "2"

MIIS is a great engine for synchronization but the lack of a decent interface - for the administrator as well as for the end user - have made it necessary to either create a lot of code yourself or invest in other systems like Omada.
With ILM "2" (what a nice name...) the game has changed. While not as complete as Omada, ILM "2" seems to have a bunch of very useful features. I just attended an instructor led lab session here in Barcelona and the way and how easy you can do workflows and dynamic groups, makes a pure ILM "2" implementation possible - at least as a starting point or for simpler things. I haven't digged into ILM "2" too deep (yet), but what I have seen, seems ok.

Pull down an VHD with the RC-code from http://technet.microsoft.com/en-us/evalcenter/cc872861.aspx

Wednesday, November 05, 2008

Server 2008 R2 Active Directory and PowerShell

Filling my head at Tech-Ed, luckily, others are more efficient bloggers than I am.

Read this excellent summary by Dmitry of the "Windows Server 2008 R2 Active Directory: What’s Coming Up"” session at IT Forum (TechEd EMEA IT Pro) by Robert DeLuca and Alain Lissoir

Tuesday, November 04, 2008

A Day at Tech-Ed the PowerShell Way

Start-Service $body

Set-Location $bathroom
Clear-Item $body

Set-Location $restaurant
Get-Item $breakfast | Format-table | Add-Content $body

Set-Location $bathRoom
$body.oldFood | Out-Null
Clear-ItemProperty $body teeth

Set-Location $desk
$today=(Get-Date).Date
$potentialSessions=Get-ChildItem $sessions | `
Where {$_.description -gt $interest -and $_.date -eq $today} | foreach {
$_ | Add-Member Noteproperty Priority (read-host "Priority") -Passthru
} | where {$_.priority}
$plannedSessions=$potentialSessions | group timeslot | foreach {
$_.group | sort priority | select -first 1
}

Set-Location $conferenceCenter
$informationOverload=$false
$plannedSessions | foreach {
if ($informationOverload) {
Start-Sleep -Minutes 90
$informationOverload=$false
}
else {
Invoke-Item $_ | where {$_.content -notlike "sales pitch"} | `
Add-Content -path $body.brain
}
[void] (Start-Sleep -Minutes 30) -and (Add-Content $body $coffee)
if ($body.brain.overloaded) {$informationOverload=$true}
}

Set-Location ($anywhere | where {$_.beerCount -gt 5 -and $_.price -eq $null} | select -first 1)
while ($body.thirsty -and $body.alcoholPercentage -lt 1.5) {
Add-Content $body $beer
}

Set-Location $hotelRoom
Start-Sleep -minutes (60*7)

# See you tomorrow ;)


OCS 2007 R2 Planning Tools – Update #2

You may have tried the OCS 2007 Planning Tool, that was Microsoft’s first try at creating a planning tool for OCS. When I blogged about the R1 version of the tool I emphasized that it was a good start, but there was room for improvement. At least one of my suggestions has been incorporated into the product (Not taking the credit for that though), namely removing the requirement for high availability at the small sites.

New features in the R2 Planning Tool are (from my memory of what was in the R1 tool) -

  • Unified Messaging
  • Monitoring Server (The replacement for QoE Monitoring, that includes CDR)
  • The new Unified Communications Applications (New roles)
    • Response Group Service
    • Conference Auto-attendendant
    • Conference Announcement Service
    • Outside Voice Control
  • Group Chat Server (New)
  • Device Update Solution (The new Update Server, that is automagically installed with OCS and includes updates of Office Communicator 2007 clients)

Then the design of how to handle sites is greatly enhanced, it will for each site you deploy ask you a series of questions about what you want to deploy at each site e.g.

  • Online Collaboration
    • Conferencing features
    • CWA
    • Group Chat
  • Users
    • Internal and/or federated (Basically do you want to deploy Edge)
  • Voice
    • Enterprise Voice (E.g. do you want local Mediation Servers)

Lastly you will be asked if you want to use Edge Servers at a specific site or Edge Servers for each site.

So a lot of new features including even better links and explanations for scalability, planning steps and assumptions for users – a very good step forward (although we still need to be able to export the topology drawings to Visio files ;-) and it doesn’t end up with 225 servers for a simple OCS deployment, due to the more detailed questions related to sites. UPDATE #2 – at TechEd we were told that export to Visio will be part of the product.

I haven’t included screenshots in this post as I’m not sure if they are still covered under NDA, but basically the tool looks very similar to the old version.

The Edge Planning Tool will be enhanced for R2 as well, but this wasn’t demonstrated and I haven’t seen it either. Take a look at the current version at Tom Laciano’s blog or Jeff Schertz detailed post on the current Edge Planning Tool.

Monday, October 27, 2008

CU @ TechEd EMEA ?

I will be in Barcelona next week and look forward to seeing some of you there! There is a lot of content on OCS 2007 R2 and I plan to attend most of these sessions to get some inspiration for our own R2 training offering.

If you want to catch-up then feel free to send me ‘sip’ call/IM or e-mail me at myinitials@inceptio.dk otherwise I will be in the Ask-The-Expert (or the MVP foolish enough to volunteer ;-) area for Unified Communications Monday from 19-21 and Tuesday from 13-17.

Wednesday, October 22, 2008

My favorite free Office Communicator tool – quick dialer from ESTOS

My favorite tool for Office Communicator is the ESTOS PhoneTools for Office Communicator and it works so well that I thought I would return the favor by doing some free advertising for ESTOS ;-)

The tool provides the ability to highlight a phone number in any program / web page like this one from our webpage at Inceptio -

image 

After which you can press a hotkey (F8 is default) to dial the number. The configuration is very simple, you install it and then configure the following options -

image image

Notice that the phone number you highlight doesn’t have to be normalized, it will use your normalization rules to convert the number to E.164 format.

The product works perfectly fine with Office Communicator 2007 and R2, I personally haven’t had any issues with.

Go check it out at the ESTOS PhoneTools website.

Office Communications Server 2007 R2 resources #2

As you may know OCS 2007 R2 was publicly announced at VoiceCon. This also lifted the NDA so bloggers, Microsoft, the press etc. are now allowed to talk about OCS 2007 R2 in details.

I was in Redmond a few weeks ago to attend the R2 Metro training (Train The Trainer training on OCS 2007 R2 development) and we are also running OCS 2007 R2 internally as part of our preparation for delivering UC Boot Camps and events on R2 and I will create a series of posts on OCS 2007 R2 in the next weeks.

For now I have created a small collection of links to places, where you  can find more info on R2 -

Videos from VoiceCon 2008 (see all here)  -

  • Keynote by Eric Swift (From Microsoft if in doubt)
  • Keynote by Johan Krebbers, Group IT Architect, Royal Dutch Shell
  • Microsoft Booth visit

2 videos in a series of 6 is now posted on Edge.technet.com on OCS 2007 R2

  1. What’s new on conferencing … 
  2. OCS and the new Attendant

And according to the Office Communications Server 2007 team blog the following videos will be posted in the next couple of weeks -

  1. What’s New in Office Communicator, Communicator Web Access, and Devices with Office Communications Server 2007 R2
  2. Group Chat and Office Communications Server 2007 R2”
  3. What’s New in Mobility and Anywhere Access with Office Communications Server 2007 R2
  4. What’s New in Administration and Management with Office Communications Server 2007 R2

Speech Server 2007 vs UCMA v2.0 WF activites

New Server Roles and Client Features in OCS R2 by Jeff Schertz

OCS R2 Edge Bombshell by Jeff Schertz

Microsoft OCS 2007 R2 Heralds the Death of the IP-PBX from the VoIP & Gadgets blog

Jamie Starks blog from VoiceCon

The official Press release - Microsoft Unveils Microsoft Office Communications Server 2007 Release 2

Tuesday, October 07, 2008

Forefront Threat Management Gateway Beta

I've been playing around with the beta of Microsoft Forefront Threat Management Gateway (TMG for short) since its release in late spring.

Last week, I was looking to do some testing, and logged on to the TMG box. I noticed that the 'Update Services License' had expired. (When the TMG Beta is installed, a 90-day license for Malware Inspection is installed)

Well, lab environment or not, such details have to be taken care of, so I rummaged around a bit in the interface. Turns out that addressing this is really simple:

Right-click the 'Malware Inspection' service entry, click "License Details", and change the expiration date to your liking. Your TMG Beta should now be able to download updated malware definitions again.

Rollup 4 for Exchange Server 2007 SP1 available

Update Rollup 4 for Exchange Server 2007 SP1 is now available here:

http://www.microsoft.com/downloads/details.aspx?FamilyID=8b492ed2-ea92-412f-a852-3aa1c58d9499&DisplayLang=en

Note that it's not being offered through Microsoft Update at the time of writing this, so a manual download is in order.

Lots of fixes, including KB950138 (Outlook Anywhere issues when running Exchange 2007 SP1 on Windows Server 2008).

For the complete list of fixes go here: http://support.microsoft.com/?kbid=952580

Monday, September 29, 2008

Restarting Windows XP from a startup script is not easy

Yes, they are still out there running the big businesses!

Today, I was messing with a startup script, that should restart the PC - but WMI did not do it and shutdown.exe just returned device is not ready. This should have been fixed in SP2 - at least some KBs claims that - but that is clearly not the case.

Eventually, I found a way around: Create an AT-job to do the restart. That worked. But it was too slow as AT-jobs needs to be postponed at least a minute.

Finally, good old Sysinternals came to the rescue - this time in the shape of psexec. Sysinternals have saved the day many times and back in the late nineties you could simply not lock down and figure out where to relax security on an NT 4 without regmon and filemon. Anyway, back to today. This was how I solved my present problem -

psexec -accepteula -sd shutdown -r -t 5



 



-sd tells it to start the process in system context (the s) and detached (d) as I did not want to wait for the command - I wanted my script to finish as long as it had time to do so.

Presence the WPF way

Last time I described how to embed the presence controls onto a WPF form via the WindowsFormsHost control. Since some great things has happened. George Durzi at Clarity Consulting has released the presence controls for WPF. Its now more simple to implement presence in WPF. A persona list can be implemented like this.

<Window x:Class="NewUCControls.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:presence="clr-namespace:Microsoft.Samples.Office.UnifiedCommunications.PresenceControls;assembly=WPFMOCPresenceControls"

Title="Window1" Height="300" Width="300">
<Grid>
<presence:PersonaList Name="personaList1" Loaded="personaList1_Loaded" ShowDisplayName="True" ShowToolTip="True" ShowDetailedToolTipText="True" ShowContextMenu="True" ShowAvailability="True" />
</Grid>
</Window>

Loading personaslist is also easily done by:

List<string> sipURIs = new List<string>()
{
"someone1@somewhere.org",
"someone2@somewhere.org",
"someone3@somewhere.org",
};

personaList1.SipUris = sipURIs;

and the result will look something like this

image

Direct SIP with IP-PBX in OCS 2007

The OCS team has now posted more information on Direct SIP integration with third-party PBX’s and the RFC 3966 “changes” made to accomplish this that I started to discuss in my post Cisco is now a qualified IP PBX for Direct SIP with OCS 2007. Here’s a snippet -

With the hotfixes released in August 2008, Microsoft is significantly improving the capability for Office Communications Server 2007 to exchange calls with SIP-based IP-PBX, in particular from Cisco. As a consequence, Microsoft now supports OCS deployments in Direct SIP with IP-PBX between Office Communications Server and specific versions of Cisco Call Manager.

This change gives administrators the possibility to set up Office Communications Server so that it can directly interoperate with IP-PBX using E.164 globally routable telephone numbers without RFC3966’s mandated “+” prefix. Additionally, Office Communications Server will now be able to interoperate with IP-PBX within a private dialing plan, exchanging locally routable private numbers.

The post continues to discuss these changes in details and is certainly a recommended read. Find it here.

Saturday, September 27, 2008

Backing up remote eventlogs using WMIC

This week, I was out on an oil rig in the North Sea helping out in some fail-over testing. After the test, I had to collect eventlogs from all the computers involved and as I'm an scripting guy, I definitely did not want to do that manually. Now, this is a Windows Server 2003 and Windows XP environment. Furthermore, it is a highly restricted environment so I could not install PowerShell or plug in and use my own PC; I had to look elsewhere. First, I looked at Sysinternals's psloglist, but that could not do the job. It could either dump the eventlogs as text - I wanted binary - or it could dump as binary and empty the logs at the same time. I only wanted a backup. Next, I googled and live searched, but did not really find anything useful, when my old fried WMIC resurfaced in my mind. Wasn't there some method call in WMI, that could do the job?

Using my own PC, I could easily find the method. It was just a matter of writing gwmi win32_nt, pressing tab (as I naturally use PowerTab), selecting win32_NTEventlogFile and piping it into Get-Member -

gwmi win32_nteventlogfile | gm



And the method BackupEventlog showed up. I started wbemtest on a Windows XP PC and checked that the method also existed on Windows XP. After this, I started to figure out the WMIC command line - which quite often is hard to get right. I ended up with -



 




wmic /node:"server" nteventlog where "logfilename='system'" call backupeventlog "c:\system.evt"



Note, that the backup file specification is local to the remote node. I tried saving it back on the local PC with \\currentpc, but got access denied and I did not want to create a share for this. Also note that the WMIC alias for Win32_NTEventlogfile is NTEVENTLOG



Finally, I ended up with this backup.bat file. All.txt contains a list of the computers, I needed to get the logs from. Note that I delete the evt-files first as backupeventlog will not overwrite an existing file (if I needed to re-run the script)




set targetdir=%temp%\logs
for /f %%I in (all.txt) do del \\%%I\c$\*.evt
for /f %%I in (all.txt) do wmic /NODE:"%%I" nteventlog where "logfilename='system'" call backupeventlog "c:\system.evt"
for /f %%I in (all.txt) do wmic /NODE:"%%I" nteventlog where "logfilename='security'" call backupeventlog "c:\security.evt"
for /f %%I in (all.txt) do wmic /NODE:"%%I" nteventlog where "logfilename='application'" call backupeventlog "c:\application.evt"
for /f %%I in (all.txt) do robocopy \\%%I\c$ %targetdir%\%%I *.evt /z /njs /njh
for /f %%I in (all.txt) do del \\%%I\c$\*.evt

Saturday, September 06, 2008

Cisco is now a qualified IP PBX for Direct SIP with OCS 2007

The following versions of Cisco Unified Communications Manager has been qualified for Direct SIP integration with Microsoft Office Communications Server 2007 (It has been working with some restrictions for quite a while, but is now a tested and “qualified” solution)-

4.2[3]sr3a, 5.1.3.3000-5 & 5.1.3.1000-12 and not least 6.1.1.3000-2

Note that interoperability requires the August 2008 Update Package for OCS 2007 as described in KB952780 and also KB952783 although the latter it is not listed on the UC OIP page. KB957280 is for the Mediation Server role and KB952783 are for all the other roles (Automatically delivered through Microsoft Update). Also the Office Communicator 2007 client update KB954439 is required according to KB957285 (This upgrade currently has to be requested directly through PSS).

The fixes (that we have been waiting for quite a while) allows you to select to break some of OCS 2007 RFC 3966 compliant use of E.164 numbers for interoperability with “certain” PBXs (Read Cisco but it may also apply to other vendors) that do not correctly use or understand the + sign in a E.164 number.

Following are the changes as explained in KB92785 “Outgoing calls from Communications Server 2007 Mediation Server may not be routed correctly” -

By default, Microsoft Office Communications Server 2007 Mediation Server uses a plus sign (+) to prefix E.164 numbers in the Request Uniform Resource Identifier (URI) for outgoing calls. However, certain private branch exchanges (PBXs) do not accept numbers that are prefixed by using a plus sign (+). Therefore, an outgoing call may not be routed correctly. Additionally, the "From" headers for incoming calls from certain PBXs do not comply with Requests for Comments (RFC) 3966, "The tel URI for Telephone Numbers." In this case, Office Communicator does not resolve the number to the correct user.

To make sure that Mediation Server operates correctly together with PBXs, update 952780 adds a new Mediation Server configuration file setting for Communications Server 2007. This configuration file is called RemovePlusFromRequestURI, and it contains one of two settings, YES or NO. If your PBX does not accept numbers that are prefixed by using a plus sign (+), the setting in the configuration file should be YES. The YES setting causes Mediation Server to remove the plus sign (+) from a Request URI for outgoing calls. It also removes the plus sign (+) from the "To" header and the "From" header. If the configuration file setting is set to NO, Mediation Server will not change the Request URI, the "To" header, or the "From" header.

Note that you will have to manually force the Mediation Server to strip of the + sign using the intelligently named configuration file “RemovePlusFromRequestURI”.


Update 952783 introduces functionality for Communications Server 2007 to remove the plus sign (+) from the "From" header when it is not E.164-compliant. If this action does not create an E.164-compliant number, Communications Server 2007 introduces a "P-Asserted-ID" header that has a phone-context value of "enterprise." This header enables the user lookup functionality in Communicator 2007. Additionally, Communications Server 2007 bypasses the server normalization logic if the header contains a phone-context value of "enterprise."

It’s good to see the list of Qualified PBXs expanding; now we can only hope that the Dual Forking scenarios will follow troop with Cisco and all the other vendors who has promised to deliver Interop (E.g. Alcatel, Avaya, Ericsson, Mitel, NEC and Siemens).

OCS Patches for Nortel CS1000 rel 5.5 with MCM 3.5 integration

I recently updated our lab environment and it is now running Windows Server 2008 and Hyper-V. During that process we finally updated our test CS100o to rel 5.5 and that required some updates that are different from the ones listed on the MS UC OIP site (Which are also outdated both 943083 and 943085 has been superseeded) and the ones listed in the Nortel documentation for rel. 5.5 .

In the following I have listed the "Required" patches according to Nortel's documentation and the "Actual" based on the current version of the hotfixes

OCS 2007 Front End
Required - Standard Edition RTM version 6362.0 plus hotfix KB 942872
Actual – Standard Edition RTM version 6362 plus hotfix 945055 (Includes Apiem.dll and Sipstack.dll in version 3.0.6362.17, which 942872 introduces)

Office Communication Server 2007, Mediation Server
Required - December 17, 2007, Version 3.0.6362.36 plus hotfix KB943086 and KB944285
Actual - December 17, 2007, Version 3.0.6362.36 plus hotfix KB943086 and KB944285

OCS Application Proxy Server
Required - OCS 2007 – Standard Edition RTM version 6362.0 plus hotfix KB 942872
Actual – Standard Edition RTM version 6362 plus hotfix 945055 (Includes Apiem.dll and Sipstack.dll in version 3.0.6362.17, which 942872 introduces)

Office Communicator 2007 Client
Required - December 17, 2007, Version 2.0.6362.36 plus hotfix KB 943083
Actual - December 17, 2007, Version 2.0.6362.64 including hotfix KB 951662 that supersedes 943083 (And replaces all files in 6362.65 version)

Monday, September 01, 2008

OCS 2007 R2 will be 64 bit

So it is official now. Office Communications Server 2007 R2 (Wave 13) will support 64 bit OS as the only Operating System (So no 32 bit support).

Within the MVP community there has been a lot of discussion about the good/bad in this design decision, but personally I think that most of our customers are 64-bit ready due to Exchange 2007 and in general won't see this a big issue. Yes, it will mean that we will have to migrate our servers, but as a consultant I would (almost) never suggest using in-place upgrades anyway.

What is your opinion about this ?

Read more here Next release of OCS to support 64 Bit OS (x64).

Sunday, August 24, 2008

Communicator Presence Controls in WPF

Last night I was preparing some ideas for a demo application I need later this week. The demo app had to look good and should be fun and interesting in the making. So I decided to code the UI in Windows Presentation Foundation (WPF). Code in XAML for WPF is simple and one will soon get the hang of it. So I went using some ListViews filled with data via LINQ to SQL and a data class. When I came to implementing Office Communicator 2007 functionality I realized that the “Microsoft Office Communicator 2007 Presence Controls” did only exists as Windows Forms User Controls and not as WPF user controls. Facing the choice of coding my own controls or try to make use of the existing Win Form controls I browsed around and found a XAML tag which enables you to host a windows forms control on a WPF page and the great part about it is really easy to use:

  1. Download the above mentioned controls from Microsoft and install them.
  2. Include the managed controls into you WPF project solution.
  3. Add the WindowsFromHost tag to the WPF XAML page.
  4. Add the necessary XML name spaces. Look for xmlns:q1 and xmlns:q2 in the example below
  5. Add the xml tag for persona list control - "q1:Personalist"
<Window x:Class="WPFHostingPresenceControls.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:q1="clr-namespace:Microsoft.Samples.Office.UnifiedCommunications.PresenceControls;assembly=PresenceControls"
xmlns:q2="clr-namespace:Microsoft.Samples.Office.UnifiedCommunications.PresenceBase;assembly=PresenceControls"
Title="Window1" Height="300" Width="300">
<Grid>
<WindowsFormsHost Name="windowsFormsHost1">
<q1:PersonaList x:Name="plMyPersonaList"/>
</WindowsFormsHost>
</Grid>
</Window>




Here after you can populate the list via code:




public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
plMyPersonaList.AddRange("pli@inceptio.dk", "someone@inceptio.dk");
}
}




and when you compile you should have something like this.



WPFHostingPrecenseControls

Friday, August 22, 2008

Exchange and Virtualization

So, can I run Exchange on a virtualization product? Yes, probably, but is it supported? You can read that in  Microsoft Support Policies and Recommendations for Exchange Servers in Hardware Virtualization Environments. The support is rather limited or should I say restricted -

  • Only validated hypervisors - that makes sense
  • Only Exchange 2007 SP1 on Windows Server 2008 - why not WS03?
  • No UM role
  • "No other server-based applications, other than management software (for example, antivirus software, backup software, virtual machine management software, etc.) can be deployed on the physical root machine. The root machine should be dedicated to running guest virtual machines."  - this is a tough requirement to meet, don't you think?
  • No dynamically expanded disks - why not (besides the performance hit)?
  • No clustering if the virtualization has comparable failover - makes sense, could be rather complicated. The recommendation is to do the high-availability using Exchange technologies.
  • No snapshots - wasn't this one of the big benefits of virtualization
  • A small restriction on the virtual CPUs - no big deal IMHO

In any case, read it for yourself and go back to the MS article whenever your want to read it again, so you pick up the latest changes.

Friday, August 15, 2008

PowerShell Support in SQL 2008

Was browsing the new features of SQL 2008. There are quite a lot and some interesting ones as well. One is the support of PowerShell. There are both a PS provider ("The provider lets you navigate the hierarchy of SQL Server objects using a path similar to a file system path. Each object is associated with a class from the SQL Server Management object models. You can use the methods and properties of the class to perform work on the objects. For example, if you cd to a databases object in a path, you can use the methods and properties of the Microsoft.SqlServer.Managment.SMO.Database class to manage the database.") and the ability to execute PowerShell commands from within the management application ("The SQL Server 2008 version of SQL Server Management Studio supports starting PowerShell sessions from the Object Explorer tree. The SQL Server 2008 version of SQL Server Agent supports PowerShell job steps"). Read it all here.

Thursday, July 17, 2008

Determining your Hyper-V version

<rant>

Figuring out versions is often way too hard. Why can't I simply see the version in Add or Remove Programs or in the feature overview? Why do I have to mess around with build numbers? Isn't this 2008!

</rant>

The other day, I had to figure out which Hyper-V and SCVMM version a server was running. Luckily, I found this and this article.

I PowerShelled the Hyper-V part, so you can use it easily in your scripts (and if you execute the WMIC command from PowerShell, it will not work owing to parsing differences between cmd and PowerShell). Here is my Get-HyperVVersion.ps1, but you can also execute it directly -

$file=get-command c:\windows\system32\vmms.exe
switch ($file.fileversioninfo.productversion.split(".")[-1]) {
17101 { "Beta" }
18004 { "RC0" }
18010 { "RC1" }
18016 { "RTM" }
}


Note how Get-Command can 'reveal' the versioninfo of a executable/DLL.

Tuesday, July 08, 2008

Get-PublicIp4Address.ps1

Using dyndns' checkip page and two lines of PowerShell, you can get your public IP address easily -

$wc=New-Object net.webclient
$wc.downloadstring("http://checkip.dyndns.com") -replace "[^\d\.]"



Note the use of -replace with a single argument. This removes the pattern and works like -replace "string","". I also really like that you can call a method and work directly on the output.



You could turn this into a one-liner -




(New-Object net.webclient).downloadstring("http://checkip.dyndns.com") -replace "[^\d\.]"



but I think the two-line version is much easier to read, so I'll stick to that.



PS. Regex interpreration: Remove everything not (^) a digit (\d) or a dot (\.). The webpage returns a string like "Current IP Address: 10.1.2.3" and I wanted to get rid of the extra stuff.

Monday, July 07, 2008

Microsoft Office Open Protocol Specifications

So Microsoft is releasing a lot of information on the way that it uses and support the different protocols in Office, which includes Office Communications Server 2007.

Why is this interesting for you/us? Well maybe you have a problem with ABS download, Firewall Traversal, Sending DTMF digits or similar issues that you have problems solving or maybe you are developing applications that integrate with the Microsoft UC platform; then these specifications are a excellent guide to the inner workings of OCS. Find information from the homepage here -

Microsoft Office Protocol Documents

The Microsoft Office protocol documentation provides detailed technical specifications for Microsoft proprietary protocols (including extensions to industry-standard or other published protocols) that are implemented and used by Microsoft Office 2007 to interoperate or communicate with other Microsoft products.

The documentation includes a set of companion overview and reference documents that supplement the technical specifications with conceptual background, overviews of inter-protocol relationships and interactions, and technical reference information.

Audience

The Microsoft Office protocol documentation is intended for use in conjunction with publicly available standard specifications and network programming art. It assumes that the reader either is familiar with this material or has immediate access to it.

The technical documentation provides the following levels of audience support:

  • Implementer: Sufficient conceptual and reference information for a successful implementation of one or more protocol specifications for a given task or scenario.

  • Reviewer: A definitive resource for readers who want to evaluate or understand one or more protocols.

The Microsoft Office protocol documentation provides detailed technical specifications for Microsoft proprietary protocols (including extensions to industry-standard or other published protocols) that are implemented and used by Microsoft Office 2007 to interoperate or communicate with other Microsoft products.

The documentation includes a set of companion overview and reference documents that supplement the technical specifications with conceptual background, overviews of inter-protocol relationships and interactions, and technical reference information.

Find the documentation at MSDN

Friday, July 04, 2008

Constructing commands/command line - a PowerShell hint

I was just trying to compose a correct robocopy command in my script - and instead of having robocopy to give me an error, I would like to see the command before attempting to test the command. Naturally, I could built up the command in a string and echo/execute that, but when it can be done easier (we are talking a 5 line script here) it should.

I have something like this

robocopy $from "$(split-path -parent $myinvocation.mycommand.definition)"\subpath /mir



Now, if I want to see what that resolves to, I normally would surround it with quotes, echoing it out. But when you do that, you have to take the existing quotes into account and start duplicating or escaping them. Not so great. And using single quotes is not an option as that will turn off variable substitution. Luckily, PowerShell has the here-double quote operator: @" "@. This multi-line quoting operator does not require quotes in the content to be doubled.



So to see the command, surround it with @" on the line above and place "@ on the line below. Remember that "@ must start in column 1 of the line to end the string.




@"
robocopy $from "
$(split-path -parent $myinvocation.mycommand.definition)"\subpath /mir
"
@



 



You should also remember that PowerShell has the here-single quote operator @' and '@. In this case, variable substitution is not performed.

Wednesday, July 02, 2008

Hyper-V SuperSite Article

Paul Thurrott has written/updated his Windows Server 2008 Hyper-V article. Amongst other things, it seems like Hyper-V performance is very good. Read it for yourself - worth a read!

Friday, June 27, 2008

Hyper-V RTM'ed

yesterday. So now I'll start updating my test system to see if these errors are gone:

  • Keyboard does not always work after a boot. A shutdown/start normally fixes the problem
  • Network is sometimes messed completely up if you switch the network the guest is connected to
  • "Type clipboard text" only works if you guest runs US English keyboard layout. It seems to generate/emulate keyboard stokes so slash are written as dashes (on a Danish keyboard)
  • Virtual Machine Connection crashes

Get the 64-bit update here. Remember to get rid of all save states and snapshots before upgrading! Get the full release notes here.

Tuesday, June 24, 2008

The WOW6432Node effect

Last night I was playing around with "Adding Commands to the Communicator Menus" and before I got it running I ran into an obstacle . Basically I wanted it to add extra menu entries in the Communicator menus.

The way to do this is by adding a following registry entry

HKEY_LOCAL_MACHINE\Software\Microsoft\Communicator\SessionManager\Apps\[GUID of Application]

and some keys

Name (Type:REG_SZ) to specify menu caption
ApplicationType (Type:DWORD), value can be either 0 (if application is executable) or 1 (if application is protocol)
Path (Type:REG_SZ) to specify full path to the executable
SessionType (Type: DWORD), value can be 0 (for local session), 1 (this is default for two party session) or 2 (for multi-party session)
ExtensibleMenu (Type:REG_SZ), value can be MainWindowActions, MainWindowRightClick (this is default value), ConversationWindowActions, ConversationWindowContextual (this is the default value) and ConversationWindowRightClick. Multiple values can be specified separated by semi-colons

So I started up a registry editor and added the above mentioned keys and launched my Office Communicator. But the "Contoso Sales C..." entry was missing. I did spend some time checking up on typos but came no where. So I decided to make use of Process Monitor to look for what kind of registry activities Office Communicator was having. Surprisingly the activities were only in this part of the registry HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Communicator. Just for the fun I moved my registry entry to this location and the entry in the Office Communicator worked like a charm.

The explanation for this I found on Windows IT Pro: "The Wow6432 registry entry indicates that you're running a 64-bit version of Windows. The OS uses this key to present a separate view of HKEY_LOCAL_MACHINE\SOFTWARE for 32-bit applications that run on a 64-bit version of Windows."

If you want to read more about customizing your Office Communicator the following links can useful for you.

Integrating a Third-Party Collaboration Program with Communicator 2007

Adding Commands to the Communicator Menus

How do ISA figure out which authentication to use?

So you have published your Exchange server and your are using forms based authentication (FBA). But when you use Outlook Anywhere or ActiveSync (MSRPC), it bypasses FBA. Why does it do that and how does that work?

Well, thanks to my coworker Claus-Ole Olsen, I got the question answered. ISA uses the User-Agent header/string to decide whether it will actually use FBA or not! You can also select different forms based on the value - for different device capabilities.

The ISA GUI tells you it uses FBA, but you just cannot trust that as the User-Agent header will modify the rule!

Read it all here on TechNet Microsoft Internet Security and Acceleration Server 2006 Managing User-Agent Mappings, including scripts for viewing and setting the values.

If you want to avoid the VBScript, you can use PowerShell. This is Get-IsaUserAgentMapping.ps1 -

 

param([switch]$pretty)
$root=new-object -com fpc.root
$isaArray=$root.GetContainingArray()
$mappings=$isaarray.ruleelements.UserAgentMappings |
select PersistentName,UserAgent,Description,Enabled,@{n="FBAFormsType";e={
# For values, see http://technet.microsoft.com/en-us/library/bb794715.aspx
switch ($_.FBAFormsType) { 0 {"HTML 4.01"} 1 {"cHTML"} 2 {"XHTML-MP"} 3 {"Basic"} }
}},order
if ($pretty.isPresent) {
$mappings | Sort Order | Format-Table -auto UserAgent,Description,Enabled,FBAFormsType,Order
}
else {
$mappings
}

 


Adding and modifying is left as an exercise for yourself ;)

Saturday, June 21, 2008

The first steps of programming Office Communicator

Hi there.

The last three weeks has been very exciting and the future is going to bring even greater things. You will probably ask you self why I would write this and to answer this I will use a few lines to explain.

My name is Peter and for the last few years been working in the telecommunication business. A month ago I was lucky enough to get employed by Inceptio to do consulting and development on the UC platform (E.g. OCS and Exchange).

For some time I have being reading and fooling around with the Office Communicator 2007 API SDK and it has been fun and at times frustrating. The reason for this post is to share ideas and possibilities provided by Microsoft UC platform. So to start from the beginning I thought of bringing a small and simple example and I will then continue to post more advanced samples based upon my own experiences with UC development. Below is my first example that shows how to hookup to some of the events that the Office Communicator 2007 Client exposes. Basically it writes a message in the console every time a new conversation windows starts or closes.

The example down below can be the foundation for an application that helps in retrieving information about the incoming caller. Information like calling history, email conversations, location information, billing information, project information. As one se the possibilities is endless.

In my next blog entry I will start to add functionality to retrieve some of the above mentioned information types.

Until then... 

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace EventFun
{
class EventHookUp
{
CommunicatorAPI.Messenger mCommunicator = null;
static void Main(string[] args)
{
EventHookUp hu = new EventHookUp();
hu.InitializeEventHocks();
Console.ReadKey();
}
public void InitializeEventHocks()
{
mCommunicator = new CommunicatorAPI.Messenger();
mCommunicator.OnIMWindowCreated += new CommunicatorAPI.DMessengerEvents_OnIMWindowCreatedEventHandler(mCommunicator_OnIMWindowCreated);
mCommunicator.OnIMWindowDestroyed += new CommunicatorAPI.DMessengerEvents_OnIMWindowDestroyedEventHandler(mCommunicator_OnIMWindowDestroyed);
}
void mCommunicator_OnIMWindowCreated(object pIMWindow)
{
CommunicatorAPI.IMessengerConversationWndAdvanced stpIMWindow = pIMWindow as CommunicatorAPI.IMessengerConversationWndAdvanced;
long Hwnd = (long)stpIMWindow.HWND;
Console.WriteLine("New IM Window Created : {0}", Hwnd);

//Listing Frindly name of the caller.
CommunicatorAPI.IMessengerContacts contactList = (CommunicatorAPI.IMessengerContacts)stpIMWindow.Contacts;
StringBuilder sb = new StringBuilder();
foreach (CommunicatorAPI.IMessengerContact imc in contactList)
{
sb.Append(imc.FriendlyName);
sb.Append(Environment.NewLine);
}
Console.WriteLine(sb.ToString());
}
void mCommunicator_OnIMWindowDestroyed(object pIMWindow)
{
Console.WriteLine("IM Window Destroyed.");
}
}
}



If you want to read more about the API’s then take a look at these posts/blogs



Chris Mayo -> http://blogs.msdn.com/cmayo/



Michael Dunn -> http://blogs.msdn.com/midunn/



George Durzi -> http://blogs.claritycon.com/blogs/george_durzi/default.aspx

Wednesday, June 11, 2008

Live Meeting update and GPO administrative template

Just a quick update - Microsoft has released a GPO Administrative template for Live Meeting that removes the dreaded "Test connection" dialog that end-users somehow do not fully appreciate ;-)

Find the description in KB article 948741 here and the accompanying updates for Live Meeting and the Outlook add-in that updates the clients to version 8.0.6362.70.

Original source LCSKid

Creating More Efficient Microsoft Active Directory-Enabled Applications

I just found this MSDN article about optimizing your queries. Besides good advice on how to create optimal queries, you can also instruct Active Directory to log expensive queries and even control the threshold value of when a query is expensive!

Furthermore, the ANR search is explained e.g. how you can search for 'Sam' when you do not know whether it is a name, a SAM account name etc. Just like the GUI search in Users and Computers.

 

And while you are at it, I can also recommend reading How Active Directory Searches Work.

Windows Home Server Evaluation Kit

Before getting a real kit, I would like to test it first. But so far I have not been able to find it for download anywhere. The officiel free trial page only allows you to order the kit on a DVD - not download.

Today, I found the evaluation download on connect and even better an evaluation version of Windows Home Server Power Pack 1. Power Pack seems to be Home Server'ish for  Service Pack and some new features. You can get a prerelease version of the release notes from connect.

As soon as the download finishes, I will load it up in Hyper-V :)

Thursday, June 05, 2008

winmgmt as a command line tool

The other day, I could not install AVG8 on someone's PC. Everything worked fine, but it could not register with Security Center. It turned out to be a WMI problem. I solved the problem with winmgmt and the /verifyrepository and /salvagerepository switches.

Read all the documentation about the command line switches  here at MSDN.

Thursday, May 22, 2008

Invoke-Vbscript - now supporting Vista x64

As mentioned in Is this PowerShell Session a 32-bit or a 64-bit?, Invoke-Vbscript was the reason I ventured out into that.

 

Here is the updated Invoke-Vbscript. It checks the architecture using Get-Architecture from Is this PowerShell Session a 32-bit or a 64-bit?. If it is 64-bit, it invokes the 32-bit powershell to run the script using a method described in Invoking PowerShell with complex expressions using Scriptblocks.

The script -

param($vbCode,[switch]$ExecuteStatement)

if ($args) {throw "Unknown arguments: $args"}

function PrepareVB {
$vb=new-object -com MSScriptControl.ScriptControl
$vb.language="VBScript"
$vb
}

if ((Get-Architecture -CurrentProcess) -eq 64) {
# Get path for this script
$me=$myinvocation.mycommand.path
# Build command as string to substitute values
$sb = " &'$me' -vbcode $vbcode -ExecuteStatement:`$$ExecuteStatement"
# Encode for safe command line passing
$encoded=[System.Convert]::ToBase64String([System.Text.Encoding]::UNICODE.GetBytes($sb))
# Invoke powershell 32-bit
&"$env:windir\syswow64\windowspowershell\v$($host.version.major).$($host.version.minor)\powershell.exe" -noprofile -EncodedCommand $encoded
return
}

$vb=PrepareVB
if ($ExecuteStatement.isPresent) {
$vb.ExecuteStatement($vbcode)
}
else {
$vb.Eval($vbcode)
}

Is this PowerShell Session a 32-bit or a 64-bit?

How can one identify whether the current PowerShell process is running the 32-bit version (x86) or the 64-bit version of PowerShell? Well first, why would you care? You are right, normally I do not care, but if I need to execute VBscript with Invoke-Script, I need to know as that only works on 32-bit Windows.

I'm now running Vista x64 - and that is actually a pleasure. For the first time, I feel my PC is responsive enough when running many applications. If you are interested, my PC is a Dell D830 with 4 GB RAM and a Intel Turbo Channel module having 1 GB. OK specs and nice performance.

One of the minor problems I have encountered is that MSScriptControl.ScriptControl used by Invoke-Script cannot be started from 64-bit PowerShell. I simply does not exist :(

So I set off hunting a way of finding out how to differentiate, so I could do something clever.

First, I looked at the $host variable, but that seemed to return the same info. Next, I looked at the current process. The only difference I found was the image path, there does not seem to be any flag indicating the execution mode. Strange, I would have expected that.

Before jumping on a image path test, I looked as wmi32_process as well. This did not really help me, but at least win32_operatingSystem.OSArchitecture help me figuring out the platform.

This all added up in Get-Architecture.ps1 which contains -



param([switch]$CurrentProcess)

if ($CurrentProcess.ispresent) {
$me=[diagnostics.process]::GetCurrentProcess()
if ($me.path -match '\\syswow64\\') {
32
}
else {
64
}
}
else {
$os=Get-WMIObject win32_operatingsystem
if ($os.OSArchitecture -eq "64-bit") {
64
}
else {
32
}
}


Example -



PS> powershell -noprofile {get-architecture -currentprocess}
64
PS> C:\WINDOWS\syswow64\windowspowershell\v1.0\powershell.exe -noprofile {get-architecture -currentprocess}
32
PS> powershell -noprofile {get-architecture}
64
PS> C:\WINDOWS\syswow64\windowspowershell\v1.0\powershell.exe -noprofile {get-architecture}
64
PS> powershell -noprofile {get-architecture -currentprocess}
64
PS> C:\WINDOWS\syswow64\windowspowershell\v1.0\powershell.exe -noprofile {get-architecture -currentprocess}
32


Suggestions for improvements are highly welcome!

Thursday, May 15, 2008

Interesting set of AudioCodes guides

AudioCodes has released a set of guides describing Advanced Topologies for OCS 2007 and Exchange 2007. There are several interesting scenarios including -

  • Cisco Call Manager connectivity to Office Communications Server 2007 and Exchange Server 2007
  • Single gateway for Office Communications Server 2007 and Exchange Server 2007
  • Asterisk IP-PBX connectivity to Office Communications Server 2007 and Exchange Server 2007
  • Enabling fax, modem and auxiliary devices for Office Communications Server 2007
  • PBX reduced trunk solution for Office Communications Server 2007
  • SIP trunking solution for Office Communications Server 2007

The last one about SIP Trunking looks interesting to some of my customers, it describes the following scenario -

“OCA” is a small, but growing retailer of outdoor clothing and apparel company located in New-Jersey, USA. OCA has a deployed Office Communications Server 2007 in its private network for enhanced communication within the company.
OCA decided to offer its employees Enterprise voice and to connect the company to the PSTN using a SIP trunk. OCA's major market is located in Japan and therefore, decided to select two ITSPs – TelIP located in USA and IPConnect located in Japan – for providing a SIP trunking solution. In addition, since OCA's Internet infrastructure frequently experienced interruption and loss of connection, the company decided to implement a telephony backup solution whereby in case of a connection failure with the SIP trunks, the calls are rerouted to the USA PSTN through a traditional T1 connection.

Wednesday, May 07, 2008

Using Consolas Font in your Command Window

Being a fan of using Lucida Console instead of the normal raster fonts, this is good news. You can enabled the Vista/Office 2007 Consolas font and use that. Read it all here in the IE blog.

Tuesday, May 06, 2008

New update for OC 2007 and security enhancement

My colleague Claus-Ole just pointed me to a new update on Office Communicator 2007.

This update fixes four problems and especially interesting is a fix for Terminal Server users and a enhancement to security in the High Security Policy mode, where the ABS, Custom Presence and Tabs URL's now require HTTPS. Following are the fixes -

951870 - Event IDs 8239 and 8206 are logged when you schedule and then cancel a meeting in Communicator 2007

949498 - Error message when a Communicator 2007 user sends a message that contains only Japanese characters to Communicator 2005 users: "<Username> cannot receive message in the format you used"

951871 - The presence status changes to Away for all Terminal Server users when an administrator locks the desktop or lets the screen saver run in Communicator 2007

951868 - Registry settings for certain protocols are overwritten, and Communicator 2007 becomes the default application for these protocols when you log on to Communicator 2007

Find the KB here and the download here.

Tuesday, April 29, 2008

Mac Messenger 7 available

As announced earlier Microsoft has updated the Mac Messenger client to also support Office Communications Server 2007. Following are a few snippets (Source) showing some of the OCS related functionality of the client (It still supports Windows Live)

P2P or multi-party audio/video conferencing -

Messenger Contacts

Searching the Address Book -

Messenger Contacts

Use of Mac OS X Bonjour  to detect location and ability to add personal messages

Messenger Chat

Download from here.

Thursday, April 24, 2008

Hyper-V RC0 WS08 Guest OS and multiprocessor support

When you install WS08 as a Guest OS then the WS08 media includes the earlier version of Hyper-V Integration Services, so network and other hardware devices will not work. If you launch the Integration Services CD it will tell you to go to Windows Update to upgrade the Integration Components (Catch 22 I guess).

The workaround is to 'Insert Integration Services Setup Disk' start Device Manager (devmgmt.msc) find the failing device, select 'Update Driver Software' and 'Browse my computer for driver software' - the path is then e.g. D:\support\amd64.

Second, I noticed the following limitations in multiprocessor support in Hyper-V (In the Release Notes)

For the guest operating system, install one of the following:

  • Windows Server 2008 with Hyper-V, with a maximum of 4 virtual processors. No other release of Windows Server 2008 is supported with this release of Hyper-V.
  • The Windows Server 2003 operating system, with a maximum of 1 virtual processor for 64-bit and 2 virtual processors for 32-bit.

If this is also true for the RTM version (Haven't checked yet) then this product is less useful than expected for 32 bit deployment of WS03 and practically useless for 64 bit deployments of WS03 (Even though Exchange 2007 SP1 supports Windows Server 2008, many companies won't have approval/testing for this product and/or their system management, backup etc. products ready for WS08).

Wednesday, April 16, 2008

High-Definition Video and Roundtable Hardware Requirements

Historically Microsoft published a really good whitepaper on RTAudio and QoE, but information on how the RTVideo Codec works has been sparse. But at a presentation today at Interact 2008 more details were revealed (and we where promised that more details will appear, as video gets more and more attention).

Besides all the interesting stuff about High Definition video in next versions, I just briefly wanted to touch on a few things that applies to the current versions -

P2P Video Calls with VGA quality requires Dual Core (And Quad for HD in wave 13)

So you probably know that you can change from CIF to VGA quality on P2P video calls (Not conferencing) by changing a registry key. They are documented in the release notes for OC 2007 and referenced here -

To enable VGA video in a point-to-point video call, users need to set the following registry keys on both endpoints -

[HKEY_CURRENT_USER\Software\Microsoft\RTC\Quality]
"MaxAllowedSendVideoSize"=dword:00000002
"MaxAllowedReceiveVideoSize"=dword:00000002

And restart Communicator.

But what is new to me is that the hardware requirements are actually Dual Core processors for optimal quality. It is not enforced, so VGA quality will be started with one processor, but may fall back to lower quality due to lack of CPU resoucres. In wave 13 Microsoft is talking about enforcing this requirement, so VGA will not start if you are not running from a Dual Core. In terms of HD (720P) conferencing the current requirement is going to be Quad Core processors and again the requirement will be enforced.

Roundtable quality requires Dual Core

Dual Core Processors are required for Roundtable Panorama Video but again it is not enforced, so Roundtable and Panorama Vidoe quality will be started with one processor, but may fall back to lower quality due to lack of CPU resoucres).

Thursday, April 10, 2008

Microsoft Mac Messenger update / Bloggers lunch at Interact08

Today at Interact 2008 I was invited to a Bloggers Lunch hosted by Eileen Brown. It was really good use of time and we had some interesting discussions with key Microsoft Executives including Kim Akers, UC Marketing General Manager; Eric Swift, UC Marketing Senior Director; David Lemson, Exchange Group General Manager and Amritansh Raghav, Office Communications Group, General Manager.

As part of the lunch we got what all bloggers want - news not previously announced (and that we are allowed to blog about) - so here it is ;-)

Microsoft is going to release a updated version of Mac Messenger that integrates with Office Communications Server 2007 and will include the following features -

  • Rich presence
  • Instant Messaging
  • Audio/video
  • Directory search
  • Dual sign-in with Live Messenger / OCS

So good news for all you Mac users out there. I was actually invited to participate in the beta's for this client - but my company is Mac-free area (all though I'm pretty impressed by the Vista capable MacBook Pro line of notebooks )