Wednesday, November 27, 2013

PowerShell’s Single Formatting Pipeline

In some of my recent training, I’ve been encouraging delegates to create scripts, and to try to crate them to be as reusable as possible. In class, I’ve seen some very confused students – confused by the output.

Here’s a simple example of the confusion I sometimes see:

PSH [C:\foo]: ls wf1.*

    Directory: C:\foo

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         10/8/2012   4:48 PM       1614 wf1.ps1

PSH [C:\foo]: get-service WAS

Status   Name               DisplayName
------   ----               -----------
Running  WAS                Windows Process Activation Service

PSH [C:\foo]: ls wf1.*;get-service WAS

    Directory: C:\foo

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         10/8/2012   4:48 PM       1614 wf1.ps1

Status      : Running
Name        : WAS
DisplayName : Windows Process Activation Service

I’ve also seen this behavior in functions, for example:

Function Get-Stuff {
  Get-Service WAS
  Get-Process PowerShell
  ls cert:\
}

I’ll leave the details of the output as an exercise for the reader – but calling Get-Stuff suddenly switches from a table view to a list view.  Here’s another thing I’ve recently seen:

PSH [C:\foo]: gwmi win32_share ; gcim win32_bios

Name                              Path         Description
----                              ----         -----------
ADMIN$                            C:\Windows   Remote Admin
C$                                C:\          Default share
N$                                N:\          Default share
Phoenix ROM BIOS PLUS Version ...              Phoenix ROM BIOS PLUS Version ...

So what’s gong on here? We see what would normally be a table being displayed as a list and vice versa.

Really, it’s very simple. At the end of any command sequence, the last command in the pipeline (or for that matter the first command in a single command pipeline!), can emit objects. When the pipeline is ‘finished’ – PowerShell uses the first object type emitted to determine how to format everything else in the pipeline. Or that’s the plan. Unfortunately, when putting out totally different object types, this formatting probably  can’t work since the later object(s) lack the properties that the display XML used for the first object would have wanted to display. So PowerShell just produces a more basic list view. IN the last example, the formatting subsystem DID have enough properties to crate a (rather odd) table view from what is normally a list view.

For script or function developers, the clear answer is to always create a single object type and return that and only that object type. The examples above are returning different object types and PowerShell's formatting subsystem is perhaps less intelligent than we might have hoped for. I’m not knocking it, just pointing out one of the minor downsides.

One way to get around this is to end each command sequence that explicitly leaves objects in the pipeline with a call to Format-Table/Format-List like this:

PSH [C:\foo]: gwmi win32_share |ft ; gcim win32_bios | fl

Name                         Path                              Description
----                         ----                              -----------
ADMIN$                       C:\Windows                        Remote Admin
C$                           C:\                               Default share
N$                           N:\                               Default


SMBIOSBIOSVersion : A00
Manufacturer      : Dell Inc.
Name              : Phoenix ROM BIOS PLUS Version 1.10 A00
SerialNumber      : 6Y84C3J
Version           : DELL   - 15

So remember that when any script or function returns objects, PowerShell does a ‘best efforts” attempt to display the returned objects. For a while lot of reasons, such scripts or functions are better off returning just one type of object – a custom object if nothing else will do.

 

Technorati Tags: ,

Tuesday, November 26, 2013

Frost and Sullivan-Seven Enterprise Communications scenes in 2014

Research company Frost and Sullivan just released a looking forward survey, looking at seven enterprise communications scenes for 2014. The number one theme is the one that really caught my eye: Microsoft Lync will become a more disruptive force in the UC market.

While the report notes that although Lync is a relatively new player in the UC market, Microsoft has been gaining momentum in the last 12 months. Frost and Sullivan also anticipate that the UC Market space will be feeling increased pressure from Microsoft in 2014. Which can only be a good thing for those of us in the Lync space!

There’s a prĂ©cis of the report available here: http://www.hispanicbusiness.com/2013/11/19/frost_sullivan_seven_enterprise_communications_scenes.htm.

Technorati Tags: ,

Friday, November 22, 2013

Integrating Lync 2013 with Avaya Aura

One of Lync' Server 2013’s strengths is its ability to interoperate with everything else. Whilst I’m sure that  the more fervent marketers would have preferred all MS clients to rip out and replace their PBXs with Lync, that was never a very realistic early goal. If for no other reason than many companies have significant investment tied up in the status quo PBX – chucking that in the skip is a difficult thing to contemplate, especially in the current economic client.

Instead, Microsoft has wisely pursued an approach of interoperation with things like the Mediation Server, SIP trunks and PBX interoperation. That enables the organisation to adopt Lync without initially taking the Enterprise Voice parts. When it becomes economically relevant to consider upgrading their telephony, THEN they can move to Enterprise Voice. It’s a very sensible strategy, IMHO, and I’m seeing it a lot in my travels.

Now Lync is a complex product, as are the PBXs and other products Lync talk to. In theory, all that’s needed is a Gateway to convert SIP to trunk signaling, ensuring you’re using the proper codecs, and a bit of configuration magic and all is well. In many cases that’s true. But it helps to know what you are doing.

One way Microsoft is helping is producing integration guides, like the most recent one: Lync 2013 and Avaya Aura 6.1 Integration Guide. Written by Tekvizion PVS this guide shows you how to configure interoperability between the two product sets.

On the Avaya side, the Guide is based on the integrating of a CS1000 (v 7.50), an Aura Session Manager (v6.1.2.0.612004), and Lync 2013 RTM (I assume that there;s no issue with the CUs – but the guide is based on RTM). There’s a bit more configuration to do on the Avaya side, which is probably appropriate as it’s doing the PBX interconnection and has to route both externally and to any existing internal PBX lines/trunks.

On the Lync side, it’s fairly painless. You start by creating a new IP/PSTN using Topology Builder. You define the root trunk  specifying the IP address of the Session Manager box and and the associated Lync Mediation server and then publish the topology. You then need to configure the trunk. You also probably need to adjust your voice policies, PSTN Usage Records and your dial plan to accommodate the Avaya solution in terms of who can use the switch, and your dialing rules that accommodate the Avaya switch. This may mean new policies and PURs or just some editing of existing ones depending on your topology.

You configuring Lync Server partly from the Lync Control Panel and for some components you use PowerShell (e.g.: e.g. specifying RTCP, Session Timer and Encryption level parameters). Personally, I’d prefer to see the entire configuration process done in PowerShell – but I would say that.  What I find so wonderful about PowerShell in this environment – you can define the configuration by writing the PowerShell script. From then on you can refer to it to see what you configured!

A couple of things, though, that I noticed in reading the guide. First, the guide wants the communication between the Mediation server and the Session Manager box to be over port 5060 – or SIP over TCP. That means the physical link between these two systems is a potential security risk. To minimize the risk, you could connect the two physical devices just using a crossover patch panel if that is feasible. It’s a risk to recognise and mitigate as part of your configuration.

Secondly, it seems like media bypass is not supported – you are instructed to turn it off. That means that for all calls, the call data will transit the mediation server. For this reason, you need to consider carefully how or whether to co-locate the mediation server with the Front End solutions. With more highly utilised mediation servers, you also may wish to re-evaluate whether to have the be virtual or physical mediation servers. It’s another aspect to consider when doing your initial planning.

Technorati Tags: ,,

Thursday, November 21, 2013

Enabling Email Signatures with Office 365–a PowerShell Solution

Like many folks, I use Outlook pretty much exclusively for my email. One nice feature is the ability to set a ‘signature’, text that is added to the bottom of each email I author and send. The signature can contain pretty much anything you want , including your phone numbers, your Lync ID, etc.
Ben Norcutt has just published a nice article on how you can use PowerShell to set email signatures with Office 365. You can see the article and the PowerShell scripts here: http://4sysops.com/archives/add-a-signature-to-office-365-emails-with-powershell/
Technorati Tags: ,,

Wednesday, November 20, 2013

Using the Lync Client–Online Meeting Basics

I just came across this You Tube video':

Lync 2013 Online Meeting Basics

A nice, fairly short (21:57) look at the key aspects of Lync and online meetings. The vide covers scheduling online meetings, sharing meeting content, managing audio and video connections, and collaborating with attendees.

This video is one in a set of videos at http://www.youtube.com/channel/UCIw0RsfVMVWdxf0NezkxmKA?feature=watch which look at how to get the most from the Lync Client.

If you are rolling out Lync, you might take a look at these videos as the basis for end user on-demand self-training.

    Tuesday, November 19, 2013

    Lync Client November 2013 Update

    As I noted last week, Microsoft has released an update to the Lync client. My article last week looked at a key presence related bug fixed in this release. But as Debbie Arbeeny a PM in the Lync Team notes in this article, there’s more to the November update.

    The client update adds a number of new features to the client including:

    • Photos of Sender/Receiver – view photos of sender/receiver inline with IM conversation
    • URL Photo Experience – set your own photo from a public web site instead of using the corporate image
    • pChat Escalation – escalate a Persistent Chat room to a Lync Meeting with one click
    • Login Trace Files – Access Lync client login logs
    • New Recording Options –choose preferred resolution for client-side recordings

    All in all some nice new features to improve the Lync client experience. If you are running Lync 2013, you want to get this and deploy it sooner rather than later!

    Monday, November 18, 2013

    Lync Client in a XenApp VDI Environment

    Folks are finding the use of VDI (Virtual Desktop Infrastructure) is increasing for a number of rooms. Having your ‘desktop’ stored securely in the data centre to be ‘a good thing’. Rather than giving each user a powerful desktop, you load their desktop in a very powerful server and let the users share the goodness. VDI makes it easier to patch too since the desktop is in your server, not running on a disconnected or turned off system.

    While VDI is a great idea, certain aspects of VDI have been an a bit of an issue. One specific aspect is video conferencing – for a long time only Presence and IM were supported – conferencing wasn’t. Recent releases of the server and updates to Lync now make this restriction a thing of the past.

    In a recent blog post, Rob Beekmans describes in some detail how to get VDI working in a Citrix XenApp 6.5 environment. The key to this is the new Citrix HDX RealTime Connector for Microsoft Lync, and configuring it correctly!

    Technorati Tags: ,,

    Friday, November 15, 2013

    Lync 2013 Client - Updates for November

    The Lync team, like some others, issues regular Cumulative Updates (or CUs) that include fixes for all of the Lync Product. This is, under the covers, somewhat complex, given the nature of Lync’s architecture, but there is good KB support to walk you through the process. While in theory, you need to apply patches to a variety of roles, the patch package comes with an installer that takes all the guesswork and most of the risk out of implementing those individual  patches – just run the patch installer and it does the rest. Updating the Lync client is roughly the same!
    However, because of the rapid pace of developing these CUs and Lync Client updates, there have been occasions where a CU had both fixed one problem, but now causes another. The October updates, for example, broke all Calendar based presence updates in the Lync 2013 client, which was sub-optimal for many. Phil Sharp, describes the problem in his blog post at: http://blog.masteringmsuc.com/2013/11/november-2013-update-for-lync-2013.html.
    It is regrettable that in Microsoft's race to get CUs delivered, it ends up breaking other stuff. Given the complexity of Lync, and the speed at which the team is running, it’s almost inevitable that some patches will be less good than others. Fortunately, that speed means when issues like this arise, there are fixes pretty quickly (you can count on the MVP community to give the Lync team a very fast heads up when issue like this arise!
    In Phil’s blog post earlier this week, he notes both that there are new updates for the Lync client AND that these updates fix the calendar issue. See the Microsoft KB article at: http://support.microsoft.com/kb/2825630 for more detail and for links to the 32-bit and 64-bit upgrade package.
    Like ALL rich Enterprise software packages, you need to plan and deploy updates carefully and thoroughly. That includes testing thoroughly, preferably before deployment. And when you deploy, keep a listening ear open it Twitter or in LinkedIn, listening out for those who have trouble with the latest update.

    Technorati Tags: ,

    PowerShell and TCP/IP Protocols

    Lee Holmes, of Windows PowerShell Cookbook fame and a member of the PowerShell development team, has just published an interesting article on Interacting with Internet Protocols.  In the article, he shows how you can do some cool stuff, in particular interacting with a remote POP3 mailbox.

    This is a great introduction to using PowerShell to leverage the lower level networking functionality built into the .NET Framework. The .NET Framework provides classes that enable you to leverage many of the Internet protocols directly. He cites the System.Web.Mail.SmtpMail class for SMTP,  and the System.Net.WebClient class for HTTP.  He also notes that where the .NET Framework does not support an Internet protocol directly, you can often script the application protocol directly if you know the details of how it works. His example of this is a sample that retrieves information waiting in a remote POP3 mailbox.

    Using the .NET framework to, in effect, implement higher level protocols which do not exist in the Framework is a pretty cool thing to do. But I think you quickly realise that unless you REALLY need to, doing a good job at developing scripts that use POP3, for example, involves quite a lot of work.

    If you do plan to do a lot of network level programming, you might also want to take a look at /N software and their NetCmdlets package. This package is NOT, however, free. There is a free personal edition, giving a single server license and a single concurrent connection. The unlimited connection package, again for just a single server license, is US$899. They also have a site license to handle multiple servers.

    Thursday, November 14, 2013

    Starting Exchange in Lync 2013 Test Drive VM set

    In a recent blog article here, I wrote about the cool VM set that Microsoft has published that lets you play with a working implementation  of Lync Server. In that article, I wrote: “As in most classroom scenarios, starting the VMs all at once means a lot of services do not start cleanly – but it’s nothing that a bit of PowerShell can’t quickly remedy”.  Having played a bit with this, I can say that in all but a controlled startup, services and dependent services for both Lync and Exchange do not always come up cleanly.

    I was playing today and saw this on the 2013-Exchange Server:

    [hyperv] PS C:> $conf = {
    >> $Donotrestart = @
    >> ('RemoteRegistry', 'MSDTC', 'NetTcpActivator', 'HostControllerService')
    >> # get all the unstarted RTC services and start them.
    >> Get-WMIObject -Class win32_service   |
    >>     Where {$_.startmode -EQ 'Auto'}    |
    >>        Where {$_.State -NE 'Running'}  |
    >>          Where {$Donotrestart -notcontains $_.name} }

    [hyperv] PS C:> Invoke-Command –Computer 2013-Exchange –ScriptBlock `
            
    $conf -Credential $CredC | Format-Table

    ExitCode  Name    ProcessId StartMode State    Status  PSComputerName
    --------  ----    --------- --------- -----    ------  --------------         
    0         FMS             0 Auto      Stopped  OK      2013-Exchange          
    0         HostControll…   0 Auto      Stopped  OK      2013-Exchange          
    0         MSDTC           0 Auto      Stopped  OK      2013-Exchange
    1068      MSExchangeA…    0 Auto      Stopped  OK      2013-Exchange
    1068      MSExchangeAnt…  0 Auto      Stopped  OK      2013-Exchange          
    1068      MSExchangeDel…  0 Auto      Stopped  OK      2013-Exchange
    0         MSExchangeDiag… 0 Auto      Stopped  OK      2013-Exchange          
    1068      MSExchangeEdg…  0 Auto      Stopped  OK      2013-Exchange           
    1068      MSExchangeFas…  0 Auto      Stopped  OK      2013-Exchange
    1068      MSExchangeFro…  0 Auto      Stopped  OK      2013-Exchange          
    0         MSExchangeHM    0 Auto      Stopped  OK      2013-Exchange          
    1068      MSExchangeIS    0 Auto      Stopped  OK      2013-Exchange
    1068      MSExchangeMa…   0 Auto      Stopped  OK      2013-Exchange          
    1068      MSExchangeMai…  0 Auto      Stopped  OK      2013-Exchange          
    1068      MSExchangeRepl  0 Auto      Stopped  OK      2013-Exchange          
    1068      MSExchangeRPC   0 Auto      Stopped  OK      2013-Exchange          
    1068      MSExchangeServ… 0 Auto      Stopped  OK      2013-Exchange          
    1068      MSExchangeSubm… 0 Auto      Stopped  OK      2013-Exchange          
    1068      MSExchangeThr…  0 Auto      Stopped  OK      2013-Exchange          
    1068      MSExchangeTran… 0 Auto      Stopped  OK      2013-Exchange          
    1068      MSExchangeTran… 0 Auto      Stopped  OK      2013-Exchange          
    1068      MSExchangeUM    0 Auto     
    Stopped  OK      2013-Exchange          
    1068      MSExchangeUMCR  0 Auto      Stopped  OK      2013-Exchange          
    0         NetMsmqActiva…  0 Auto      Stopped  OK      2013-Exchange          
    1068      NetTcpActivator 0 Auto      Stopped  OK      2013-Exchange          
    0         NetTcpPortSha…  0 Auto      Stopped  OK      2013-Exchange          

    With this sort of startup, of course Exchange is not going to work well, and those part of Lync that rely on Exchange will fail too. I’ve been seeing situations similar to this for a very long time. The solution is, as I mentioned in the earlier article pretty simple – use a PowerShell script to deal with this.

    In my case I have a script that starts up all the VMs from scratch, as described in a recent blog post here: http://tfl09.blogspot.dk/2013/10/starting-up-lync-test-drive-vm-farm.html/. In most cases, that script starts things up slowly enough that this sort of massive service start failure does not occur. Well, does not usually occur.

    I how have an updated pair of scripts that I run from my Hyper-V host that detects any of the relevant services that failed (and that are relevant), and does a manual start. Here’s the script I use to detect and correct non-starting Exchange components:

    #  Start services for Exchange In Lync Test Drive Lab
    #  Runs on Hyper-V Host

    # Set credentials
    $Username   = "Contoso\administrator"
    $Password   = 'pass@word1'
    $PasswordSS = ConvertTo-SecureString  -String $Password -AsPlainText -Force
    $CredC      = New-Object -Typename System.Management.Automation.PSCredential `
                    -Argumentlist $Username,$PasswordSS

    $conf = {
    $Donotrestart = @('RemoteRegistry', 'MSDTC', 'NetTcpActivator', 'HostControllerService')
    # get all the unstarted RTC services and start them.
    Get-WMIObject -Class win32_service   |
        Where {$_.startmode -EQ 'Auto'}    |
           Where {$_.State -NE 'Running'}  |
             Where {$Donotrestart -notcontains $_.name}}

    # Now run this on the Exchange VM
    Invoke-Command -ComputerName 2013-Exchange -ScriptBlock $conf -Credential $CredC | ft

    With this in place, I start up the labs, wait a few more minutes, then run this script to ensure that Exchange is all up and tickety-boo!

    The joys of large VM sets and PowerShell!

    Free Windows Server 2012 R2 Ebook

    I’ve just seen that Mitch Tulloch has published a nice new free e-book on Server 2012 R2. You can get a free version of the book in PDF, and in due course in .ePub and .Mobi format (these are not yet published).
    This MS web site says that the book provides you with an overview of the new features and enhancements added to Windows Server 2012 R2. The intended audience for this book is IT pros who deploy, manage, and maintain Windows Server workloads in data center, private cloud, and hosting provider environments.

    To get your free book, just navigate to the MS Press blog site at: http://blogs.msdn.com/b/microsoft_press/archive/2013/11/08/free-ebook-introducing-windows-server-2012-r2-technical-overview.aspx and download from there.
    Enjoy!

    Wednesday, November 13, 2013

    Lync Room System–A New Addition to the Lync Family

    With Lync slowly maturing, it’s taking on more and more roles. One such role, Lync for a conference room, has been delivered in the form of the Lyn Room System. It was announced earlier this year in a Lync Team Blog entry.

    The blog entry looks at some of the issue that made conference rooms more difficult for us poor users.

    Lync Room System consists of integrated hardware and software delivered by MS partners including:

    • High definition touch displays (1080p) for showing video and enabling collaboration. Lync Room Systems are available with 1 or 2 front of room touch displays depending on your room size
    • High definition video camera for capturing the room in full 1080p resolution
    • Wideband audio for clear sound from the room and to the room
    • Table-top touch meeting console to enable the meeting controller to manage the meeting without distracting the other attendees.
    • Lync Room System Edition software - a full Lync client optimized to bring the immersive meeting experience to a meeting room setting.

    Here’s a picture of one such room setup, with 2 touch screens and one camera from SMART:

    http://blogs.technet.com/cfs-filesystemfile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-88-54-metablogapi/2705.clip_5F00_image0024_5F00_0FE1E765.jpg

     

    I just noticed that super star Lync MVP Alan Jacobs has posted a nice slide deck up on Slideshare.com (http://www.slideshare.net/mucugl/mucugl-october-2013-everything-about-lync-room-system) which shows you pretty much everything you need to know about the LRS system!

    Technorati Tags: ,,,

    Tuesday, November 12, 2013

    Updated Lync 2012 Help Documentation

    I’m a very big fan of teams that do documentation well and update it on a regular basis. The Lync team do it well! The most recent update to the Lync help documentation was recently posted to http://www.microsoft.com/en-us/download/details.aspx?id=35405. This is a nearly 25MB file, but well worth it!  This download gets a.CHM file that contains all of the available Lync S3erve 2013 IT Pro documentation in the TechNet library. Happy Days!
    Technorati Tags: ,

    Monday, November 11, 2013

    Hello Resolve-DnsName, Goodbye NSLookup

    For several decades, I’ve used the NSLookup.exe command in DOS and Windows as a way of doing DNS troubleshooting. At one time, I needed it to verify basic domain lookup configuration, but Windows DNS makes it pretty simple to set domains up correctly. More recently, with products such as Lync, there is a need to have other DNS records validated, particularly SRV records that enable client auto-login etc.

    NSLookup is not bad – in a former life I actually read bits of the code. It’s a tool I know how to use, and like I tell my PowerShell class, if it isn't broken, don’t fix it. Fair enough, I suppose, but It’s not really very PowerShell friendly.

    As part of preparing my next Pluralsight Course, managing DNS with PowerShell, I’ve been playing with some of the new DNS Client cmdlets that come, in specific, for Server 2012 R2. One useful cmdlet is Resolve-DNSName.

    Resolve-DNSName does pretty much exactly what NSLookup did, direct from the command line, plus a bit more. The cmdlet, unlike NSLookup, is able to make use of LLMNR, NetBIOS (or not) and can turnoff recursion in answering a query.

    Here is some sample output:

    PS C:> Resolve-DnsName -type all reskit.org

    Name           Type TTL  Section    IPAddress
    ----           ---- ---  -------    ---------
    reskit.org     A    600  Answer     10.0.0.10

    Name      : reskit.org
    QueryType : NS
    TTL       : 3600
    Section   : Answer
    NameHost  : dc1.reskit.org


    Name                   : reskit.org
    QueryType              : SOA
    TTL                    : 3600
    Section                : Answer
    NameAdministrator      : hostmaster.reskit.org
    SerialNumber           : 26
    TimeToZoneRefresh      : 900
    TimeToZoneFailureRetry : 600
    TimeToExpiration       : 86400
    DefaultTTL             : 3600

    dc1.reskit.org A    3600 Additional 10.0.0.10

    [Srv1]: PS C:> Resolve-DnsName -Name srv2.reskit.org

    Name            Type TTL  Section IPAddress
    ----            ---- ---  ------- ---------
    srv2.reskit.org A    1200 Answer  10.0.0.31

    There are also switches for turning on or not DNSSec and EDNS, and can request any/all, or specific RR types. Long live Resolve-DNSName!

    Technorati Tags: ,,

    Deploying Lync with System Center VM

    I just noticed that Microsoft has now published a VMM template for deploying Lync 2013. You can get the templates here: http://blogs.technet.com/b/scvmm/archive/2013/11/07/lync-server-2013-service-templates-for-virtual-machine-manager-now-available.aspx.

    For more information on VMM’s Service Templates, in particular the template to launch Lync itself, see here: http://blogs.technet.com/b/privatecloud/archive/2013/11/06/introducing-lync-service-templates.aspx.

    The goal of the service templates is to provide an automated way to stand up these core productivity components allowing you to quickly build out dev/test and tenant environments either in a standalone manner or with all of the core Office Server components together. The first deliverable for Lync is a Lync Standard Server deployment that automates the creation and configuration of the Lync 2013.

    You can also get service templates for Exchange and SharePoint – see the above link for pointers!

     

    Technorati Tags: ,,

    Friday, November 08, 2013

    Backing Up Can Take a While

    I have a problem that is in common with a lot of IT Pros. I have a lot of data that I value and I want to keep it save. ALL forms of storage are flawless – disk die, SSDs, die, tapes die, tape drives die, CDs die, floppy disks die. So what to do?

    IN my case, my data is my collection of Grateful Dead, Jerry Garcia and a bunch of other music. The Dead stash takes up around 1.6 TB, with the Jerry and other music weighing in at around 1 TB. That’s a lot of music (and with around 1900 Dead shows, one of the larger around!). I do not want to lose that. The music has some interesting characteristics that may or may not be shared with other data storage scenarios. With music, each show or album is made up of multiple songs. As most of what I collect is lossless with two formats. SHN (or Shorten) and FLAC (Free Lossless Audio Codec). Typical GD shows range from 750MB to 1GB or so. Typical ‘song’ sizes are anywhere from 30/40MB to 120MB and sometimes more (and sometimes less). Once in my hands, these files are very much read-only!

    This data profile is different from many simple file servers with lots of very small documents. Most of which don’t change very often.

    The profile is also different from database servers where there are a few VERY big files (containing lots of bits of occasionally changing data). In some applications, like LYNC, you have several databases that need to be backed (and restored in case of failure).

    Given the varied nature of data usage, there are inevitably different approaches for backup.

    For my music collection, I have 4 big capacity USB-disks. One pair holds the master and are tethered to my main workstation where I update these as I can. The other, backup, pair are on the other end of my network. I have two scripts that use Robocopy to sync primary to backup. Over the years, I’ve been bitten badly by disks dying. So what I do is to wait till one of the disks begins to fail, and I replace it with a new drive. And even if it looks OK, I rotate every couple of years.

    Recently, the 2tb disks I used to for the GD stuff were filling up, so time to move up format, and I’ve not got my collection on new 4TB disks. As per the title, it took a while to do this copy. Here’s the Robocopy Log:

    image

    So, to copy my entire GD collection from one USB drive to another took a mere 30 hours. Not bad when you consider I’ve been collecting for 30 years.

    Technorati Tags: ,,,

    Lync Server 2013: Packaging, Licensing and Pricing

    Like all software vendors selling Enterprise software packages, the introduction a new version can bring changes to packaging, licensing and most importantly pricing. Lync 2013, the latest version of Microsoft's communication services product is no different.

    Directions on Microsoft have produces a nice paper on these topics. However, like many research houses, the report is behind a pay-wall at http://www.directionsonmicrosoft.com/licensing/30-licensing/4553-lync-server-2013-packaging-licensing-and-pricing.html/

    The good news is that you can get a guest member logon for this site which gives you 2 months use of the site for free. Full membership is US$1645 per year. This is way out of my league although the information would indeed be useful. I’ve signed up for a guest membership and we’ll see how that goes.

    Technorati Tags: ,,

    Thursday, November 07, 2013

    Zero Day Attacks on Lync 2013 Client?

    News today of some new vulnerabilities in certain version of Lync, The Microsoft disclosure page on these attacks at https://technet.microsoft.com/en-us/security/advisory/2896666, and were described by ZD at: http://www.zdnet.com/zero-day-attacks-hit-windows-office-lync-7000022836.

    The first version of the ZD article seemed to imply that Lync was suffering Zero Day attack, but it was later amended to say that in the wild attacks have only been seen, SO FAR, against Microsoft office. These vulnerabilities ‘only’ allows remote code execution but that’s enough to really mess up someone’s day, to say the least.

    Microsoft’s disclosure page includes details on workarounds (to mitigate against the attacks) and a ‘Fix It’ link to automate these. I’ve not yet seen hot fixes to resolve the problem, but will be anxiously looking for them and plan to implement them quickly!

    Technorati Tags: ,

    Wednesday, November 06, 2013

    Replacing or Integrating Cisco with Microsoft Lync

    I found an interesting and hopefully useful on-Demand Webinar with a PowerPoint presentation this morning: Microsoft Lync: Integrating with or Replacing Cisco. You can download the slides from: http://www.slideshare.net/perficientinc/lync-integratingciscowebinaroctober. The Webinar itself is on: http://www.perficient.com/Thought-Leadership/On-Demand-Webinars/2013/Microsoft-Lync-Integrating-with-or-Replacing-Cisco.

    The webinar was held on June 13 this year, looks at the best ways to leverage Lync in addition to an existing Cisco infrastructure. Based on years of integration experience with Microsoft UC and Cisco, the webinar shares best practices and recommendations for getting the most out of Lync. This event gave attendees clear ideas of what works, what doesn't, and how best to bring UC to your organization.

    Around 1/3 of the slides are advertising for Perficient, but the rest of the presentation looks pretty straight forward and it provides some good information.

    Hope it’s useful!

    Technorati Tags: ,,

    Tuesday, November 05, 2013

    Lync Server 2013 now Supported on Windows Server 2012 R2

    When Lync Server 2012 shipped, it did not support Server 2012 R2. Naturally since at the time of Lync’s release, Server 2012 R2 had not been released. The UC team’s approach has pretty much always been to test, then support later OSs as appropriate.  The late October 2013 Cumulative update (see http://support.microsoft.com/kb/2809243 for details) now supports Server 2012 R2. Yeah!

    Like all Lync CU’s you need to do the update carefully and as directed. In a large enterprise, you want to do the updates in such a way as to ensure you maintain service, especially if you are running Enterprise Voice where any downtime, even announced in advance, are not considered a good thing by the users.

    In a large enterprise environment, with multiple Front End servers, Lync organise those servers in to upgrade domains, And upgrade domain is, in effect, a set of Front end servers that can be upgraded while the pool remains able to serve users. You upgrade one upgrade domain at a time. This is great as you can upgrade whilst still delivering a service. Of course, if you take several servers out of commission all at once, the pool can function but at a degraded level of performance. So it’s probably best to schedule upgrades at times of light production load to avoid issues with temporary loss of performance.

    I’m pleased that this is now supported – I want to re-build my internal lab to use Server 2012 R2 and have Lync integrate with the rest of my testing lab.

    Technorati Tags: ,,

    Monday, November 04, 2013

    Centralised Logging in Lync 2013

    One of the great feature of Lync (and for that matter, OCS too!) is the ability to do comprehensive debug logging. Pretty much, if there's any sort of activity happening in Lync, you can log that activity to help debug issues. For OCS, the ability to see the SIP traffic, on the wire was fantastic (with Wireshark you saw nothing useful as all the traffic was encrypted).  I have on many occasions used this logging (and the SIP Snooper tool) to work out what’s going wrong,

    With Lync 2013, Microsoft has improved this system significantly, and we now have the Centralised Logging feature. In earlier versions, you had to run the debug logging on each machine independently which made tracing things across machines (e.g. edge, to director, to pool server to client etc.) much more difficult. With centralised logging those issues are a thing of the past as logging can now be done in a centralised fashion (I guess the clue is in the name!).

    One issue, for some admins, is that the CLS is based on the use of PowerShell cmdlets or using CLSController.exe. The Lync MVP community, particularly Randly Wintle and James Cussen, had the great idea of making a GUI interface. James took the earlier Lync Preview based tool and has created a much improved version.

    For more information, and to snag a copy of this cool tool, you should visit James’ blog: http://www.mylynclab.com/2013/04/lync-2013-centralised-logging-tool.html. I don’t know about the legalities of doing it, but adding this tool to the Lync 2013 Resource Kit would be a really great idea. Nice job James!

    Sunday, November 03, 2013

    Learning More About Lync

    Lync 2013 is a rich but complex product. It’s wealth of features encompass many roles and include many services and servers. Unless you have the luxury of a couple of weeks in a classroom (taking for example the Microsoft official courses), learning it all can be tough. If you are a busy IT Pro with a bucket load of fires to put out every day, then tough becomes an understatement.

    Fortunately, Microsoft has provided some great training material over on MSDN’s Channel 9 subsite: http://channel9.msdn.com/Series/Lync-2013-Ignite. This site has a number of videos that cover all manner of Lync features. Some of these talks cover topics that, while important in production as perhaps not as well covered in the MOC material as some might need. For example, the Identifying Critical Support Dependencies for Lync Server video provides a good look at “the often overlooked dependencies that underpin a Lync Server solution”.

    The videos differ widely in length with some being just half an hour, while others are nearly 2 hours long. That being said, the videos can be viewed on line or downloaded in a variety of formats which include MP3 (Audio only), MP4 (for iPod,iPad and PC), and WMV. The MP4 and WMV formats come in different resolution which is useful!

    Technorati Tags:

    Saturday, October 26, 2013

    Starting up the Lync Test Drive VM Farm

    I wrote recently about the Lync 2013 Test Drive set of Virtual Machines. These are pretty neat, although they are a large download, and expand to a very large size. But worth it for the ease of use. In testing it, I found it uses a lot of RAM, so if you want to run all of the VMs at once, I found I needed 32 GB of RAM. But even then, starting up 7 VMs even on my Precision 7400 box takes a lot of time.

    If you just start all the VMs at once, they all grind very slowly to life. It seems to take 15-20 minutes to get it all started – I usually start the VMs and go off and make coffee! A big downside to this approach, and one I regularly confront in the classroom, is that Exchange, Lync and the Certificate Services sometimes do not start or start fully. It tends to be the Lync and Exchange services that fail to start. And while the AD Certificate Services starts up OK, it can end up unable to issue a certificate if requested by Lync’s installation package.

    Now this is NOT new. I’ve been seeing it in my classrooms since OCS 2007 days. There are a couple of simple solutions to this problem (and probably more):

    First, just start VMs up more slowly – waiting a few minutes between starting each one. If you wait until you can login to the DC, for example, before starting anything else, issues like authentication from remote machines (e.g. the remote machines wants to take advantage of the DC before the DC’s netlogon service is fully up and able to  accommodate) just go away. Sufficient staggering of the startup of each VM eliminates the risks of services not starting.

    Second, you could create a simple start-up script for each machine that slept for, say 10-15 minutes, then started any un-started  services. Once you create the script you could then apply it using local group policy. That way when the three systems start, they wait (till the server calms down a little after boot) and just start any services that do not run. This is more effort than the first.  I’ll post that script in another blog post.

    So here’s my script that starts up the VM farm:

    # Script to start the Lync Test-Drive VMs
    Write-Host " Starting Lync Test Drive Farm on $(hostname) at: $(Get-date)"
    Ipmo Hyper-V

    # First start up Dc, and wait for 90 seconds

    Write-Host "Starting DC1 at $(get-date)"
    Start-VM -name '2013-DC'
    Start-Sleep 90

    # Now startup Lync FE and wait 7 minutes then start the mgt service
    # and wait 4 more minutes
    Write-Host "Starting Lync-FE at $(get-date)"
    Start-VM -Name '2013-Lync-FE'
    Start-sleep 300

    Write-Host "Starting Lync-Mgt at $(get-date)"
    Start-VM -Name '2013-Lync-MGT'
    Start-sleep 240

    # Startup Exchange and wait 5 minutes
    Write-Host "Starting Exchange at $(get-date)"
    Start-VM -Name '2013-Exchange'
    Start-sleep 300

    # Startup TS then SharePoint and wait 2 minutes
    Write-Host "Starting ts at $(get-date)"
    Start-VM -Name '2013-TS'
    Start-sleep 120

    Write-Host "Starting Sharepoint at $(get-date)"
    Start-VM -Name '2013-SharePoint'
    Start-sleep 120

    # Lastly Startup WAC
    Write-Host "Starting Wac at $(get-date)"
    Start-VM -Name '2013-WAC'

    # All done
    "-" * 50

    Get-VM -Name 2013*

    # and where are we?
    $Username   = "Contoso\administrator"
    $Password   = 'Jasmine1'
    $PasswordSS = ConvertTo-SecureString  -String $Password -AsPlainText -Force
    $CredC      = New-Object -Typename System.Management.Automation.PSCredential `
                 -Argumentlist $Username,$PasswordSS


    Get-WMIObject -Class Win32_Service -computer 2013-Lync-FE -Credential $CredC |
        where {($_.startmode -EQ 'Auto') -AND ($_.Name -Match "rtc")} | ft -AutoSize

    Get-WMIObject -Class Win32_Service -computer 2013-Exchange -Credential $CredC |
        where {$_.startmode -EQ 'Auto'  -And $_.Name -match 'MSExchange'} | ft -Auto

     

    The results of running this script, which takes around 20 minutes, look like this:

    PSH [C:\foo]: C:\builds\Dropbox\Lync Test Drive scripts\Start-TestLab.ps1
    Starting Lync Test Drive Farm on Cookham12 at: 10/25/2013 20:51:32
    Starting DC1 at 10/25/2013 20:51:32
    Starting Lync-FE at 10/25/2013 20:53:03
    Starting Lync-Mgt at 10/25/2013 20:58:05
    Starting Exchange at 10/25/2013 21:02:06
    Starting ts at 10/25/2013 21:07:08
    Starting Sharepoint at 10/25/2013 21:09:10
    Starting Wac at 10/25/2013 21:11:13
    --------------------------------------------------

    Name            State   CPUUsage(%) MemoryAssigned(M) Uptime   Status           
    ----            -----   ----------- ----------------- ------   ------           
    2013-WAC        Running 1           1024              00:00:00 Operating normally
    2013-TS         Running 1           2048              00:04:10 Operating normally
    2013-SHAREPOINT Running 0           2048              00:02:07 Operating normally
    2013-LYNC-MGT   Running 0           564               00:13:14 Operating normally
    2013-LYNC-FE    Running 3           4096              00:18:15 Operating normally
    2013-EXCHANGE   Running 1           4096              00:09:12 Operating normally
    2013-DC         Running 0           1174              00:19:47 Operating normally

    ExitCode Name           ProcessId StartMode State   Status
    -------- ----           --------- --------- -----   ------
           0 MSSQL$RTC           1648 Auto      Running OK   
           0 MSSQL$RTCLOCAL      1760 Auto      Running OK   
           0 RTCASMCU            2728 Auto      Running OK   
           0 RTCATS               692 Auto      Running OK   
           0 RTCAVMCU            1200 Auto      Running OK   
           0 RTCCAA              4028 Auto      Running OK   
           0 RTCCAS              4252 Auto      Running OK   
           0 RTCCHAT             4504 Auto      Running OK   
           0 RTCCHATCOMPL        4556 Auto      Running OK   
           0 RTCCLSAGT           4612 Auto      Running OK   
           0 RTCCPS              4828 Auto      Running OK   
           0 RTCDATAMCU          4184 Auto      Running OK   
           0 RTCIMMCU            5288 Auto      Running OK   
           0 RTCMEDSRV           5784 Auto      Running OK   
           0 RTCPDPAUTH          6160 Auto      Running OK   
           0 RTCPDPCORE          7384 Auto      Running OK   
           0 RTCRGS              6424 Auto      Running OK   
           0 RtcSrv              6756 Auto      Running OK   
           0 RTCXMPPTGW          6616 Auto      Running OK   

    ExitCode Name                         ProcessId StartMode State   Status
    -------- ----                         --------- --------- -----   ------
           0 MSExchangeADTopology              2756 Auto      Running OK   
           0 MSExchangeAntispamUpdate          2956 Auto      Running OK   
           0 MSExchangeDelivery                3020 Auto      Running OK   
           0 MSExchangeDiagnostics             1380 Auto      Running OK   
           0 MSExchangeEdgeSync                3116 Auto      Running OK   
           0 MSExchangeFastSearch              3192 Auto      Running OK   
           0 MSExchangeFrontEndTransport       3352 Auto      Running OK   
           0 MSExchangeHM                      1600 Auto      Running OK   
           0 MSExchangeIS                      3504 Auto      Running OK   
           0 MSExchangeMailboxAssistants       3612 Auto      Running OK   
           0 MSExchangeMailboxReplication      4080 Auto      Running OK   
           0 MSExchangeRepl                    2712 Auto      Running OK   
           0 MSExchangeRPC                     3708 Auto      Running OK   
           0 MSExchangeServiceHost             4148 Auto      Running OK   
           0 MSExchangeSubmission              4300 Auto      Running OK   
           0 MSExchangeThrottling              4516 Auto      Running OK   
           0 MSExchangeTransport               6392 Auto      Running OK   
           0 MSExchangeTransportLogSearch      4660 Auto      Running OK   
           0 MSExchangeUM                         0 Auto      Stopped OK   
           0 MSExchangeUMCR                    2928 Auto      Running OK   

    The use of this script does mean it takes 20 minutes to start up the farm, but that’s time I’d probably spend any way waiting for the VMs to start up and then troubleshoot things to fix what is not working. Since I tend to work with these VMs for several hours at a time, the overhead of the script is minor, and I can easily work around the 20 minutes it takes!

    Note also that we looked into the two known troublemakers and saw that all but UM was up and running. Given I’m not yet played with the UM part of the VMs, I’m OK with this for now. Maybe a bit more tweaking.

    If you use the script above, test it out in your environment and adjust the sleep times to reflect how long things take on YOUR hardware.

    Thursday, October 24, 2013

    Replace PowerShell with the Command Prompt–But WHY?

    I get a customised Google News page which brings up, amongst other things, recent news about PowerShell. This is a nice way of keeping up to date with news specifically about PowerShell and other things I am interested in.

    This week, the applet I use to get news brought up an article entitled Replace PowerShell with the Command Prompt. I immediately clicked the hyperlink to discover details on how to change the Win+X Menu in Windows 8.1 back to Cmd.Exe.

    WHY??? I felt myself asking! WHY Why anyone actually want to go backwards. A bit like replacing Notepad with a link to Edlin (or VI) if you ask me. Almost all the traditional command line tools work perfectly in PowerShell. You use them with identical syntax and all that even if the output is just text and not objects they function just fine. A few applications use syntax that trips up PowerShell – but with the use of the the –% operator, you can continue to use the older syntax (as I describe in a Blog article titled Taming Wild Console Applications in PowerShell v3.

    If you are using Windows 8.1, you should know by now that PowerShell is the future (and present!). Get used to it and learn to love it. And please, resist the temptation to go back!

    Technorati Tags:

    Wednesday, October 23, 2013

    The Root-Servers vs. the RootServers–a DNS mystery

    I was working today with Nslookup running against the root servers to see what responses I got, and what the TTL times were for records retrieved were.  When I first tried, I got some really weird results:

    image

    This really didn’t make any sense – since when did the responsible person for the root servers on the internet devolved to buydomains.com? Then I noticed the problem. Look carefully at the SOA I was trying to resolve. Retying the command with a strategic adjustment yielded success:

    image

    So the mystery was easy – my typing stinks. But if I can make that mistake, no doubt others might.

     

    Technorati Tags:

    Wednesday, October 16, 2013

    Lync Server Test Drive–Discovering SQL Servers

    In a recent blog article, I wrote about the Lync Server Test Drive Virtual Machines that Microsoft had put up for use. This is a huge set of VMs, but it all does work. With the VMs up and running, I can now begin to write some scripts against this VM set.

    Today’s script, Get-SQLServer2.ps1 uses the SQL Server SQL Management Objects (SMOs) to discover the SQL instances in use on the network (the subnet used by the Test Drive set). The link points you toward the  actual script which you can download and use!

    The core of the script is accomplished by one line:

    $SQLservers=
    [System.Data.Sql.SqlDataSourceEnumerator]::Instance.GetDataSources()

    This statement used the SMOs to enumerate the instances of SQL on the local net. However, $SQLServers is returned not as an array but as a Data Table containing Data Rows (one per instance). So in order to convert this back to being AN array of Data rows, I use this logic:

    $Srvs = @()
    Foreach ($srv in $SQLServers) {
    $srvs += $srv
    }

    Once I have these instances in an array, I can print them out like this:

    "There are {0} SQL Server(s) on the Local Subnet" -f $Srvs.count
    $Srvs | Select ServerName, InstanceName, Version | Format-Table -AutoSize

    So as you can see from the output, there are a total of 7 instances of SQL server in the Test Drive network.

    The joys of PowerShell and SMOs. I’ll be both documenting SMOs more here as well as diving down into the Lync Databases in coming articles.

     

    Saturday, October 05, 2013

    Lync 2013 PowerShell Module–An Overview

    In an earlier article, I wrote about the new Lync 2013 Test Drive. This is a set of 7 Virtual Machines that implement Lync for you to play with. These VMs enable you to test out and work with Lync Server 23013. SharePoint is also included in the Test Drive – although that’s probably a subject for a separate blog post or posts.

    So what’s the first thing to look at? Well, for me, as a PowerShell guy – the first thing is obviously the Lync module. You can get the Lync Module either by using the Lync Console shortcuts provided when you install Lync. Alternatively, you can use it directly from a PowerShell console running on any system that has the Lync tools loaded.

    You import this module by using the Import-Module cmdlet. With PowerShell V3, you do not really need to import the module explicitly, as by using any cmdlet, you get the module auto-loaded for you. And of course, you can turn this auto-load feature off should wish to. The Test Drive VMs all utilise PowerShell V3.

    When I load the Lync module, the first thing I do is to look at how many cmdlets are contained in the Module. That was easy, although I was very surprised at the result:

    image

    As you can see by following the red arrow – there are 739 cmdlets in the Lync module. Now I’m not sure what YOU think of this, but my immediate reaction is astonishment. That’s a lot of cmdlets to learn. The good news is you can use PowerShell’s discovery features to help.

    First, let’s look at the verbs that are used in these cmdlets. I find the verbs give a feeling of what sorts of actions we are expecting the cmdlets to perform. I use a simple one-liner to work out what verbs are used in Lync Cmdlets – which looks like this:

    image

    As I count it, that makes for 35 verbs, although 12 verbs are used just once, and 5 are just used twice. Interestingly, just over 3/4 of all the cmdlets use Get, Set, New or Remove which isn’t too surprising.

    A more interesting bit of output would be the nouns used in the cmdlets. The nouns represent the different types of objects that you are going to manage with a module. While verbs, in cmdlet names, are generic and standardised, it’s the nouns that are task specific.

    In the case of Lync, there are a large number of different nouns:

    image

    TWO HUNDRED EIGHTY FOUR nouns. If your jaw dropped with the number of cmdlets, there are 284 separate objects which are used as the target of one or more Lync Cmdlets. This is also a pretty big job in terms of the documentation – since each of these cmdlets and the objects they interact with need documentation.

    So how do you get started?  In some coming blog posts, I’ll be taking a look at the various sub-sets of cmdlets and introduce them to you!

    Wednesday, October 02, 2013

    Lync Server Test Drive: Pre-Configured Virtual Machines

    One of the things, missing until recently, that Lync customers have wanted is a set of demonstration VMs to get a feel for Lync, without the pressure of having to install it themselves. Lync installation is a very complex process and for basic evaluation – in my case just testing small features (PowerShell related of course) would have meant a huge amount of work to get all the bits and bobs loaded and configured. Like so many, I just do not have time.
    A recent mail form those very nice people in the Lync product group, I found Microsoft has now released just what I and others were asking for. The Lync Server Test Drive is a set of seven Virtual Machines: A domain controller, and Exchange Server, a Lync FE Server (running Lync SE), a Management Server, a SharePoint server, a WAC server (for conferencing) and finally a system for development. You don’t need all of these VMs, and you can download them in sets. There are three sets:
    Set 1 – which you can get from http://www.microsoft.com/en-gb/download/details.aspx?id=40266, contains:
    • DC – a configured DC in the Contoso fictional domain
    • Exchange – a configured Exchange 2013 server configured with almost 250 accounts!
    • Lync Front End – running Lync 2013 Standard Edition
    • WAC – for conferencing
    Set 2, which you can get from: http://www.microsoft.com/en-us/download/details.aspx?id=40267, contains 
    • Lync Management server
    • SharePoint Server
    Finally, Set 3, which you can get from: http://www.microsoft.com/en-gb/download/details.aspx?id=40265, contains:
    • A TS server, which you can used to develop Lync based applications and a bit more!
    Each of these sets comes as several compressed files, which are huge. The 62 files that make up the raw download take up just under 46GB of disk space. Expanded and running, the VMs take up a whopping 175 GB. That’s over 220GB of disk space. You could download a bit, expand the downloads then delete the downloads if you were on the short side for disk storage – but you’ll still need 175 GB of disk for the vms themselves.
    Here’s what I see after importing the VMs:
    image

    The VMs also require a pretty hefty Hyper-V host, particularly given the Memory needs.  In order to get these running, I upgraded my Precision w7500 server box to 32 gb of ram. I would have bought more, but the 8GB sticks of Ram are pretty pricey – and besides, 32 GB if 4 times the largest ram I’ve ever installed
    In operation these VMs are not what I’d call fast. If nothing else, this confirms that to really run Enterprise software like Lync  you need RAM, processing power and fast disks! As in most classroom scenarios, starting the VMs all at once means a lot of services do not start cleanly – but it’s nothing that a bit of PowerShell can’t quickly remedy. Having said that, once it’s all up and running, things seem to work well.
    It’s great to have a fully working set of VMs I can now play with! I hope to generate some more cool scripts soon!

    Thursday, September 05, 2013

    Learning More About PowerShell at PowerCamp–Oct19/20

    I’ve written before about the upcoming PowerShell PowerCamp event, being held Oct 19tyh and 20th 2013 at Microsoft’s Cardinal Place Offices in London. To summarise, PowerCamp is 2 action-packed days of PowerShell – taking you from 0 to as fast YOU can go in two days. It’s a great way to get over that basic learning curve.

    Each time I run one of these events, some of the wider PowerShell community kick in and I get some extra goodies for the attendees. So far, I have two offers for you:

    First my good friends at Pluralsight are offering each attendee a free 30-day trial of Pluralsight's full online training portfolio. For you IT Pros, this is more relevant than ever since Pluralsight has now bought Train Signal, leaders in the IT Pro online training space. There is an awesome amount of content, PowerShell and non-PowerShell in the combined catalog.

    Secondly, those very nice people over at MVP Systems have donated some cash which will pay for at least some of the coffee at the event. I’ll be handing out Costa gift cards thanks to MVP Systems, which will get you a couple of Lattes – which you may need in order to stay focused!

    I am still looking at having a special guest to add some value – I’ll be able to announce that soon.

    So if you think it’s time to FINALLY learn PowerShell – sign up to day. The cost and sign up details are here: http://www.tfl09.blogspot.co.uk/2013/07/powershell-powercamp-2013-coming-soon.html.

    I look forward to seeing you there.