Wednesday, December 19, 2007

Microsoft Hotfixes can now be downloaded directly from the KB article!

Got the info from Under the Stairs, but decided to echo it here as it is so useful to know. Not all KBs are ready though. In the end, this is the link you want to have: https://support.microsoft.com/contactus2/emailcontact.aspx?scid=sw;[LN];1414&from=KBHotfix&WS=hotfix

 

And may I add: It was about time...

Monday, December 17, 2007

PowerShell Character Ranges

PowerShell has a range operator. I you want to express the numbers from 1 to 5, you can specify that as 1..5. 1..5 actually build an array (object[]). One question I had during training was: Can the range operator be used on characters? The simple answer is no, but you can achieve the same with a small work around. Say you want to check the drive letters between F and M -

[char]"f"..[char]"m" | Foreach-Object { "Checking " + [char]$_ }

 

if the numbers are not in a sequence, you can use on of these -

"fgmr".toCharArray() | Foreach-Object { "Checking " + [char]$_ }

"fgmr".getEnumerator() | Foreach-Object { "Checking " + [char]$_ }

"f","g","m","r" | Foreach-Object { "Checking " + [char]$_ }

 

BTW: The range operator is limited to 50,000 elements - try 1..60000 and see the error message. If you need to go from 1 to 100,000, you can either do a for statement -

for($i=1;$i -le 100000;$i++) { blah }

or

1..50000+50001..100000 | { blah }

 

 

 

 

Got inspired by Oisin / Nivot Ink.

Posters

In line with the Windows Server 2008 posters, there is also an Exchange Server 2007 Component Architecture poster available on MS Downloads.

Friday, December 14, 2007

OCS/Asterisk integration work in progress

FYI - if you are interested in creating a test environment with Asterisk PBX, then you should take a look at Ryan Newington post on this or better yet subcribe to his RSS feed to get the updates.

Thursday, December 13, 2007

Office 2007 SP1 fixes for Office Communicator/presence

These are from the Office SP1 Whitepaper

  • Microsoft Office Communicator 2007 now presents more accurate presence information and does so with consistent visual cues.
  • The icons used to display presence are modified so that users who are red-green colorblind can determine people’s presence status.
  • Office Communicator 2007 no longer causes presence icons to flicker when multiple people appear simultaneously.
  • Presence information in Office Communicator 2007 and other Microsoft Office applications is consistent in all scenarios (So this applies to SharePoint to).
  • Microsoft Office Outlook® 2007 no longer starts in the background along with Office Communicator 2007.
  • Office Outlook 2007 no longer allows users to send instant messages to entire distribution lists when deployed in conjunction with Microsoft Office Communicator 2007.

Following are the KB articles referenced in the SP1 xls file

  • KB936871 When you sign-in to Communicator, Outlook is started in the background. For example, when you check Task Manager, the Outlook.exe process is running. Additionally, Outlook-related items, such as meeting reminders, may appear.
  • KB936871 To check for a missed conversation, you click the "Voice Mail" search folder in Outlook 2007. Or, you click the "Missed Conversation" notification in Microsoft Office Communicator. If you then check for a missed conversation in the same session of Communicator, you receive a notification that states that Outlook could not be started.
  • KB937212 When a message is saved as a missed conversation in the Microsoft Office Communicator folder in Outlook 2007, the message indicator for the folder does not indicate a new, unread message.

Find SP1 on Microsoft Update or at the download site.

Wednesday, December 12, 2007

Select NULL from Addresses?

Well, sometime I feel like nothing, null, zip, empty - but do they have to remind me???

image

On the other hand: A null may need some eLearning...

Monday, December 10, 2007

Set-NotepadFontSize.ps1

Small, but useful if you like I do change the font size all the time (e.g. for presentations/training/old eyes) -

param($fontSize=14)
Set-ItemProperty HKCU:\software\microsoft\notepad iPointSize ($FontSize*10)
 
If only Notepad supported Ctrl + Scroll Wheel for zooming...

Wednesday, December 05, 2007

Disabling (bypassing) Group Policy

Group Policy settings - including Software Restriction Policies - can easily be disabled - even by a standard user. Terrible! Read the full story in Security UPDATE from WindowsITPro magazine this week. The article sums up the story so far and contain links to other relevant articles.

