Friday, August 19, 2005

Exchange 12 and Monad

Terry Myerson posted this blog article recently to discuss the inplications of Monad (a.k.a. MSH).  I highly recommend watching the Channel 9 videos.  In them Jeffrey discusses some new features in Monad such as:

  • Rich targeting capabilities such as positive and negative masking
  • "-Whatif" statement to try the script or command before it is actually run
  • "-Confirm" statement to tell MSH to ask for confirmation for each line of the command where you can accept, decline, of suspend actions.
Recently, several articles have been written that Monad has been attacked by a virus and that Monad will be shipping with the next release of Exchange. I think there may have been a bit of confusion that I wanted to clear up.  Monad was not attacked by a virus, but they were right that the administration of the next release of Exchange has been completely re-written using Monad.

The reports describe a self replicating program, aka a “virus”, that just happens to be written in Monad. There was no exploit to get the script onto the machine, nor any exploit to get the scripts to run on that machine. The discovered “virus” does nothing to break through the secure shell experience (check out the linked blog entry for specifics) delivered by Monad.  The reported “virus” consisted of a simple script that copied itself on top of every other file in the current directory:

$name_array = get-childitem *.msh    
Foreach ($name in $name_array) {
  If ($name.Length – eq 255) {
    $my_file=$name.Name } }
Foreach ($victim in $name_array) {
  If ($victim.Length – ne 255 {
    Copy-item $my_file $victim.Name } }

But they could just have easily written as a CMD.EXE script:

for %%N in ("*.cmd") do (
  if /I "%%N" NEQ "%0" (
    copy "%0" "%%N" > nul

Beyond the security infrastructure built into Monad, I am very excited about what Monad brings to the Exchange admin experience. As background, Channel 9 recorded a great overview and demo of Monad. Just as Jeffrey discusses in his interview, we have re-built our admin graphical user experience entirely upon Monad cmdlets. Everything you can do through the GUI, can be done through the command line. And through the command line, you can do so much more. Consider these examples:

# Set the send quota for ALL mail enabled users in the DL called “RemoteUsers” to 1000 KB
Get-DistributionGroup “RemoteUsers” | Get-DistributionGroupMember | Set-Mailbox –ProhibitSendQuota 1000

# Mount all mailbox databases on server HONGKONG1
Get-MailboxDatabase –server HONGKONG1 | Mount-Database

# Only remove storage groups that contain the word “temp”, with confirmation support
Get-StorageGroup | where { $_.Name –imatch “temp” } | Remove-StorageGroup –confirm

# move ALL users from server PORTLAND to the TUCSON server, database “DB1”
Get-Mailbox –server PORTLAND | move-mailbox –targetDatabase “TUCSON\DB1”

As we get closer to Beta 1, we will be able to share more about Exchange 12. In the mean time, I hope this helps articulate this issue better and the direction Exchange is headed.


No comments: