Friday, October 17, 2014

Fixing Blank Calendar with Chrome 38 and Outlook Web App (OWA) on Exchange 2013

So there's an issue with Chrome 38 and higher and Exchange 2013 Outlook Web App (OWA): the calendar will fail to load any data effectively showing up blank for users. You'll also see the error in the client headers as "ClientError;exMsg=Uncaught SyntaxError: Unexpected token );file=https://mail.corp.com/owa/15.0.995.29/owa2/scripts/boot.0.mouse.js:11". This is not the  modalDialog issue that's causing issues with OWA 2010, it's an issue with Chrome's V8 javascript engine their array object definition.

The fix is pretty simple to implement. On one of your mailbox servers copy the contents of: C:\Program Files\Microsoft\Exchange Server\V15\ClientAccess\Owa\prem\15.0.995.29\scripts\ to a directory on your workstation (may want to make a backup copy on the server just in case). There's no need to copy any subdirectories, only the root js files. Also note that you may have a different version number in there: 15.0.995.29 is Update 6.

Using Notepad++, find and replace in all files in the directory on your local machine: replace '"values"in n' with 'n.hasOwnProperty("values")' (without the surounding 's). On 15.0.995.29 this was 42 replacements:


Copy the updated files back to all of your Exchange Mailbox servers (if you segregate your CAS and MB hosts, you only need to update on the MB hosts as they do the actual site rendering). Also after you update the files there's no need to cycle the AppPool, clients just need to logout and log back into OWA (if you have a NetScaler or similar load balancer in between doing any form of caching you may need to refresh that).

You can actually see Microsoft's implemented the same fix for this in the Office 365 release chain; they added the fix between 16.0.411.0 and 16.0.411.1:
https://r1.res.office365.com/owa/prem/16.0.411.0/scripts/boot.0.mouse.js
https://r1.res.office365.com/owa/prem/16.0.411.1/scripts/boot.0.mouse.js


Credit to finding the root issue goes to adamk@chromium.org, the Chrome issue is here:
https://code.google.com/p/chromium/issues/detail?id=409858

Update for Chrome looks like it's coming down the pipeline soon, should also be in the Exchange 2013 Update 7 in late November.

Wednesday, February 22, 2012

"The file name you specified is not valid or too long" with SharePoint 2010 Mapped Drives

Ran into an issue today with using mapped drives in Windows 7 and a SharePoint 2010 Document Library. Making new files worked just fine, but when trying to move files between folders I was getting the error: "The file name you specified is not valid or too long".

Long story short, it turns out the WebDAV support in Windows 7 doesn't seem to like certain characters in paths, specifically space in this case (although I assume there are others). In this case it didn't like that the Document Library was at:
http://sharepoint/docs/Documents%20And%20Things

This is with WebClnt.dll 6.1.7601.21728, which is the most recent I could track down.

The work around is to rename the document library. Since you can't do this directly from the SharePoint web interface, I had to do it using SharePoint Workspaces. Once the library was renamed, it's working properly now.

Wednesday, August 10, 2011

Eject for Mac OSX (or OS X)

Tired of getting the "Device Removal" dialog box in OSX every time you pull out your USB flash drive or iPod?
I present "Eject" a two tap utility for OS X that will display a dialog of all of your mounted disks. Select one, click "Choose", and Finder will eject it.



And the Automater Workflow if you want to tweak it:
http://dl.dropbox.com/u/5396315/Eject/Eject_Workflow.zip

Monday, June 28, 2010

Note on Deploying Adobe CS5

Found this tidbit in the Adobe Enterprise Deployment guide. At least they're upfront about not being user or administrator friendly:
The CS5 applications do not implement application preferences in a consistent manner across applications, nor do the implementations conform to existing platform standards.

Thursday, June 10, 2010

Set Printer Share Comment to the Port Name With IP Address

So as an update to an earlier post on adding the port name to the comments of a print queue on a Server 2003/2008/2008 R2 box, below is an update script that will add both the port name and the IP address or DNS host name associated with a given port.


$printersWMI = Get-WMIObject -Class "Win32_Printer" -NameSpace "root\cimv2" -computername "."
$portsWMI = Get-WMIObject -Class "Win32_TCPIPPrinterPort" -NameSpace "root\cimv2" -computername "."
$ports = @{}
ForEach($port in $portsWMI){
$ports[$port.name] = $port.HostAddress
}

ForEach($printer in $printersWMI){
$printer.Comment = $printer.PortName + "`r`n" + $ports[$printer.PortName]
$printer.Put()
}



Tuesday, November 03, 2009

Excluding My Music from Roaming Profile

By popular demand, we recently rolled out iTunes to our users. An unexpected consequence of this was that our windows roaming user profile demands skyrocketed. We're talking over doubling basically over night. Our solution to it was to exclude the My Music folder from the roaming user profile. In general its probably best we don't have user's music collections sitting on expensive enterprise storage. To do this, create a new Group Policy. Drill down to Administrative Templates\System\User Profiles. Enable "Exclude directories in roaming profiles" and set the value to "My Documents\My Music". If there are other folders you'd like to exclude you can add them with a semicolon, eg "My Documents\My Music;Temp".

The good news is that once this policy is enabled, the next time that the user logs off, the user profile will sync without any of the Excluded directories. Even better is that it will remove existing "My Music" folder on the server copy of the roaming profile. Turn on Performance Monitor, setup some counters, and watch the drive space roll in.

Friday, April 10, 2009

Exchange Cluster Continuous Replication Failed

We had an Exchange 2007 Mailbox server's storage drive fill up due to log files not being cleaned out due to the backup job failing (don't ask). After we deleted the unnecessary log files and got the store back online, we weren't able to get its CCR passive node to bring 3 of the 5 stores online. We ran "Update-StorageGroupCopy -DeleteExistingFiles", and the process would complete. I would then show up as "healthy" with a "Get-StorageGroupCopyStatus" for a minute or so, and then fail. Checking the event log we got:
Event ID: 2059
Source: MSExchangeRepl
The log file 404149 for is missing on the production copy. Continuous replication for this storage group is blocked. If you removed the log file, please replace it. If the log is lost, the passive copy will need to be reseeded using the Update-StorageGroupCopy cmdlet in the Exchange Management Shell.
It wouldn't make sense straight away, as the database on the active node was "up to date" and shouldn't need those log files. After some research, I found that this was a result of the failed backup process. When we deleted the log files on the active node, we'd broken the replay log process (as we'd deleted log files that were created after the last time the database was backed up).

Given that we're using a backup solution that backs up the databases from the passive node, I had to use NTBackup Utility to do a normal backup on the database. Once this completed I was able to use the Update-StorageGroupCopy command to get the database replication back to a healthy state. In theory this process should work on a Standby Continuous Replication
SCR cluster as well.