Some of those articles require an account to read, so if you want to get to the hard facts right away, see the GPCul8r tool. I exteacted this from the readme.txt -

============
How it works
============

In order to do its thing, GPCul8r.dll needs to be loaded into the process space of whatever program needs to bypass group policy.  Once loaded, GPCul8r works by detouring calls to the ZwQueryValueKey function to see if the program is querying one of the keys related to a group policy setting we want to bypass.  If so, GPCul8r returns STATUS_OBJECT_NOT_FOUND, thereby tricking the caller into thinking the key doesn't exist.

GPCul8r being a quick & dirty little tool is not configurable.  The targeted key names are hard-coded in the source.  They are:

- TransparentEnabled (controls software restriction policy settings)
- ProxySettingsPerUser (controls access to the IE proxy settings dialog)
- DisableRegistryTools (duh)
- DisableTaskMgr (duh)

For more on the technique that GPCul8r uses, see Mark Russinovich's original article on the subject:
http://blogs.technet.com/markrussinovich/archive/2005/12/12/circumventing-group-policy-as-a-limited-user.aspx

The consequence: Everything below User Settings\Administrative Templates - e.q. every policy user level (as compared to kernel level or system level) code pulls out of the registry can be bypassed! If you want to counter this - read Mark's comment -

The bottom lines is that full control of an end-user environment is possible only with strict lock-down of the programs users run, something that you can accomplish by using SRP in white-list mode, for example. It's also important to note that the ability of limited users to override these settings is not due to a bug in Windows, but rather enabled by design decisions made by the Microsoft Group Policy team.

I do not know, whether Vista improves this - but I certainly hope!

Exchange 2007 SP1 and OCS UM notes and gotchas !

So you've download Exchange 2007 SP1 and want to install it on your UM server that is integrated with OCS!?

If this is your first OCS integration then you should start is by downloading the documentation and if you've earlier downloaded the Office Communications Server and Client Documentation Rollup then you should go to the Office Communications Server 2007 Technical Library and find the documents updated to version 1.1 (Quite a few of the planning and deployment guides are updated to version 1.1 - not the Enterprise Voice Planning and deployment guide though)

Then the next place you should start reading is the SP1 Release Notes and especially the part covering Unified Messaging and "Issues related to the Unified Messaging server role"

In short the important general issues are -

  • The Unified Messaging Server role must be installed on a dedicated role (Like in the Beta's)
  • Configuration data is overwritten during installation !
  • You must remove any language packs installed before installation of SP1

And most importantly when integrating with OCS the following issue apply -

  • The Exchange UM server itself cannot request the MRAS credentials required to initiate an outbound call to a remote user (A user on the Internet External to the Edge), so for Play on Phone to work in this scenario the UM Server role needs to have cached credentials from a previous incoming call and reuse these !! (Read the full evasive explanation in the Release Notes)

There are a few other smaller issues applying to OCS/UM but the above is by far the most important one (And I guess hours could be spent troubleshooting if you are not aware of this issue)

Friday, November 30, 2007

Exchange 2007 SP1 available for download

As announced yesterday in the TechNet flashes Exchange 2007 SP1 is now available for download here.

Of course I'm most interested in the Unified Messaging enhancements, but there many other interesting improvements as the import/export of PST files which is very interesting for our migration projects (And we also look forward to better stability of the product due to all the included fixes)

Following is an overview of the changes from the download site -

Anywhere Access

  • Integrated Exchange Unified Messaging functionality with Microsoft Office Communicator 2007 and Microsoft Office Communications Server 2007.
  • Outlook Web Access additions, including public folder access, S/MIME support, personal distribution lists, and mailbox rules editor.
  • Webready document viewer supports Microsoft Office 2007 documents in addition to Microsoft Office 2003 documents.
  • Extended language support in Outlook Web Access with Arabic and Korean spell checking.

Operational Efficiency

  • Support for Windows Server 2008 deployments, including benefits in flexible clustering, advanced networking, and simplified management.
  • Additional tools in the Exchange Management Console, including public folder management and configuration options for clustering and POP/IMAP access.
  • Improvements to the Exchange Management Shell syntax and import-export PST in the move-mailbox command.
  • Wider variety of web services for application development, including public folder access, delegate management, and folder level permissions.

Built-in Protection

  • Addition of Standby Continuous Replication (SCR) for site resilient high availability deployments.
  • Extended Exchange ActiveSync policies for mobile policy enforcement.
    Information rights management pre-licensing by the Hub Transport role.
  • Secure Real Time Protocol (SRTP) support in the Unified Messaging role.
    Support for IPv6 when using Windows Server 2008.

Monday, November 26, 2007

Invoke-VbScript

Note: The script has been updated, see this post.

One of the best features of PowerShell is the ability to do the same on the command line as in a script. Even Command Prompt do not support than.

But as VBScript is not dead yet - I'm currently doing more than 3000-lines of it - this script is useful as it allows you to execute VbScript interactively. It has two uses: 1) Test VBScript details without having to run a huge script 2) Use VBScript features than you do not know how to do in PowerShell.

The script Invoke-VbScript.ps1

param($vbCode,[switch]$ExecuteStatement)

function PrepareVB {

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

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



Execute command example -


PS> Invoke-VbScript -exe 'msgbox("hi")'



Evaluate expressions and return result example -


PS> $name=Invoke-VbScript 'InputBox("Enter your name","Test")'



Have fun!

Sunday, November 25, 2007

VMRCplus v1.6

Just saw that VRMCplus that I wrote about earlier has been updated to v1.6. Get it here.

The changes are (taken from this blog post)

So what is new in 1.6.0?
First of all, the UI reflects Virtual Server terminology. Both Paul and I had used a mix of Virtual Server terminology and internal (SDK) terminology. To reflect the terminology used in the web administration UI of Virtual Server, the terminology of VMRCplus has been updated.
Second, VMRCplus now offers configuration of scripts on both the Virtual Server and Virtual Machine level. This was missing from the previous release.
Third, VMRCplus offers configuring promiscuous mode on the network so you can trace traffic in the virtual switch. This is something Virtual Server does not offer in the web administration UI.

Of course there have been minor enhancements like storage of Console Manager coordinates, conflict handling when a shortcut already exists (something Virtual Server fails to resolve).

The COM and LPT port assignment logic has been fixed (most of it did not work).
The x86 installer package no longer installs on x64. This has been done to prevent issues with 32-bit VMRCplus on 64-bit Virtual Server.

Error handling has been enhanced and several issues have been fixed.

Tuesday, November 13, 2007

Met MOW

I managed to meet MOW at Ask-the-Experts today. MOW is famous within the PowerShell community for his PowerTab function and he is running thepowershellguy.com blog.

If you haven't done so already - get a copy of Powertab now!

Well, it was fun meeting him and discuss some of the features I'm missing. On is -

  • dir $folder\[tab] should expand into dir $folder\file

An I gave my regards for PowerTab as such and the new constructor feature - try it yourself -

  • [system.diagnostics.process]:

Anyway, the PowerShell v2 CTP enables him to do a full tokenizing of the command line, so even better  intelligence will be possible.

Monday, November 12, 2007

Viridian becomes Hyper-V

Marketing is a strange beast. Server virtualization in Windows Server 2008 - e.g. the replacement of Virtual Server - will be called Hyper-V. I already hate that name! HyperV perhaps - but why the hyphen??

Anyway, Hyper-V will be a server feature that can be turned on. Microsoft is also planning a Hyper-V Server SKU.

Hyper-V is still expected to be delivered 6 months after Windows Server 2008.

On the management side, it was demoed at the keynote here in Barcelona, a virtual server manager that could manage Virtual Server 2005, Hyper-V *and* WMware server!

Teched IT-Forum Barcelona

(I apologize for these reposts. Windows Live Writer does not seem to be able to edit posts!?)

This is the first time I'm using the released Windows Live Writer to post here, so bear over with me if it does not work as expected ;) The new Windows Live Writer seems to support pictures and formatted PowerShell scripts, so it is much better than using the webpage.

In this year's Teched IT-Forum I'm going to focus on Windows Server 2008 and the System Center products - most ConfigMgr and OpsMgr. And then this is going to be a great PowerShell week. The CTP of V2 has been released and I hope to get in touch with some of the PowerShell staff as I have about 45 things I would like to discuss with them. I also hope to get in touch with some of the other people from the community.

Thursday, November 01, 2007

Microsoft Quality of Experience Monitoring Server RTW'ed

After you've deployed OCS and enabled Enterprise Voice (Even works with PC to PC Communication) you will get calls from users saying that I had this & this conversation and voice quality was really bad.
During the OCS beta's the only answer was "hmmmm .... ok - can you try again" but then later the rescue came from the QoE Monitoring Server Beta, which has now RTW'ed -

The QoE Monitoring Server is a new server role for Microsoft Office Communications Server 2007 Standard Edition or Enterprise Edition. It provides the information that you need in order to better understand the media quality that your users are experiencing in your Office Communications Server 2007 deployment. With QoE Monitoring Server, you can do the following:
  • Gather statistics on media quality of locations or based on a grouping of subnets
  • Proactively monitor and troubleshoot media quality of experience issues
  • Perform diagnostics to diagnose VoIP user complaints
  • View trends which can help you with post-deployment growth and measure results against the service level agreement
The QoE Monitoring Server collects quality metrics at the end of each VoIP call from the participant endpoints, including IP phones, Microsoft Office Communicator 2007, the Microsoft Office Live Meeting 2007 client, and Microsoft Office Communications Server 2007 A/V Conferencing Server and Mediation Server. These quality metrics are aggregated and stored in a SQL database. The data can then be used to alert you to abnormal media quality conditions and also to generate routine media quality reports.

Find it here

Wednesday, October 31, 2007

Passed the 70-638 OCS Beta Exam ;-)

Not that I was worried in anyway :-S but other bloggers and some of my students from my Unified Communications Bootcamps already reported that they had passed the exam (Called 71-638 while in beta) .... and I haven't received an e-mail about passing.

I'm in Seattle this week and was chatting with a colleague who haven't received an e-mail either, so I re-checked today and yes I did indeed pass it ;-)



Now again, I wasn't really worried - but I guess I will treat myself with an extra beer tonight at Jillians ;-)

Sunday, October 21, 2007

Call-Method v2

This is a follow-up article to Call-Method.

When PowerShell pipes a collection or array, it unwraps the object and passes the individual items in the collection/array. This is normally a very useful behavior, but if you pipe to function like Get-Member and Call-Method, you do not always get
what you want. Let me show how it works -


# Construct an array
$array=1,2,3

# Pass the array down the pipeline
# Gettype will be called 3 times for each integer
# in the array
$array | cm gettype

IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType
True True Int32 System.ValueType
True True Int32 System.ValueType

# Wrap array with the array operator. This changes
# nothing as the array operator only creates an array
# if there is none
@($array) | cm gettype

IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType
True True Int32 System.ValueType
True True Int32 System.ValueType

# Pass an array with the first argument being our
# array - this works
,$array | cm gettype

IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array

# Use the updated Call-Method and use the InputObject
# argument - like the one found on Get-Member
cm gettype -InputObject $array

IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array


## This is the updated Call-Method function

function Call-Method($method,$InputObject) {
begin {
if ($inputObject) {
$m=$inputObject.$method
$m.invoke($args)
}
}
process {
if ($_) {
$m=$_.$method
$m.invoke($args)
}
}
}
new-alias -force cm Call-Method

Call-Method

When you are using PowerShell, you often have to call a method. Calling a method is not difficult -
$s="abc"
$s.toUpper()
ABC
but you kind of have to change gear - you have to switch from the PowerShell way of doing things to the .Net / programmatic way. This is no problem if you know it - but it is hard to teach someone, especially if they do not have a programming background.

So, why not create a function and do it the PowerShell way? The function is actually very simple -

function Call-Method($method) { process { $m=$_.$method; $m.invoke($args) } }


And add an alias to minimize the typing -
new-alias -force cm Call-Method


Now it is simple to call methods without dots and parenthesises -
"abc" | cm toupper
ABC
"abc" | cm indexof b
1
"abc" | cm substring 1
bc
$s="abc"
$s[($s | cm indexof b)]
b

Have fun!

Friday, October 12, 2007

Microsoft Unified Communications Partner of the year

Last night Inceptio received the Microsoft Unified Communications Partner of the year award ;-)

According to Microsoft this was due to our contributions to Unified Communications area in the past year delivering lots of Proof of Concepts, UC Bootcamps and UC projects, furthermore we contributed to the fact that UC and Microsoft now has become interconnected terms.

Thank you to all of my colleagues and all of you out there who helped Inceptio succeed in the UC space !!