The capabilities of Microsoft Lync (IM, presence, voice, video, web conferencing, other) are such that it eliminates the need for some overlapping technologies. With Lync I don’t (for example) need to use a separate web conferencing infrastructure like LiveMeeting / WebEx / GoToMeeting – because this capability is built right in.
When I used LiveMeeting (before Lync) I would sometimes upload videos that I would play in meetings – LiveMeeting would trickle the video down to the attendee’s PCs and issue start / stop commands and everything (sort of) worked great. While Lync does have the ability to upload presentation content (PowerPoint files), it no longer supports uploading of videos. You can imbed videos in your PowerPoint files, and play then that way, but this makes your PPTX files quite large.
I thought that there must be a way to feed video directly into the Lync video window (intended for web cam use). A co-worker suggested trying one of the many “virtual” web cams, so I did, and it WORKS GREAT! We tried a few different (unsupported) virtual web cams, but the one I liked the best was ManyCam. Before you go off, download and install it know that it has one of those REALLY annoying install wrappers that will change your default search engine, install an unwanted tool bar, and generally mess up your browser settings. Once it was installed, I stopped Lync, stopped ManyCam, restarted both, and then ManyCam appeared a video device for me in Lync!
(You can see the sort of videos I have laying around on my PC – high quality stuff!)
Chris Norman thought that another great use of this sort of software the capability to merge the feeds of multiple web cams (his post is here).
-John
What? You want to disable IM in Lync? Why on Earth would you want to do that!
It turns out there are a number of reasons that some organizations might want to, including:
Whatever the reason, there’s a simple way to disable IM via a registry setting on the Lync Client. It’s actually a hold over from the Office Communicator client, and the setting is described in BLOG post here as well in a KB article (KB954648).
All that’s required on the client machine is:
What happens? The user can’t participate in IM conversation, using the Lync client, that’s what happens! One easy way to see the impact is by looking at contact cards before / after the change – the IM “bubbled” is greyed out. Two pictures of contact cards make the point best:
I mentioned in my last post that I’m now focused on Unified Communications at Microsoft. I’ll go deep on what Unified Communications (UC) is later - should you care.
The BIG news is that as part of my new gig, I get to use lots of cool phones and devices that integrate with Office Communication Server (OCS) and Microsoft Lync (the new version about to be released).
Many of the folks at Microsoft no longer have regular telephones on their desks – many locations have moved to a completely “soft” phone model (voice services through your PC) using a USB headset, USB speakerphone, USB handset, or even the old PC speakers and integrated microphone.
Sure, there are “hard” phones all over Microsoft – some traditional “copper” attached phones that talk to a vintage PBX (like in my rural Microsoft office) as well as network-based “hard” phones that plug right into an Ethernet jack in the wall (these are everywhere in Redmond) – like the awesome Polycom CX7000. The CX700 is great, but it does lots more than just let you dial a number using the key pad!
The Problem for lots of organizations has been that there’s a real need for IP “hard phones” – standalone devices that look and act just like an old telephone. Many users don’t adjust well to a handset / headset / speakerphones without a physical keypad. I have phones I love/use every day without keypads (like the USB Polycom CX200 or CX100) and THEY ROCK but they aren’t for every situation.
Some users and situations mandate a low cost solution with a keypad (like with the USB attached CX300). I REALLY LIKE my CX300…it has almost everything – great price, USB interface, speakerphone, and dial pad. The one limitation (over my CX700) is that it is not a stand alone device – it still requires a PC to function. I have other USB devices with a keypad I use a lot (like the Jabara 520 and the Plantronics 1100M ) This is not a draw back in many dedicate scenarios (where a user has a PC at work or home), but it still doesn’t address a stand alone “hard phone” scenario (like, say, my office at home…where I may not always have a work PC fired up all the time). Yes the CX700 can do that for me, but it’s a high-function, executive phone – and yes, newer more cost effective devices (like the Polycom CX500) are due out soon to work with Lync.
I know I’m completely ignoring video and headsets in this post (give me time!), but I don’t personally use those as much.
I just got a Snom 300 with updated firmware for work with OCS (and Lync) and it’s A GREAT LOW PRICED IP PHONE! I opened the box, plugged it in, and with limited configuration it worked with Lync from my house! I actually got a call from someone at work on it just after I connected it to Lync.
How hard was the installation? I opened the box, plugged the handset in and after that yes, setting it up was only a tiny bit harder than plugging in an RJ11 cable, but not really that much more difficult.
To set it up I had to:
Right away on my home network it would not work (Lync authorization failure) . A quick check of the Snom knowledgebase and I new that the phone’s time was not close enough to the time in my (Microsoft’s) infrastructure. I set it to a known time server on the the Internet to get back on track via the web UI (browsed to the IP address of the phone at my house – something like /advanced_network.htm">/advanced_network.htm">http://<phone IP>/advanced_network.htm) and everything worked like a champ!
I’ll try to pull together at more detailed post on the provisioning process later (let me know if you are interested!).
Sorry I haven’t posted in a LONG time, but I was super busy getting “all in”.
I changed gears at Microsoft this Summer after my presentation at the Red Hat Summit – Microsoft has lots of credibility (and customers) in virtualization now, and I thought I was ready for new challenges.
I’m focusing once again on messaging (what I did BEFORE joining Microsoft) – specifically Microsoft Exchange and Unified Communications. Voice and electronic communications are evolving rapidly, and I’m excited to be part of it – including things like the upcoming release of Microsoft Lync, the cool new archiving features in Exchange 2010 SP1, and the impact of all this cloud “stuff” on costs / day-to-day administration.
I’ll continue to post information about virtualization and Windows Server that I think may be valuable, but I’m certainly focused on messaging and collaboration these days.
If you have any topics in this area you think I should dig into, let me know! Maybe I should write up details on Exchange Hosted Archiving and how it compares to what’s in Exchange already (and if you should keep paying for a 3rd party archiving tool!)? What about how Lync provides telephony support? Let me know!
TechEd North America was a blast this year in New Orleans!
I co-presented two sessions (one with Brett and another with Larry) and both went well.
I got to pitch in and help with a few other sessions (with Michael Greene, Nick Smith, Bob, and Soumya Das Bhaumik).
I ate too well - got to see Chef Paul Prudhomme again (made it to his restaurant twice last week but only got to eat once! Thanks Maxime…I usually eat at drive-throughs while traveling…K-Pauls ROCKES!).
I also managed to hang with lots of friends / customers of Microsoft, analysts, and co-workers.
I had the chance to talk with Adam from TechNet Edge as well, and he and I chatted about the Linux Integration Services for Hyper-V (imbedded below from the TechNet Edge site).
If you didn’t make it to TechEd North America, I’ll be recapping some of my observations and the details in the coming weeks (like what I learned from Soumya at his session on DiskShadow!).
I've been heads down on all sorts of things, including preparing for two sessions at TechEd next week.
If you're heading to New Orleans, be sure to check out these two sessions next week at TechEd in New Orleans covering mixed environments:
I just got a copy of the second edition of our book in the mail (starts shipping next week!) and found out that there’s a Kindle version! That’s cool!
In case you hadn’t noticed, Microsoft has upgraded our blog platform (lots of changes!).
This is kind of my test post for the updated backend.
So I’ve been busy the last two week getting ready for TechEd (WAHOO!) where I’m co-presenting two sessions this year. One of the sessions is all about Linux on Hyper-V.
To get ready, I’ve been working though lots of the common operational tasks including (as you know P2V) migrations.
I mentioned to my buddy Alexander Lash (my partner in crime at TechEd 2008 where we presented a great session on Hyper-V Scripting) all the challenges of Linux P2V migrations, and he mentioned an easy way to do it using DD and VHDTool.
What I didn’t know was that VHDTool can quickly alter a binary disk image file (like those created by DD) and turn it into a VHD for Hyper-V!
I put DD / VHDTool to the test a couple of different ways this week, and wanted to share some results with you. Note that using DD and VHDTool ARE NOT SUPPORTED by Microsoft (but they seem to work pretty well, and the price is right!).
My first run through was to take an existing Linux hard drive out of a system (using of course, Hanna Montanna Linux) and plugging it into one of my Hyper-V servers.
I ran a Windows version of DD against the disk and created a binary image file of the system.
One trick with the Windows version if DD is finding the right disk. It has a nice option to list all the drives on a system (see picture).
Getting the drive ID right is important (slashes and all), or the process wont work.
The actual command line I used to “suck the brain” out of the Linux system was pretty simple:
dd if=\\?\Device\Harddisk1\DR2 of=C:\Hanna.img bs=1M --progress
It took quite some time to copy the entire disk (empty space and all) to a new 80ish GB file, but once it was done creating the image, it took just a minute to get the VM up and running.
I moved the image file to a better location and ran VHDtool to “convert” the image:
VHDTool /convert c:\Hanna.img
I also renamed it to a .VHD (Hyper-V only likes to define VMs using storage files named .VHD) and then defined my VM (using the converted image file).
The VM started right up, noticing the changes to hardware (no longer having a sound card, for instance), and worked like a champ for me.
I tried capturing an image of the same Linux system using DD on Linux. I Ran DD on the Linux system, and wrote the binary image file to an attached (NTFS formatted) USB drive.
When DD was done, I plugged the USB drive into my Hyper-V host, copied over the file, ran VHDTool, and again success!
NOTE that most commercial Linux distribution DO NOT support reading / writing NTFS formatted disks, making this type of image capture (direct to USB) impractical. Still, it was pretty awesome that it worked.
As I mentioned, not being able to access a common file system (like NTFS) on a USB drive from common, commercial Linux distributions is a blocker for the last process I showed. Yes I could have tried all sorts of other file systems, but I figured I should skip all the disk swapping that I had been doing and just use the network instead.
I got some more help from “Mr. Z” (mentioned in my earlier “Linux P2V The Hard Way” post). He rattled off the command line over the phone to mount a remote CIFS share so I could dump the output of DD directly on my Hyper-V host – saving a step.
On the Linux system I mounted my share:
mount –t cifs –o username=administrator //192.168.0.10/D$ /mnt
Then I ran DD:
dd if=/dev/sda of=/mnt/rhel54.img
Once it was done, I ran VHDTool and renamed the .IMG file to .VHD, defined the VM and was all set again to start my VM.
I was of course using SELinux and now (because I did this nutty P2V) was have all sorts of consistency “opportunities” in my VM. I had to repair my file system, reconfigure the X Server, add the Linux Integration Services (ISs – actually cheated and added them to physical server first!), but after that and a reboot the VM was online.
Here are a few thoughts on the process, after the fact. Firstly, this process HAS ZERO SUPPORT FROM ANYONE! The process will vary somewhat based on your installation and distribution (security options, file systems, other).
The biggest drawback to this process is the HUGE files that DD creates that must be consumed by VHDTool. Using PlateSpin, Tar, or another file-based process skips all the blank space on the disk. Still, the process is pretty simple and works reliably for me.
VHDTool can sometimes “wrap” your binary image with information that Linux may not 100% understand. For instance, I ran it against a 320GB image I captured. Everything seemed to go well, and the VM booted, but the file system wouldn’t mount. Apparently “the disk” (VHD) was reporting a size of 127GB, while the file system was 300+GB (300 pounds of data in a 127 pound bag?), and the operating system took exception to this.
The process worked for me (above) in each case because the source disk (binary image) was smaller than 127GB. I’ll touch base with the developer folks and see if they know anything about that.
Let me know what you think of this post, as well as your thoughts for additional posts.
I’m back from lots of traveling (why I’ve had time to post a few things).
I got a great question about my last post…how best to call a custom PowerShell function.
I’m not a PowerShell expert by any stretch of the imagination, but I do use it a good amount and I find it useful to save code that I’ve optimized (gotten to actually run!) so can use it over again – like the VMCPU code from my last post.
Sometimes I’ll simply copy and past a function directly into PowerShell – that way I don’t have to worry about loading the script file (execution policy). Here’s what it looked like when I copied the Report-VMCPU function into PowerShell and called it.
It’s not a convenient way to manage your functions, but you don’t encounter all the security “challenges”. you might otherwise encounter.
You can of course simply load a “.PS1” which contains your pre-defined functions (like say, a file called Report-VMCPU.PS1 that contains , but the default execution policy may block your ability to load a script file. To allow the execution of scripts, you may need to run:
set-executionpolicy –executionpolicy unrestricted
To then load the script file, type a period followed by a space and the full path to the script file (if it’s in the current directory, then you would enter:
. .\Report-VMCPU.ps1
You may receive another warning about “Running scripts you trust”. Some files may be “blocked” based on their security status. To “unblock” your script file, hop into Explorer and access file properties. Click the “Unblock” button and “Apply” for your script.
If you’ve set your execution policy and unblock your script, loading your file full of functions is much cleaner.
Depending on where I’m working, or what I’m doing, calling a PowerShell function (from my bag of tricks) could look like any of the examples screens above.
As always, keep the comments and questions coming!
I received an e-mail from someone looking for an electronic version of the VMCPU PowerShell reporting script I wrote for our book on Hyper-V, so I thought I would post it here (FYI the updated, 2nd edition is due out in a month or two!).
I wrote to script to address CPU performance monitoring requirements I had in citations where I didn’t have SCVMM or SCOM. When we wrote the first edition of the book, James O’Neill’s PowerShell library for Hyper-V didn’t include any functions to check VM CPU load.
James (a 5 star rated PowerShell expert, as far as I’m concerned) has since added Get-VMProcessor to the library, but I like my little function, because the output is more colorful (yes, the code is uglier than James’, but it’s my ugly baby!).
Let me know if you have any questions (or just check out the end of Chapter 10 in either edition of the book!).
function Report-VMCPU {Param ($server=".") $LoadSum = 0 $PCores = 0 $VProcs= GWMI -computerName $server –Namespace root\virtualization -Class MSVM_Processor write-host " " write-host " CPU Load" write-host "VM Name # %" write-host "-------------------------------------- ---- -----" foreach ($VProc in $VProcs) { $VM = GWMI -computerName $server -Namespace root\virtualization -Query "Select * From MSVM_ComputerSystem Where Name = '$($VProc.SystemName)'" $VMname = $VM.Elementname.PadRight(39," ") $VMCPU = $VProc.deviceid.split("\")[-1] $VMCPULOAD = $VProc.LoadPercentage Write-Host "$VMname $VMCPU " -nonewline if ($VMCPULOAD -lt 30) {write-host $VMCPULOAD -backgroundcolor green} elseif ($VMCPULOAD -gt 80) {write-host $VMCPULOAD -backgroundcolor red} else {write-host $VMCPULOAD} $LoadSum = $LoadSum + $VMCPULOAD } $PProcs= GWMI -computerName $server –Namespace root\CIMV2 -Class Win32_Processor foreach ($PProc in $PProcs) { $PCores = $PCores + $PProc.NumberOfCores } $VLoad = $LoadSum / $PCores write-host " " write-host "-----------------------------------------------------------" Write-Host "Physical Host Virtual CPU Performance Summary" -nonewline if($Server -ne ".") {write-host " for $Server"} else {write-host " "} write-host " " Write-Host " Total Physical Cores: " $PCores Write-Host "Approx. Virt. CPU Utilization: " -nonewline if ($VLoad -lt 30) {write-host $VLoad -backgroundcolor green} elseif ($VLoad -gt 80) {write-host $VLoad -backgroundcolor red} else {write-host $VLoad} write-host "-----------------------------------------------------------" write-host " " }