PowerShell Script Analyzer

If you write PowerShell scripts or modules, you need to pay attention to this!

As part of the many improvements and updates that Microsoft has been working on for Windows 10 and PowerShell 5, they created a new module that is very important for the PowerShell ecosystem to take note of.  It’s so important, that you need to pay attention to it even if you’re not using PowerShell 5 much yet.

PowerShell Script Analyzer (PSScriptAnalyzer) is a module whose intent is to provide a detailed analysis of PowerShell script and module files.  This includes ps1, psm1, and psd1 files.  In computer programming, this is referred to as a linting tool.  A linting tool is simply a piece of software that identifies and flags suspicious usage of the software that is identified through static analysis of the source code.  PowerShell Script Analyzer performs this task by analyzing whatever ps1, psm1, and psd1 files you tell it to and using a set of built-in and user-defined rules that each identify specific undesirable or suspicious usage of the PowerShell language in those files.

This module is very important because any module that is published to the PowerShell Gallery in the future will automatically be analyzed with this module.

When PowerShell Script Analyzer was originally exposed to the community, it was as a built-in module that ships with PowerShell 5.0.  That was useful, however the PowerShell Script Analyzer team wanted to get more community involvement with this module.  To achieve that goal, they pulled the module from the April preview of PowerShell 5.0 and made it available as open source on GitHub instead (hooray for open source!).  That was a step in the right direction, but it still required PowerShell 5.0 to function, and if you’re anything like me, you still spend most of your time in PowerShell 3.0 or 4.0.  Since it’s open source though, that opens up some new possibilities, so recently I forked the project on GitHub and added downlevel support for PowerShell 3.0 or later.  I have a pull request to have this integrated into the main project that is currently being reviewed, so hopefully in a little while this PowerShell 3.0 support will be integrated into the main project and available on the PowerShell Gallery.  In the meantime you can find my fork here, and you can download the module built from that fork here: PSScriptAnalyzer for PowerShell 3.0 and later.  Now that this module includes support for PowerShell 3.0 or later, more community members can participate and provide feedback on this important module.

You should immediately start using the PSScriptAnalyzer module to perform static analysis of anything that you share with the community so that what you publish is clean.

Once you have this module on your system, you probably want to know how to use it.  This module currently includes two PowerShell cmdlets: Get-ScriptAnalyzerRule and Invoke-ScriptAnalyzer.  Get-ScriptAnalyzerRule will return a list of the rules that are in use by Script Analyzer to perform its analysis of your script files.  At this time there are 7 informational rules, 26 warning rules, and 4 error rules.  Invoke-ScriptAnalyzer will analyze one or more files that you identify using the rules that are in use by Script Analyzer, notifying you of any infractions to those rules so that you may correct them.

The final list of rules that are used in the RTM release of PSScriptAnalyzer will be decided upon based on community feedback.  Additionally, how those rules function is dependent on community feedback, and the list of rules that will ultimately block a module from being published to the PowerShell Gallery will also be chosen based on community feedback.

You should provide feedback to the PSScriptAnalyzer team about the rules that it uses, identifying bugs of course, but also identifying rules that shouldn’t be rules, rules that are missing, rules that have an incorrect severity, and any other changes that should be considered regarding the rules that are used.

If you have feedback to share, you should do so on the Issues and Discussions page of the PowerShell Script Analyzer project.  If you haven’t clicked on that link already, do so now.  You’ll see that there are a lot of discussions that are currently ongoing, and issues that are already being raised.  Given the importance of this module for the PowerShell community, if you have feedback to share, share it!  The PowerShell Script Analyzer team needs it.

The PowerShell Script Analyzer team is so eager to engage with the community that they have even started hosting live update meetings to the public.  These are currently planned for every three weeks, but that schedule may change as required.  The next meeting is currently scheduled for Tuesday, May 26th at 2PM EDT (link to calendar invite).  It would also be worthwhile to keep an eye on the Twitter accounts of PowerShell MVPs (you can find me here: @poshoholic) as well as on the PowerShell Team Blog and the PowerShell Slack channel (more on that in another post) for further announcements about these meetings.

With all of those details out of the way, you may be wondering how you can use this module.  That’s a good question, because documentation hasn’t been published for this module yet.  The module is very easy to use, but at first the information it provides can be very overwhelming so you should take small steps when you’re just getting started.  I’m going to use the remainder of this blog post to walk through what it is like using this module.  Don’t be intimidated.  This module is still under development, and the details you uncover when you start using it can be a little daunting.  If you’re having a hard time, reach out to the rest of the community for feedback and someone should be able to help you through it.

Remember, this module will be analyzing files that have not previously been analyzed, ever, identifying places where you might want to improve those scripts, so at first it may seem very noisy.  Also keep in mind that some of the things it identifies are completely benign – this is where community feedback comes in, so that we can help steer the team towards a final set of rules that really makes sense.

As an example, I’m going to use PSScriptAnalyzer to analyze my HistoryPx module.  First, I’ll change the current location to the root of my HistoryPx module (On my system I simply cd into Modules:\HistoryPx).  Then once I’ve done that, I’ll run an analysis on the psm1 file, by invoking the following command:

Invoke-ScriptAnalyzer -Path .\HistoryPx.psm1

Here’s what the results of that command look like:

image

This shows me that according to PSScriptAnalyzer, I have 8 rules that are being broken, and each of these rules has a severity of warning.  Now that I have some output, I need to review what it is telling me to see if I have anything that I actually need to change.  Here’s a breakdown of what these rules are trying to tell me:

The first two warnings are based on a rule that is called PSAvoidGlobalVars.  That rule simply indicates that you shouldn’t use global variables.  In HistoryPx, I refer to the $Error variable, and I use $global:Error to do so.  In this case, the warnings are benign, because the rule is too strict.  It should actually check to see if I am using non-builtin global variables, not global variables in general.  That is my opinion at least, and since it doesn’t do that right now, I’m going to open an issue with the PSScriptAnalyzer team on GitHub using the link I provided earlier (copied here).  A quick search revealed no open issues related to PSAvoidGlobalVars, so I opened one (here).

While typing the rest of this blog post, the PSScriptAnalyzer saw the issue I logged and responded thanking me for reporting it and indicating they would fix it soon.  This type of responsiveness makes supporting them and contributing to this module an absolute pleasure!

The third warning comes from a rule called PSAvoidUsingPositionalParameters.  When you share scripts, using positional parameters is discouraged because the person reading your script may not know what parameter is being used.  To address this problem, you should always use named parameters in your scripts.  PSScriptAnalyzer did its job by identifying where I had left out a positional parameter, so I need to fix that.  The warning indicates which file and what line number were being analyzed when the warning was found, so I simply open up HistoryPx.psm1, make the change by adding the missing “-Message” named parameter, and then move on to the next warning.

Warning number 4 indicates that I shouldn’t use the trap statement.  I use the trap statement in script modules I write because it ensures that terminating errors are properly treated as terminating errors if they are raised while the module is loading, which ensures that the module does not load in a semi-functional or broken state.  Therefore, this warning is benign for me and another issue I need to open with the PSScriptAnalyzer project (which I did, here).

Note: if you do come across something where you feel you need to open an issue, search the Issue page using the Filter box for the rule name and see if the issue has already been posted first.  If so, contribute by adding any comments you want to share to that issue rather than opening a new issue.  That will help the PSScriptAnalyzer team decide what to do with these issues once they are opened.

Moving along, warnings 5 through 7 all come from the PSAvoidUninitializedVariable rule, which identifies that I haven’t initialized a few variables before using them in my psm1 file.  However, that rule only identifies when variables are initialized in the same file – it does not identify when variables are initialized elsewhere, and in this case, as with all of my modules, I initialize these variables in a snippet that this module uses, so the warning is benign.  For these warnings, I can open another issue about the rule, but I’m a bit of an exception in this case.  Alternatively I can suppress the warnings if they are truly benign and not considered a bug by adding a System.Diagnostics.CodeAnalysis.SuppressMessageAttribute to my script module file.  For example, if I add this to the top of my psm1 file, warnings 5 through 7 go away:

[Diagnostics.CodeAnalysis.SuppressMessageAttribute(‘PSAvoidUninitializedVariable’, ”)]
param()

This suppresses that rule in the current file for all variables.  I can suppress it for a single variable by replacing the empty single quotes with a variable name in single quotes, but that only suppresses the rule for one variable.  From what I can tell there is no way for me to suppress the rule for multiple variables (wildcards are not supported, and if I use multiple attributes, the last one I use wins).  There are some obvious bugs/design issues with this right now, but the point is, you should be able to suppress rules that you know you can safely ignore.

Be careful when you suppress rules.  If you suppress a rule, you want to suppress it in a minimalistic fashion, so that you still get the benefit of that rule in other places.

In this case, I’m not sure what the right action is, but the rule itself has issues, so I decided to open up an issue as a discussion topic on GitHub (here).

If you feel something is wrong but you don’t have a bug to log, opening a discussion on the Issue page is a great approach to take.

With that out of the way, I’m on to the last warning that was raised for my HistoryPx module: PSUseDeclaredVarsMoreThanAssignments.  This warning is nothing but confusing for me.  It is being raised because PowerShell Script Analyzer thinks I’m doing something wrong when I assign a script block to a property on a variable that it thinks is not initialized.  That would be wrong if the variable was actually not initialized, but the warning in this case seems simply like a bug, so I’m logging it (here).

At this point, I have passed through all the warnings generated by the analysis, made one change to correct one of them, and started logging some issues to deal with the others.  As development continues on PSScriptAnalyzer, this scale should tip dramatically to the point where you have more correctible warnings/errors for your scripts and much fewer issues to log.  For now though, it is a work in progress, but I suspect that over the next little while you’ll see a lot of improvements to address the issues that are being identified in the community.

With one file done, I can now check another file, or run analysis recursively over my entire module.  To perform recursive analysis, you would run this command from your module root folder:

Invoke-ScriptAnalyzer -Path . -Recurse

That will recursively analyze all files in your module so that you can get a high level view of everything that needs to be corrected.  The goal here is simple: continually fix the issues over time so that when you run this command recursively, you only see new issues that pop up (or ideally, no issues at all).  That will be the best way for you to maintain a high quality for any modules and scripts that you want to share with the community.

There are more things you can do with this module (such as create your own rules), but for now I just wanted to give you a taste of what it is like, and how the feedback process works so that you can start giving it a try and participating in the community effort to steer this in the right direction.

I hope to see you at the PowerShell Script Analyzer Community Meeting next Tuesday!

Kirk out.

Hands-on Workshop at the 2013 PowerShell Summit

In my last post I hinted about more news coming soon for the 2013 PowerShell Summit.  In addition to the fantastic list of sessions that attendees will be able to attend, we also have a special event lined up for the last day of the event.  On Wednesday, April 24th, for the entire afternoon attendees will be able to attend a half-day Windows PowerShell scenario walkthrough, presented by the PowerShell Team.

The event will take place on April 24 from 1pm – 5pm.  During this time the PowerShell Team will work with attendees to collectively solve a problem from the ground up using many of the new features in Windows PowerShell 3.0 and Windows Server 2012.

Starting from base Windows Server 2012 images, you will walk through:

  • Writing a PowerShell script workflow to perform Server deployments
  • Creating a constrained endpoint that hosts only the deployment workflow
  • Delegate a set of credentials for the workflow to use
  • Exposing the workflow and it’s results through a RESTful web service
  • Using Windows PowerShell Web Access to manage the workflow

This is a BYOD event, so please don’t forget to bring your own laptop to follow along!

The facilities we have for the conference can only accommodate 50 people at this event.  To give everyone a fair chance to sign up, on December 1st we will send an email from EventBrite to everyone who has already purchased their conference ticket so that they can then sign-up for this free event.  If you want to have a chance to attend this workshop, you will have a much better chance if you buy your ticket before that date!

There will also be other activities that afternoon for those who cannot attend this event due to their travel plans, or if all of the workshop tickets are all gone. If you are able to stick around though and if you can attend this workshop, this should be a fantastic way to end the conference!

Kirk out.

PowerShell Summit Community Sessions List [Updated]

[Update: April 19, 2013] Important Note: Due to some last minute schedule changes for some of our speakers, several of the sessions below were replaced with other sessions.  To see the final list of sessions offered at the 2013 PowerShell Summit, please visit this page: http://powershell.org/wp/2013/04/19/powershell-summit-2013-conference-schedule/

After almost 100 people voted for the sessions they would like to see the most at the 2013 PowerShell Summit, the results are in!  These votes are for the sessions chosen by the community, and additional sessions from the PowerShell Team will be announced at a later date (as soon as I have them).

Below you will find the not-quite-finalized list of community sessions that will be included in the 2013 PowerShell Summit, sorted alphabetically by speaker.  It is not quite finalized because I am still awaiting final confirmation from a handful of speakers (those marked with an asterisk).  I will update this post as the final confirmations come in.

Thank you to everyone who submitted a session proposal for this conference.  There were a lot of great proposals this year, and I personally think no matter which sessions were voted for, the conference would have been fantastic.  Also thank you to anyone who took the time to vote for their favorite sessions.  Your votes really helped us a lot here, both for the upcoming 2013 conference and for conferences we’ll be planning in the future too!

If you would like to attend this conference so that you can learn from these great sessions and others that are not yet announced, and so that you can participate in the fantastic conversations that happen at such an event, you can purchase your ticket here: http://powershell.org/summit/.

Here is the list of sessions that made the final cut:

Speaker Title Description
June Blender Help for Help: A Help Authoring Deep Dive A comprehensive 400-level talk for module authors about authoring techniques for all types of Windows PowerShell Help, including About help and help for all command types, including cmdlets (and the MAML schema), scripts, functions, CIM commands, workflows (script and XAML), providers (including custom cmdlet help), and snippets. What you can and cannot do, and what’s worth doing when time and resources are short. We’ll cover online help, Updatable Help, and all the gotchas (HelpInfo XML, HelpInfoUri, HelpUri, CHMs), and I’ll share the scripts that I use to generate help files and verify the accuracy of parameters, parameter values, parameter attributes, GUIDs, and URIs.
James Brundage* The Powers of PowerShell Pipeworks Ever wanted to make PowerShell easy for others? Or realize that a simple script you have would be a great backbone of a business (if only you could charge for it)? PowerShell Pipeworks is a web platform built in PowerShell that makes is simple to build compelling web applications and software services in a snap. In this session, you will see: – How to use Pipeworks to store your data to the cloud – How to create a monitoring dashboard with Pipeworks – How to build a Facebook application with PowerShell Pipeworks – How to put a price tag on a cmdlet
Ian Davis Metaprogramming PowerShell PowerShell can be a fun and crazy language to use, but we can take it a step further with metaprogramming. By taking advantage of PowerShell’s flexible language features including dynamic scoping, modules, deferred evaluation, and ScriptBlocks, we can create simple and powerful applications applications leveraging metaprogramming idioms.
Ian Davis Automated Builds With PowerShell Automated builds are a critical part of application lifecycle management. PowerShell is very well suited for making this process easier. We have gone full circle with scripting builds and by leveraging PowerShell on the command line and building DSLs, our builds can be more robust and intuitive than ever.
Adam Driscoll Inside PowerShell: Abstract Syntax Tree Manipulation In this session we will take apart PowerShell. This session will highlight the new abstract syntax tree and node visitor API that is exposed in v3. An instrumentation profiler will be used as an example of how to traverse and manipulate PowerShell scripts from within the engine.
Adam Driscoll .NET Reverse Engineering with PowerShell In this session we will look at how to utilize ILSpy to decompile .NET assemblies and quickly access internal aspects of them using PowerShell. We will see how to easily expose private members for access and manipulation within scripts. Adam Driscoll
Jeffery Hicks Adding a GUI to PowerShell without WinForms Graphical PowerShell scripts seem all the rage these days. But most often that means using Windows Forms which can be very tedious to work with. But that is not the only game in town. Depending on your requirements there are a number of techniques you can use to add graphical elements to your PowerShell scripts. This session will explore how to create message boxes, input forms and more, all without a single Windows Form. If you are just getting started with writing PowerShell scripts, you’ll find these techniques simple to use, plus there will be plenty of sample code for all!
Don Jones Workflow Walkthrough It seems like everyone’s interested in v3’s new Workflow feature, so let’s do a quick walkthrough of building one from scratch. We’ll skip the usual “provisioning” example and go for something a bit more constrained, and perhaps real-world, where workflow’s unique features can really be put to solid use. This’ll also be an opportunity to discuss what workflow can and can’t do, and discuss some of the options and permutations of using it.
Don Jones Remoting Configuration Deep Dive What do you do when Enable-PSRemoting isn’t enough? Dig deeper. We’ll run through all of the major configuration scenarios, including how to use (and not abuse) TrustedHosts, how to set up an HTTPS listener (and use it), how to do non-domain authentication, how to enable CredSSP and configure it to be less than a major security hole, and more. Pretty much every possible Remoting config, we’ll cover. With detailed, step-by-step instructions!
Kirk Munro Creating Add-on Tools for PowerShell ISE PowerShell 3 includes a ton of improvements to the integrated scripting editor, PowerShell ISE. As great as PowerShell ISE is in this version, there is still a lot of room for improvement. Fortunately, Microsoft anticipated that they wouldn’t be able to do everything, so they extended their support for creating Add-on Tools for PowerShell ISE.In this session, the worlds first self-proclaimed Poshoholic and PowerShell MVP Kirk Munro will provide a soup to nuts demonstration of PowerShell ISE Add-on Tools, showing how you can create everything from simple menu extensions to feature rich windows that respond to ISE events and that are docked right inside of the ISE.

Technologies covered in this session include the PowerShell ISE object model, C#, WPF, eventing, Visual Studio 2012, and of course several core PowerShell features.

Kirk Munro Authoring PowerShell like a Poshoholic I’ve been using PowerShell for over 6 years. Blogging about it for over 5 years. Creating and managing products based on PowerShell for about that long as well, and writing a whole lot of scripts during the process. During this time I’ve come up with a trick or three to make that work easier. Some of these tricks are simple time savers, while others are ground breaking opportunities that just might change the way you write PowerShell.Come and join me in this session to get a bird’s eye view at some of the work I’ve been doing with PowerShell, as I talk about tips, tricks, and best practices while demonstrating some of the extensions I’ve written specifically to make authoring with PowerShell easier to do.

Topics discussed include proxy functions, WMI/CIM, Microsoft Office, DSVs, WiX, merge modules, type accelerators, and more.

Aleksandar Nikolic How to Delegate Administration and Customize PowerShell Session Configuration In this session you will learn how to customize PowerShell session configuration, and then use it to assign specific administrative tasks to the appropriate users and groups without changing the membership of local Administrators group. By using new Windows PowerShell and Windows Remote Management 3.0 capabilities we will enable dynamic creation of customized automation environments that users can access through the Windows PowerShell Web Access.
Aleksandar Nikolic Configuring Your Windows PowerShell Workflow Environment In this session you will learn how to set up your environment to run Windows PowerShell workflows. We will discuss different workflow configurations, how to prepare computers to run workflows, what is workflow session configuration and how to customize it. At the end, you will learn how to properly run your Windows PowerShell workflows.
Aleksandar Nikolic Build Your Demo Environment or a Test Lab with Windows PowerShell With Windows PowerShell 3.0 and the new Client Hyper-V available in Windows 8, it is so easy, and fun, to automate creation of your demo environment or a test lab infrastructure. You can easily convert ISO files to VHDs, deploy your VMs and configure networking and storage. Join us for this demo-heavy session to see all the steps.
Alan Renouf Creating a complex and reusable HTML reporting structure In this session I will show you the shortcuts and tricks picked up when creating a complex reporting structure with PowerShell, how a simple HTML output script grew to be a reporting structure which can adapt to give detailed, nicely formatted reports on any application or system that has a PowerShell interface, and even some that don’t!
Alan Renouf Practical PowerShell Integration from Bare Metal to the Cloud See how PowerShell can be used as the glue of the datacenter, take information from VMware, Cisco and Microsoft, Glue them all together and go from bare metal up to the cloud and beyond. Learn how PowerShell is now expanding to be the language of choice and how Microsoft and third party products can be tied together to create fantastic solutions.
Andy Schneider PowerShell and Source Control for the IT Pro Are you ever concerned about updating a script, having it break, and can’t remember what you changed. This is source control by an IT Pro for IT Pros. Come check out some best practices and lessons learned on how to incorporate source control as part of writing scripts. Learn how to have your code available via the web and easily accessed on multiple machines. We’ll take a look at using GIT to ensure your code is always up to date and you can always get back to where you were if you break something.
Andy Schneider PowerShell and Active Directory This session will provide a quick overview of different options to manage AD using PowerShell. It will quickly jump into some of the shortcomings of the MSFT provided Active Directory module and how to work around them, and even “fix” them using proxy functions and the new Default Parameter Set feature in V3.
Richard Siddaway CIM sessions The introduction of the CIM cmdlets and “cmdlets over objects” in PowerShell v3 provide new ways to work with WMI. In addition, they bring a new way to access remote systems ? CIM sessions. Analogous to PowerShell remoting sessions they provide a new flexibility when working with WMI and remote machines. This session will demonstrate:
– How to use CIM sessions against systems running PowerShell v3
– How to work with legacy installations of PowerShell v2
– How to use the available CIM session options to configure the session to meet your requirements
– Compare and contrast working with WMI, CIM and WSMAN cmdlets against remote machines to illustrate the strengths and weaknesses of each
– How to mix and match CIM sessions using WSMAN and DCOM.The key takeaways from this session will be:
– The CIM cmdlets provide a new way to access WMI
– WSMAN is required knowledge
– WSMAN and DCOM can both be used with the CIM cmdlets
– CIM sessions are easy to use and very powerful
– No more DCOM problems
Richard Siddaway PowerShell Web Access PowerShell Web Access is a new feature in Windows Server 2012 that provides a web based PowerShell console. You don’t need PowerShell on your client to administer remote machines as long as you have PWA. This session will demonstrate how to configure PWA, its strengths and weaknesses – you might even see PowerShell being accessed from a non-Windows machine! The security implications of PWA will be discussed. PWA will be compared to other ways to access remote machines through PowerShell including PS Remoting and CIM sessions.
Richard Siddaway PowerShell events The PowerShell event engine enables you to work with .NET; WMI and PowerShell engine events. What are these and how do they work? What can I do with them? Want to stop a process that shouldn’t be running? Want to start a process that’s stopped? That’s what this session will show you with PowerShell events.
Ed Wilson Write modules, not scripts Learn how to get the most from Windows PowerShell by learning a simple five-step method to transform your Windows PowerShell code into a highly reusable module. This presentation is a live demo that begins with a single line of Windows PowerShell code, transforms the code into a function, adds comment based help to the function, and converts it into a module. Next, the installation and discovery of Windows PowerShell modules is covered, as is updating the module and creating a Windows PowerShell module manifest. Ed Wilson
Ed Wilson What I learned by grading 2000 PowerShell Scripts in the 2012 Scripting Games The 2012 Scripting Games attracted both experienced and novice scripters from more than 100 countries around the world. In grading the 2000 submitted scripts, I noticed a common theme emerged. Some of the things that were consistently confused by both beginners and advanced scripters include the following: failure to return objects from functions, not creating reusable functions, spending too much duplicating capabilities of native PowerShell, using meaningless comments, omission of error handling, and an overreliance on Write-Host. In this session, I will address each of these areas of concern and show both good and bad examples from the games. A thorough discussion of each of these topics rounds out the presentation. This presentation uses live demos to illustrate the techniques that are discussed. Ed Wilson
Ed Wilson PoshMon: PowerShell does performance counters One of the cool features on Windows PowerShell 3.0 is easy consumption of WMI performance counters into Windows PowerShell. In the past, leveraging these performance counters meant writing long lines of cryptic code, calling refresher objects, and dealing with weird timestamp issues. But no more! Using a simple cmdlet, Windows PowerShell throws open the door to the treasure trove of performance counter information. But where does the oversubscribed IT pro begin? A question on my Windows NT 3.51 MCSE exam stated there are four areas for performance monitoring: disk, memory, network, and CPU. These four resources have not changed much, regardless of the application these basic areas of investigation still ring true. In this session, I talk about discovering performance counters, using performance counters, and storing information gathered from performance counters. The talk will be strengthened by live demos at each stage of the presentation.
Matt Wrock* Unit Testing PowerShell This talk will provide a walk through of Unit Testing PowerShell scripts. The OSS project Pester (https://github.com/pester/Pester) will be used to illustrate popular unit testing patterns such as ArrangeActAssert and Mocking to provide testability to PowerShell. There will be discussion on why and when to use unit testing in PowerShell as well.

Keep an eye on my blog for additional news about this conference, because more exciting news is on the way!

Thanks,

Kirk out.

Voting for the 2013 PowerShell Summit sessions is now open!

Voting is now open!

As of this morning you can vote for the sessions that you want to see at the 2013 PowerShell Summit!  We have 97 session proposals (see below), plus additional content from the PowerShell Team.  Your vote is really important, so please take some time to indicate what you would like to see from a PowerShell-specific conference with deep technical depth.

Here’s what you need to do:

1. Open the voting survey in a new tab or window (this link will automatically open in a new window).

2. Review the list of proposed sessions side by side with the table below.  The table below contains the titles, descriptions, and presenter details for every proposal that is in the survey.  This should save you a ton of time when you’re trying to identify the sessions that you want to see.

3. Pick your top 20 sessions that you would like to see at this conference.  There will be more than 20 sessions, but if everyone sticks to voting for their top 20 we’ll get a good distribution in the survey and it will provide a better sample of what everyone wants to see.

Once you’ve done that, then just sit back and wait until we announce the official agenda after voting closes on midnight, October 28, 2012.  That gives you 2 full weeks to vote for what you would like to see.  Once voting closes, myself and other conference organizers will review the votes, coordinate with speakers, include additional content from the PowerShell team, and build an agenda for the conference.  Building the agenda and confirming with presenters will take a little time, so don’t expect to see it posted the morning of October 29. Smile

Here are the session proposals that you can choose from:

Title Description
How VMware does PowerShell Presented by: Alan Renouf

Learn the top 5 things VMware does in PowerShell that is different to anything you have seen before, see how a 3rd Party can take the awesome sauce of PowerShell and add their own flare. This session will show you some cool features of VMware’s PowerShell snapin (PowerCLI) and show how VMware became the largest PowerShell community outside of Microsoft. This session is relevant to anyone who uses PowerShell as it will show the key features VMware included in their snapin and the benefits these give to system administrators.

Creating a complex and reusable HTML reporting structure Presented by: Alan Renouf

In this session I will show you the shortcuts and tricks picked up when creating a complex reporting structure with PowerShell, how a simple HTML output script grew to be a reporting structure which can adapt to give detailed, nicely formatted reports on any application or system that has a PowerShell interface, and even some that don’t!

Creating Add-on Tools for PowerShell ISE Presented by: Kirk Munro

PowerShell 3 includes a ton of improvements to the integrated scripting editor, PowerShell ISE. As great as PowerShell ISE is in this version, there is still a lot of room for improvement. Fortunately, Microsoft anticipated that they wouldn’t be able to do everything, so they extended their support for creating Add-on Tools for PowerShell ISE.

In this session, the worlds first self-proclaimed Poshoholic and PowerShell MVP Kirk Munro will provide a soup to nuts demonstration of PowerShell ISE Add-on Tools, showing how you can create everything from simple menu extensions to feature rich windows that respond to ISE events and that are docked right inside of the ISE.

Technologies covered in this session include the PowerShell ISE object model, C#, WPF, eventing, Visual Studio 2012, and of course several core PowerShell features.

Workflow Walkthrough Presented by: Don Jones

It seems like everyone’s interested in v3’s new Workflow feature, so let’s do a quick walkthrough of building one from scratch. We’ll skip the usual "provisioning" example and go for something a bit more constrained, and perhaps real-world, where workflow’s unique features can really be put to solid use. This’ll also be an opportunity to discuss what workflow can and can’t do, and discuss some of the options and permutations of using it.

Remoting Configuration Deep Dive Presented by: Don Jones

What do you do when Enable-PSRemoting isn’t enough? Dig deeper. We’ll run through all of the major configuration scenarios, including how to use (and not abuse) TrustedHosts, how to set up an HTTPS listener (and use it), how to do non-domain authentication, how to enable CredSSP and configure it to be less than a major security hole, and more. Pretty much every possible Remoting config, we’ll cover. With detailed, step-by-step instructions!

Remoting Security Smackdown Presented by: Don Jones

You know you want to turn on Remoting. Heck, Win2012 turns it on for you and can’t be managed without it! But your "Security Guys" are freaking out, which is odd, because they don’t seem to mind RDP. So we’ll run through every single aspect of Remoting security: Mutual authentication. Auditing. Authentication. Delegation. Impersonation. Double-hop. Triple-hop. CredSSP. Kerberos. SSL. Everything. You bring the security guys’ questions, we’ll get you the most accurate answers possible to take back with you.

Delegated Administration via Remoting and GUI Presented by: Don Jones

It’s an age-old problem: You want to set up some of your users to perform some basic task, but you don’t actually want to give them permissions to do it, and you certainly don’t want to give them the MMC necessary to do it. Thanks to Remoting and a little WinForms action, that’s no problem. We’ll walk through how to set up a constrained Remoting endpoint that can run a highly limited set of predefined commands, and that runs them under alternate credentials. Then we’ll build a simple GUI app, suitable for end-user consumption, that utilizes the endpoint to accomplish the task. It’s the perfect way to build end-user tools, help desk utilities, and more!

Building Self-Service Web Tools with PowerShell Presented by: Don Jones

We all want to make our lives easier… and often, that means giving users self-service tools to accomplish specific tasks. Deploying those tools can be a pain in the next, though, unless you can create them as a Web page. After all, a Web server provides a centralized platform. In this session, we’ll look at a couple of ways of building self-service Web pages. One, using /n software’s tool that lets a .PS1 become a Web page, and another in building a simple ASP.NET page that hosts PowerShell’s engine.

Help for Help: A Help Authoring Deep Dive Presented by: June Blender, Senior Programming Writer, Windows PowerShell Team

A comprehensive 400-level talk for module authors about authoring techniques for all types of Windows PowerShell Help, including About help and help for all command types, including cmdlets (and the MAML schema), scripts, functions, CIM commands, workflows (script and XAML), providers (including custom cmdlet help), and snippets. What you can and cannot do, and what’s worth doing when time and resources are short. We’ll cover online help, Updatable Help, and all the gotchas (HelpInfo XML, HelpInfoUri, HelpUri, CHMs), and I’ll share the scripts that I use to generate help files and verify the accuracy of parameters, parameter values, parameter attributes, GUIDs, and URIs.

Practical PowerShell Integration from Bare Metal to the Cloud Presented by: Alan Renouf

See how PowerShell can be used as the glue of the datacenter, take information from VMware, Cisco and Microsoft, Glue them all together and go from bare metal up to the cloud and beyond. Learn how PowerShell is now expanding to be the language of choice and how Microsoft and third party products can be tied together to create fantastic solutions.

PowerShell for the Security Professional Presented by: Carlos Perez

How can PowerShell be leveraged by the security professional doing Incident Response, Penetration Testing (Enumeration and Post-Exploitation) or performing an audit. The presentation will cover how PowerShell can be used to gather volatile information during an incident response, what cmdlets and technologies work best to gather the proper info and alter the least the system state. Use PowerShell to help in the documentation of the integrity of the results gathered. For the Pentester how to use PowerShell to write enumeration tools leveraging .Net and use PowerShell in post-exploitation running PowerShell in Shell,Leveraging Metasploit PowerShell mixing for running scripts to gain further foothold on target systems, escalate privileges and log all keystrokes on a target.

PowerCLI and vSphere API integration Presented by: Luc Dekens

The PowerCLI snapin is used to manage and automate your VMware vSphere and vCD environments. One of the strengths of the PowerCLI snapin from day 1 is it’s ability to flawlessly integrate with the rich API ecosystem vSphere and vCD offer. A byproduct of this tight API integration is the ability to scale your automation scripts for bigger environments. This session will show how it’s done, how you can use it and how easy it is.

PowerCLI and performance reports Presented by: Luc Dekens

The VMware vSphere environment provides many performance metrics to see what is going on inside. You can use these metrics for problem solving, performance reports and capacity planning. This session will explain how to tackle the collection and handling of these performance metrics. It will also show all the possibilities you have to present your data in a meaningful way. There will be some math and statistics involved, but that’ should be no problem for PowerShell and the average administrator.

PowerCLI automates the lifecycle management of your VM Presented by: Luc Dekens

With VMware’s PowerCLI snapin it is easy to automate the complete lifecycle management of your VMs. This sessions will show how this is done. With the available cmdlets you can create, configure, administer and remove any VM. Needless to say that the session will discuss the best practices. But it will also show some lesser known tricks to get your VMs in exactly the state you want them to be. And you’ll learn how you can produce meaningful reports at every step of the way. In short, "The Automated Life of a VM".

PowerShell and Source Control for the IT Pro Presented by: Andy Schneider

Are you ever concerned about updating a script, having it break, and can’t remember what you changed. This is source control by an IT Pro for IT Pros. Come check out some best practices and lessons learned on how to incorporate source control as part of writing scripts. Learn how to have your code available via the web and easily accessed on multiple machines. We’ll take a look at using GIT to ensure your code is always up to date and you can always get back to where you were if you break something.

PowerShell and Active Directory Presented by: Andy Schneider

This session will provide a quick overview of different options to manage AD using PowerShell. It will quickly jump into some of the shortcomings of the MSFT provided Active Directory module and how to work around them, and even "fix" them using proxy functions and the new Default Parameter Set feature in V3.

Disconnected Sessions: How they work. How they’ll work for you Presented by: Paul Higinbotham, Software Development Engineer, Microsoft and June Blender, Senior Programming Writer, Windows PowerShell Team

An in-depth talk for script authors and IT professionals interested in learning how to disconnect from live remote sessions and reconnect to those sessions later from an arbitrary client machine. What you can and can’t do with disconnected remote sessions, how remote sessions can be automatically disconnected because of network problems, how to query remote machines for available sessions you can connect to, and how to use disconnect session options.

Paul Higinbotham, the developer who coded the feature, and June Blender, Windows PowerShell programming writer, describe the design and architecture of disconnected sessions and explain how session information is retained and disconnected sessions are reconnected. We will cover the details of several remote session disconnect scenarios using the new and modified cmdlets for this feature and demonstrate how to use them.

PowerCLI: how to run PS scripts inside the VM’s guest OS Presented by: Luc Dekens

You can use PSRemoting to run PowerShell scripts inside the guest OS of your VM. But what to do when PSRemoting isn’t possible or available ? Think for example of VMs in a DMZ or on a pvlan. This session will show some alternatives. Run scripts as part of the guest OS deployment, run scripts through the VMware Tools interface or use an external trigger, via the VMware Tools, to influence PS jobs scheduled inside the guest OS.

CIM sessions Presented by: Richard Siddaway

The introduction of the CIM cmdlets and “cmdlets over objects” in PowerShell v3 provide new ways to work with WMI. In addition, they bring a new way to access remote systems ? CIM sessions. Analogous to PowerShell remoting sessions they provide a new flexibility when working with WMI and remote machines. This session will demonstrate:
– How to use CIM sessions against systems running PowerShell v3
– How to work with legacy installations of PowerShell v2
– How to use the available CIM session options to configure the session to meet your requirements
– Compare and contrast working with WMI, CIM and WSMAN cmdlets against remote machines to illustrate the strengths and weaknesses of each
– How to mix and match CIM sessions using WSMAN and DCOM.

The key takeaways from this session will be:
– The CIM cmdlets provide a new way to access WMI
– WSMAN is required knowledge
– WSMAN and DCOM can both be used with the CIM cmdlets
– CIM sessions are easy to use and very powerful
– No more DCOM problems

PowerShell and the Legacy Presented by: Sean Kearney

There is a belief that using PowerShell means rejecting the use of legacy environments like vbScript and Console applications. Some may also believe that just because they have an older system it is not possible to manage it with PowerShell Watch as the most Energized MVP, Sean Kearney takes you into a world of wonder where the old and the new Co-Exist. See possibilities you may not have considered before.

Key take-aways:
– Interaction between modern day PowerShell and older apps
– Repurposing older tools as PowerShell cmdlets

Tastes Great! Less Scripting! Presented by: Sean Kearney

The fight continues on. the argument between the great Lords above that PowerShell is a scripting Environment vs whether it is a Management console! Watch an Actual ITPro on Stage as he shows how he REALLY uses PowerShell in a day to day environment, from basic management and reporting needs, to building out a script to manage needed tasks Take aways Understanding that learning PowerShell does NOT mean a heavy reschooling.

PowerShell and Hyper-V3 – Flying by the Seat of your Pants Presented by: Sean Kearney

Go hardcore. Or in this case FULL SERVER CORE 2012! Learn how you can fully manage a complete clustered Hyper-V core environment in Server 2012 from Creation of the Cluster to management of the Virtual machines including Site replication all without the GUI.

Take aways? Be hard core and go CORE! 🙂

Highway to PowerShell – The Story behind the Story Presented by: Sean Kearney

Ok this isn’t Deep Dive and I don’t expect anybody to PAY for this but I’m willing to talk about just HOW and WHY I turned into a musical Madman 🙂

Authoring PowerShell like a Poshoholic Presented by: Kirk Munro

I’ve been using PowerShell for over 6 years. Blogging about it for over 5 years. Creating and managing products based on PowerShell for about that long as well, and writing a whole lot of scripts during the process. During this time I’ve come up with a trick or three to make that work easier. Some of these tricks are simple time savers, while others are ground breaking opportunities that just might change the way you write PowerShell.

Come and join me in this session to get a bird’s eye view at some of the work I’ve been doing with PowerShell, as I talk about tips, tricks, and best practices while demonstrating some of the extensions I’ve written specifically to make authoring with PowerShell easier to do.

Topics discussed include proxy functions, WMI/CIM, Microsoft Office, DSVs, WiX, merge modules, type accelerators, and more.

Introduction to the Storage Management API Presented by: Bruce Langworthy, Senior Program Manager, Storage and File Systems

SMAPI is what exposes the Storage module for Windows PowerShell. This session would be focused on providing some details on what it is, how it works, in which cases 3rd party drivers are required, and how it’s surfaced as a PowerShell module. More information: This session is recommended as a background for the "Managing Storage with PowerShell" and "Managing Storage Spaces with PowerShell" sessions.

Managing Storage with PowerShell Presented by: Bruce Langworthy, Senior Program Manager, Storage and File Systems

A dive into using the Storage module for Windows PowerShell to manage local storage, Storage Spaces, and array-based storage using PowerShell. More information: The focus of this session will be on the management of Disk, Partition, and Volume objects, with a brief overview of how this applies to Storage Spaces.

Managing Storage Spaces with PowerShell Presented by: Bruce Langworthy, Senior Program Manager, Storage and File Systems

This topic will focus specifically on deploying, configuring, and managing Storage Spaces using PowerShell. More information: Will cover deployment of Storage Spaces from beginning to end using PowerShell, and focus on using PowerShell to manage Storage Spaces. The "Introduction to the Storage Management API" session is strongly recommended before attending this session.

Managing the iSCSI Initiator and MPIO using PowerShell Presented by: Bruce Langworthy, Senior Program Manager, Storage and File Systems

This topic introduces users to the iSCSI and MPIO modules in Windows PowerShell on Server 2012, and discusses how to configure these features using PowerShell.

The Powers of PowerShell Pipeworks Presented by: James Brundage

Ever wanted to make PowerShell easy for others? Or realize that a simple script you have would be a great backbone of a business (if only you could charge for it)? PowerShell Pipeworks is a web platform built in PowerShell that makes is simple to build compelling web applications and software services in a snap. In this session, you will see: – How to use Pipeworks to store your data to the cloud – How to create a monitoring dashboard with Pipeworks – How to build a Facebook application with PowerShell Pipeworks – How to put a price tag on a cmdlet

Networking cmdlets Presented by: Richard Siddaway

Windows 8/2012 introduces a large number of cmdlets for working with networks and network configurations. This session will introduce those cmdlets and see how you can get the best out of them in your environment. There are a number of interesting quirks associated with these cmdlets that you need to be aware of and they will be demonstrated in the session. Like so much of the functionality in Windows 8/2012 these cmdlets are based on WMI using the CDXML functionality. This will be briefly explained with a look inside one of the networking modules. These cmdlets are only available on Windows 8/2012 but with a bit of WMI you can duplicate the functionality in your environment.

PowerShell Web Access Presented by: Richard Siddaway

PowerShell Web Access is a new feature in Windows Server 2012 that provides a web based PowerShell console. You don’t need PowerShell on your client to administer remote machines as long as you have PWA. This session will demonstrate how to configure PWA, its strengths and weaknesses – you might even see PowerShell being accessed from a non-Windows machine! The security implications of PWA will be discussed. PWA will be compared to other ways to access remote machines through PowerShell including PS Remoting and CIM sessions.

Writing your Hyper-V deployment script in 30 minutes Presented by: Jeff Wouters

In this session I’ll show you just how easy it is to write a simple deployment script for a Hyper-V cluster… in only 30 minutes!

BOFH through PowerShell Presented by: Jeff Wouters

Ever wondered how you could annoy your users, managers and even your colleagues with PowerShell? Come to this session and let me show you how you can become a BOFH with PowerShell!

How to avoid the pipeline Presented by: Jeff Wouters

The pipeline… although it is a wonderful concept and very powerful it is also slow. Lots of people pipe everything together and although it may work, you may have some time to get some more coffee before your script is done running. Let me show you how you can avoid the pipeline by utilizing the full potential of cmdlets and their parameters… and with logical thinking.

PowerShell one-liners to the max Presented by: Jeff Wouters

The readers of my blog know that I simply love one-liners in PowerShell… Over the years I’ve learned lots of tricks which allow you to put just about anything in a single line of code. Although it’s not pretty, it’s fun to do and wouldn’t it be cool to make a developer cry just by looking at such a one-liner?

My learning experience with PowerShell Presented by: Jeff Wouters

This will not be a technical session… Back when PowerShell v1 was introduced the first thing I though was: "I can do a heck of a lot more with VBS!". Then PowerShell v2 came along and I was sold! A lot of people would have bought books to learn it… I did not. Instead I started to play around in the prompt. Only after two years I bought my first PowerShell book. In this session I will share with you both the rise and fall of my learning experience of learning PowerShell from the prompt.

How to sell PowerShell to your customers and colleagues Presented by: Jeff Wouters

You:"Let’s enable PowerShell Remoting!". Manager:"Why?" You:"So I can manage the entire environment through PowerShell from a single management server?". Manager:"No!" Does this discussion sound familiar? If that’s the case, let me share with you the things I’ve learned which make it easy for you to ‘sell’ PowerShell to managers from a practical point of view.

PSDD – PowerShell Deduplication Presented by: Jeff Wouters

With Windows Server 2012 there comes a new feature named Data Deduplication. How can you configure and manage this through PowerShell? But more importantly, how can you do more with it than the native PowerShell module offers you? This and more will be shown in a very fast-paced session… so faster your seat belts Dorothy ’cause Kansas is going bye-bye!

Unit Testing PowerShell Presented by: Matt Wrock

This talk will provide a walk through of Unit Testing PowerShell scripts. The OSS project Pester (https://github.com/pester/Pester) will be used to illustrate popular unit testing patterns such as ArrangeActAssert and Mocking to provide testability to PowerShell. There will be discussion on why and when to use unit testing in PowerShell as well.

Bootstrapping a new machine in an hour with Chocolatey Presented by: Matt Wrock

Sick of losing a day’s productivity to setting up a new Machine? Do you find it tedious keeping track of your favorite tools, software settings and windows settings? Do you find using VMs for this task to be awkward and fragile? Learn how to use Chocolatey (http://chocolatey.org) and other PowerShell tricks to bring this entire process into a single script that will run on its own in just about an hour (give or take depending on installs). You can even have several bootstrapping configurations depending on your scenarios. One for work, another light weight one for Remoting on to a new serer and another for personal machines.

Inside PowerShell: Abstract Syntax Tree Manipulation Presented by: Adam Driscoll

In this session we will take apart PowerShell. This session will highlight the new abstract syntax tree and node visitor API that is exposed in v3. An instrumentation profiler will be used as an example of how to traverse and manipulate PowerShell scripts from within the engine.

.NET Reverse Engineering with PowerShell Presented by: Adam Driscoll

In this session we will look at how to utilize ILSpy to decompile .NET assemblies and quickly access internal aspects of them using PowerShell. We will see how to easily expose private members for access and manipulation within scripts. Adam Driscoll

FIM 2010 DevOps with PowerShell Presented by: Craig Martin

Forefront Identity Manager 2010 (FIM) is a complex product that benefits greatly in a DevOps world facilitated by PowerShell. Come learn how PowerShell improves FIM deployments, highlighting the PowerShell lessons learned from a non-PowerShell MVP, and arguably a non-developer. Topics will include: FIM Test Automation with PowerShell FIM Deployment Automation with PowerShell FIM Extensibility with PowerShell FIM Workflow with PowerShell FIM Diagnostics with PowerShell Craig Martin is a FIM MVP with a passion for improving integration and automation quality with PowerShell.

PowerShell as a SQL Reporting Services DataSource Presented by: Craig Martin

PowerShell turns out to be an excellent tool for collecting data about just anything. This session shows you how to get objects from PowerShell into SSRS reports quickly and simply, and all without using a data warehouse. This session will explain and demonstrate the use of a CodePlex project (psdpe.codeplex.com) to marry PowerShell and SSRS to provide some of the following benefits:

SSRS Report Designers – Produce Reports in a Simple Design Experience using Objects from a PowerShell Pipeline SSRS Data

Driven Subscriptions – Automatically distribute custom reports to users with data that pertains only to them

SSRS Caching – Cache reports in SSRS for later viewing so that your script does not need to reproduce the data

SSRS Data Processing Extensions – use SSRS to report on PowerShell objects (the core of the topic)

Providing APIs Using Management OData IIS Extension Presented by: Craig Martin

The API Economy is all the rage, at least when we’re not hearing about how cool PowerShell is. The idea is a replacement for ODBC, LDAP, or any other API, and preference by application developers to use OData and RESTful web services. Should we all get busy writing APIs then? Turns out PowerShell users already have, by writing scripts and modules. This new feature in PowerShell exposes the investment in commands to developers that may not care about about PowerShell, but instead demand to consume an API based on OData. Got a command for getting User objects? well now you can share that as an URL such as http://myServer/User (gets all the user objects) or http://myServer/User(‘Craig’)/Manager (gets Craig’s manager). The magic here is that the developer is reaping all the rewards of your hard PowerShell work, but that developer never needs to know that the URLs are actually powered by, well PowerShell. This talk will share the experience of an IT Pro with scripting experience, learning how to create APIs using the new Management OData IIS Extension.

Creating Reports with PowerShell that Managers will Read Presented by: Jeffery Hicks

We all know there is a wealth of information that you can uncover with PowerShell. Sometimes, getting this into a format that someone can read can be a challenge. In this session I’ll explain a number of techniques you can use for creating dazzling reports from PowerShell. From simple text files, to snazzy HTML reports to full-on Microsoft Word documents.

PowerShell and Microsoft Excel: A Love Story Presented by: Jeffery Hicks

After PowerShell, Microsoft Excel is probably an IT Pro’s most often used management tool. We store data in spreadsheets. We use spreadsheets as sources for our scripts and functions. Or maybe you would like to do these things but don’t know where to start. In this session I’ll explain how to integrate Excel into your PowerShell experience. From pulling data from simple spreadsheets to creating stunning reports complete with tables, charts and graphs.

PowerShell and Windows Server 2012 Active Directory Tricks Presented by: Jeffery Hicks

IT Pro’s have been able to manage Active Directory with PowerShell for while. But that was only the beginning. Windows Server 2012 offers a tantalizing array of Active Directory management options. In this session I will offer a number of tips and tricks that take advantage of these new features.

Zip It! Adding Compression to your PowerShell Scripting Presented by: Jeffery Hicks

PowerShell is a natural tool for file system management. IT Pros copy, delete and move files all the time. Even though storage is cheap and plentiful these days, wouldn’t it be nice to add some compression techniques to your PowerShell scripts and functions? This session will demonstrate a number of ways you can add compression to your file management tasks. From simple file and folder compression to creating complete archives. We’ll look at using the shell, 3rd party tools and WMI.

PowerShell v3 ISE Snippets Presented by: Jeffery Hicks

Without question the ISE in PowerShell v3 is a vast and welcome improvement over v2. One of the best features, which hasn’t gotten much attention, is the use of snippets. These little code gems can make writing a new script or function a breeze and even fun. But you can also add your own snippets. In this session I’ll explain how the snippet system works, demonstrate how you can add your own snippets and manage your snippet library, all from the ISE.

Adding a GUI to PowerShell without WinForms Presented by: Jeffery Hicks

Graphical PowerShell scripts seem all the rage these days. But most often that means using Windows Forms which can be very tedious to work with. But that is not the only game in town. Depending on your requirements there are a number of techniques you can use to add graphical elements to your PowerShell scripts. This session will explore how to create message boxes, input forms and more, all without a single Windows Form. If you are just getting started with writing PowerShell scripts, you’ll find these techniques simple to use, plus there will be plenty of sample code for all!

Building a Quick and Dirty PowerShell Backup System Presented by: Jeffery Hicks

It is a safe bet to say that most IT Pros have a backup solution in place for their organization. But sometimes you need something a bit more flexible or for special situations. Perhaps you have a lab or home test environment that needs protection. In this session, I will walk you through how to use PowerShell to set up a quick and dirty backup solution. This isn’t necessarily a replacement for a full-fledged backup product, but it just might help fill the gaps.

File & Folder Provisioning with Win8, Win2012 and PowerShell Presented by: Jeffery Hicks

If you manage file servers and aren’t using PowerShell, you are working much too hard. Or if you are using PowerShell v2 you are still working pretty hard. Fortunately PowerShell v3 along with Windows 8 and Windows Server 2012 offer a much better solution. This session will demonstrate how to provision and manage folders, files and file shares using PowerShell from a Windows 8 client. With a little up-front work, you ‘ll be able to create provisioning scripts to deploy a new file share in seconds.

Manage DFS the PowerShell Way Presented by: Jeffery Hicks

Most of the time, managing a distributed file system (DFS) infrastructure is pretty simple and graphical tools are fine. But all the cool kids will use PowerShell. Windows 8 and Windows Server 2012 offer a better way for managing DFS. From creating new folders to getting a handle on what it looks like now, to troubleshooting access problems, this session will demonstrate how to have it all from a PowerShell prompt.

Write modules, not scripts Presented by: Ed Wilson, Scripting Guy, Microsoft

Learn how to get the most from Windows PowerShell by learning a simple five-step method to transform your Windows PowerShell code into a highly reusable module. This presentation is a live demo that begins with a single line of Windows PowerShell code, transforms the code into a function, adds comment based help to the function, and converts it into a module. Next, the installation and discovery of Windows PowerShell modules is covered, as is updating the module and creating a Windows PowerShell module manifest. Ed Wilson

What I learned by grading 2000 PowerShell Scripts in the 2012 Scripting Games Presented by: Ed Wilson, Scripting Guy, Microsoft

The 2012 Scripting Games attracted both experienced and novice scripters from more than 100 countries around the world. In grading the 2000 submitted scripts, I noticed a common theme emerged. Some of the things that were consistently confused by both beginners and advanced scripters include the following: failure to return objects from functions, not creating reusable functions, spending too much duplicating capabilities of native PowerShell, using meaningless comments, omission of error handling, and an overreliance on Write-Host. In this session, I will address each of these areas of concern and show both good and bad examples from the games. A thorough discussion of each of these topics rounds out the presentation. This presentation uses live demos to illustrate the techniques that are discussed. Ed Wilson

Use PowerShell to manage the remote Windows 8 workstation Presented by: Ed Wilson, Scripting Guy, Microsoft

There are three different ways to manage a remote Windows 8 workstation. The first is to use WMI remoting, the second is to use the computername cmdlets and the third is to use WinRm and Windows PowerShell native remoting. Each approach has advantages and disadvantages for the network administrator. In this session, I will examine each approach, and provide a checklist of criteria to aid the enterprise network administrator in choosing the appropriate technology for a variety of real world scenarios. This presentation combines live demos and interactive discussion to heighten learning.

Use PowerShell to troubleshoot the reliability issues Presented by: Ed Wilson, Scripting Guy, Microsoft

Using the reliability provider on Windows 8 workstation or on a Windows Server 2012 machine provides a plethora of information about the health of your system. Unfortunately, the reliability provider is not enabled by default on Windows Server 2012, and attempts to enable it do not always work. In this session, I discuss the issues surrounding the reliability provider, illustrate the type of information available, and hint at how to incorporate its use into a normal monitoring program. Live demos using easily created Windows PowerShell scripts round out the discussion.

PoshMon: PowerShell does performance counters Presented by: Ed Wilson, Scripting Guy, Microsoft

One of the cool features on Windows PowerShell 3.0 is easy consumption of WMI performance counters into Windows PowerShell. In the past, leveraging these performance counters meant writing long lines of cryptic code, calling refresher objects, and dealing with weird timestamp issues. But no more! Using a simple cmdlet, Windows PowerShell throws open the door to the treasure trove of performance counter information. But where does the oversubscribed IT pro begin? A question on my Windows NT 3.51 MCSE exam stated there are four areas for performance monitoring: disk, memory, network, and CPU. These four resources have not changed much, regardless of the application these basic areas of investigation still ring true. In this session, I talk about discovering performance counters, using performance counters, and storing information gathered from performance counters. The talk will be strengthened by live demos at each stage of the presentation.

Why IT Pros must learn Windows PowerShell Now Presented by: Ed Wilson, Scripting Guy, Microsoft

”IT Pros don’t script.” I have heard this mantra for more than a decade – ever since I wrote my best selling Windows Scripting Self-Paced Learning Guide for Microsoft Press. But Windows PowerShell is more than just a new scripting language – in fact, some PowerShell MVPs have stated that Windows PowerShell is not a scripting language at all. Also, and more to the point, Windows PowerShell is not even all that new, with Windows 8, Windows PowerShell enters the 3rd version – it is therefore established technology. Simply put, Windows PowerShell is the future automation story in the Microsoft world, but it is also the present, and the IT Pro who learns how to use this tool will immediately become a more productive, and consequently more valuable employee. In this session I will discuss the extent to which Windows PowerShell permeates the Microsoft eco system, and offer real world scenarios that illustrate both the power, and the simplicity of this management tool.

CDXML Presented by: Richard Siddaway

Windows 2012 brings 2500 cmdlets – over 60% of them are CDXML. That’s a WMI class wrapped in XML and published as a module. In this session you will discover how this technology works and more importantly how to easily create your own cmdlets to simplify the use of WMI

New Active Directory PowerShell cmdlets Presented by: Richard Siddaway

PowerShell for Active Directory gets a major boost in Windows 2012. The AD administrative center now exposes the PowerShell it uses and we get cmdlets for working the topology. In this session you’ll learn about AD admin center and how to get the best out if the new AD cmdlets with a look at some tips and tricks for working with AD in general. You’ll also discover that the AD provider does a lot more than you think it can.

CIM Presented by: Richard Siddaway

WMI is dead! Long live CIM! PowerShell v3 introduces the CIM cmdlets. Are they a replacement for the WMI cmdlets? Are they easier to use? In this session we’ll take them apart and see what makes them tick. A compare and contrast with the WMI cmdlets will show you when to use one or the other and how to get the best out of both.

Scheduled tasks Presented by: Richard Siddaway

You’ve used the back ground jobs functionality in PowerShell v2. In PowerShell v3 you get the chance to work with the task scheduler. A set of cmdlets straight out of the PowerShell box for working with scheduled tasks. Automation rises to a new level when you can tell the job to run in the middle of the night and you don’t need to be there. Learn how to do this and more in this session

Integrated reports Presented by: Richard Siddaway

Managers always want reports. Can’t be avoided but the task can be made easier. In this session we’ll look at creating some reports based on real world examples: 1. Get the size of your Exchange databases and free disk space. Store the results in SQL Server. Create reports that show current situation and trends over time. 2. All administrators hate documenting their servers. Learn how to create a report that writes itself – literally. Keep your server documentation up to date with no effort on your part.

PowerShell events Presented by: Richard Siddaway

The PowerShell event engine enables you to work with .NET; WMI and PowerShell engine events. What are these and how do they work? What can I do with them? Want to stop a process that shouldn’t be running? Want to start a process that’s stopped? That’s what this session will show you with PowerShell events.

WSMAN cmdlets Presented by: Richard Siddaway

PowerShell remoting uses the WS-Management protocols as transport between the local and remote machines. This is implemented as the WinRm service. We can utilise the WS-Management layer (WSMAN) directly to access WMI providers. This session opens up one of the least used areas of PowerShell v2. We will see how to use the WSMAN cmdlets:
– Connect-WSMan
– Disconnect-WSMan
– Get-WSManInstance
– Invoke-WSManAction
– New-WSManInstance
– New-WSManSessionOption
– Remove-WSManInstance
– Set-WSManInstance
– Test-WSMan

With these we can access a remote machine in a similar manner to using the WMI cmdlets or PowerShell remoting. The advantage over WMI cmdlets is that we don’t need DCOM. These cmdlets aren’t straight forward to use but there is an untapped administration opportunity that potentially also enables us to administer remote machines that aren’t Windows based. The session will be heavy on code and short on slides as this is a subject best demonstrated.

PowerShell jobs Presented by: Richard Siddaway

PowerShell normally runs tasks in the fore ground. This ties up the PowerShell prompt and stops you doing other work. We could just open lots of PowerShell prompts but a better way is to use PowerShell jobs. PowerShell jobs run in the background. You can have multiple jobs running simultaneously and still work at the prompt. Better still the jobs? results are saved until you are ready to use them. PowerShell jobs are an under used item in the administrators tool box. This session will show what they can do and how we can make the most of them. Lots of code and minimal slides make the session very interactive.

PowerShell and SQL Server Presented by: Richard Siddaway

Storing data in SQL server is not a new idea. Accessing SQL Server using PowerShell opens up this data store for us. This session will show how to use SQL Server to store your data; how you can read, update and if necessary delete the data. Simple PowerShell routines that open a lot of power.

DNS Apocalypse (Notes From The Field) Presented by: Ashley McGlone, Microsoft PFE

Hear Microsoft PFE Ashley McGlone explain how he got out of this one. Global 24×7 mission-critical customer had a single text file DNS primary zone hosting all 10 Active Directory domain zones in the forest. Needed to switch to AD-integrated DNS, split out all zones into separate domains, and delegate DNS administration. Then they explained there are no change control maintenance windows, and it had to be done with zero down time. He did it. Come find out how PowerShell saved this customer.

AD Migration Nightmare (Notes From The Field) Presented by: Ashley McGlone, Microsoft PFE

I got a panic call from the customer. Half way through the AD domain migration their third party migration tool database crashed and was unrecoverable. They lost all SID history conversion tracking. The vendor doing the migration was unsure how to proceed. Hear Microsoft PFE Ashley McGlone explain how PowerShell saved the customer. Do you know where your SID history is hiding?

Mass File Server ACL Migration (Notes From The Field) Presented by: Ashley McGlone, Microsoft PFE

I had a customer who acquires 13 new companies each year. They have more than 35 domains in the forest and another 80 trusts. With over 170,000 instances of SID history in the forest they had no idea where to begin fixing SID history on file shares. They needed a way to migrate ACLs on their file servers, to report on the impact, and to manage it effectively in the future. Where would you begin? Hear Microsoft PFE Ashley McGlone explain how PowerShell saved the customer.

Automated Server Setup with Carbon Presented by: Aaron Jensen

Aren’t manual setup checklists the greatest? How about virtual machine images that have been cloned for so long nobody knows where they come from? Nobody likes spending hours doing the same things over and over again, or reverse engineering what configuration changes someone made to a server before walking out the door. Come learn about Carbon (http://get-carbon.org), the DevOps module I created that enables us to spin up dozens of servers in just a few hours. I’ll give an overview of all the functionality available in Carbon, then dive deep into some of the things I’ve learned and discovered during development.

Connecting ERP to AD with PowerShell – A Two-way Street Presented by: Steve Moss

When we implemented Jenzabar CX as our college’s ERP solution, it became our authoritative data source and the driver for things like Active Directory account creation and maintenance. Initially, we used a series of VBScripts to handle the integration with AD. When I was tasked with fixing and maintaining that code, two things because clear. First, The existing code was virtually unmaintainable. Second, PowerShell made it relatively easy to create a solution that was modular, flexible and easily maintained. I’ll look at how we implemented the communication from CX to AD and from AD to CX using /nSoftware’s PowerShell Server and ODBC. I’ll also look at the way we decomposed the creation and maintenance various types of AD accounts into discrete tasks and used that to create a modular library of functions that allows us to use a building block approach to not only implementing the automated processes that we needed, but also create an interactive set of tools for our Service Desk people to view and modify AD accounts in a controlled way.

Deploy and manage certificates for your IIS servers using PS Presented by: Jason Helmick

Need to deploy and manage certificates for your websites? When was the last time you checked to see if your website certificates were about to expire? In this session with renowned PowerShell and IIS expert Jason Helmick, you will deploy, manage, revoke and remove certificates to multiple remote IIS servers running Windows Server Core. Discover and alert when certificates are about to expire and handle creating and changing SSLBindings in IIS.

Automatically Provisioning an IIS 8 Web Farm Presented by: Jason Helmick

Increase productivity while increasing time off using PowerShell! In this session with renowned PowerShell and IIS expert Jason Helmick, you will learn to provision a web farm of servers, sites and applications. Quickly adapt your web farm to the needs of the business with rapid scale load balancing. You will leave with the slides, demonstration steps and Jason’s tips to rapidly provision IIS. Don’t lose another weekend to web farm deployment and management!

Securely Manage your network anytime on any Device with PSWA Presented by: Jason Helmick

Are you “on-call” and worried to leave the office? Not anymore! In this session with renowned PowerShell and IIS expert Jason Helmick, you will learn to implement and securely configure Windows Server 8 PowerShell Web Access. Take control with any device and cmdlets at your fingertips without the overhead of installing additional administration tools. You will leave with the slides, demonstration steps and Jason’s tips to securely deploy and utilize PowerShell Web Access.

System Center 2012 Configuration Manager and PowerShell Presented by: Greg Ramsey

ConfigMgr and PowerShell – we have finally arrived! ConfigMgr and WMI have been a match made in heaven for the since at least SMS 2.0, so we’ve always been able to use PowerShell with ConfigMgr. But finally, we have real cmdlets that will allow you to fully automate the administrative experience with ConfigMgr. Are you ready to take your Configuration Manager Admin experience to the next level? Greg shows you how to leverage PowerShell with Microsoft System Center 2012 Configuration Manager SP1. Manage Deployments, Collections, Applications, Packages, Programs, and even Software Updates!

Working with script blocks Presented by: Rob Campbell

Creating script blocks for remote jobs and filters using local variables. Using script blocks to: create collections simplify code maintenance get user input pipeline output from foreach loops

Metaprogramming PowerShell Presented by: Ian Davis

PowerShell can be a fun and crazy language to use, but we can take it a step further with metaprogramming. By taking advantage of PowerShell’s flexible language features including dynamic scoping, modules, deferred evaluation, and ScriptBlocks, we can create simple and powerful applications applications leveraging metaprogramming idioms.

Chewie: PowerShell DSL for Managing NuGet Dependencies Presented by: Ian Davis

Have you ever tried to figure out which dependencies your application has? Tired of messing with NuGet repository.config and packages.config files? Are you fed up with having to load Visual Studio and enabling package restore by hand? Ruby has had a solution for a long time with gems and bundler. By leveraging the features of PowerShell, .NET developers can have their own DSL for managing dependencies efficiently with Chewie.

Internal DSLs in PowerShell Presented by: Ian Davis

To write a DSL or to not write a DSL, that is an important question. PowerShell gives us great power to create DSLs, but it doesn’t mean that we should create one. This talk will cover when to create a DSL along with techniques specific to PowerShell for creating them (deferred evaluation, first class objects, dynamic scoping, semantic models, dependency graphs, etc). Some existing PowerShell DSLs will be analyzed including as psake, pester, and chewie.

PowerShell: Beyond Scripting Presented by: Ian Davis

PowerShell is missing a few language features, but that doesn’t mean we can pretend. By changing our perspective slightly, we can apply parasitic and prototypal inheritance, open classes, monkey patching, and more. PowerShell was designed for solving problems for system administrators, but it isn’t limited to that domain.

Automated Builds With PowerShell Presented by: Ian Davis

Automated builds are a critical part of application lifecycle management. PowerShell is very well suited for making this process easier. We have gone full circle with scripting builds and by leveraging PowerShell on the command line and building DSLs, our builds can be more robust and intuitive than ever.

Troubleshooting SQL Server with PowerShell Presented by: Laerte Junior

It is normal for us to have to face poorly performing queries or even complete failure in our SQL server environments. This can happen for a variety of reasons including poor Database Designs, hardware failure, improperly-configured systems and OS Updates applied without testing. As Database Administrators, we need to take precaution to minimize the impact of these problems when they occur, and so we need the tools and methodology required to identify and solve issues quickly. In this Session we will use PowerShell to explore some common troubleshooting techniques used in our day-to-day work as DBA. This will include a variety of such activities including gathering Blocked SQL Server Process, Reading & filtering the SQL Error Log even if the Instance is offline, Listing SQL Server and Database information and Register Temporary and Specific Events in the SQL Server WMI. The approach will be using PowerShell techniques that allow us to scale the code for multiple servers and run the data collection in asynchronous mode.

PowerShell in Windows 8/2012 Presented by: Richard Siddaway

PowerShell has 2500 cmdlets available in Windows 2012 This session will give you a quick overview of what’s available and more importantly what you can do with it. There is so much functionality available that if you don’t know its there you can miss it. A quick overview of what’s available and lots of demos

PowerShell and WMI Presented by: Richard Siddaway

With all the new WMI based functionality in PowerShell v3 its easy to forget the old WMI cmdlets. They are still there, still have their place and can teach us a few things about administering our systems. Some of the new PowerShell v3 functionality makes them easier to use – learn how Some of the WMI gotchas still remain – see what they are, how you overcome them and what effect they have on the new CIM cmdlets

Building Enterprise Modules Presented by: Adam Driscoll

In this session we will look at how to author enterprise-level modules using a combination of both PowerShell and C#. We’ll examine the common pitfalls and considerations that should be made when thinking about enterprise PowerShell support. We will look at how to build modules that are easy to test and maintain.

Tame Your Event Logs with Windows PowerShell and WinRM Presented by: Aleksandar Nikolic

In this session you will learn how to manage your Event Logs with PowerShell cmdlets, leverage the power of Event Forwarding to centralize events to a central server and trigger execution of PowerShell scripts from a specific Windows event.

Automate Server Manager in Windows Server 2012 Presented by: Aleksandar Nikolic

Server Manager in Windows Server 2012 has evolved to include many new multi-server management features. It uses Windows PowerShell behind the scenes, but can we use Windows PowerShell to automate customization of Server Manager? Yes, we can. Join us for this session to learn how.

How to Delegate Administration and Customize PowerShell Session Configuration Presented by: Aleksandar Nikolic

In this session you will learn how to customize PowerShell session configuration, and then use it to assign specific administrative tasks to the appropriate users and groups without changing the membership of local Administrators group. By using new Windows PowerShell and Windows Remote Management 3.0 capabilities we will enable dynamic creation of customized automation environments that users can access through the Windows PowerShell Web Access.

Configuring Your Windows PowerShell Workflow Environment Presented by: Aleksandar Nikolic

In this session you will learn how to set up your environment to run Windows PowerShell workflows. We will discuss different workflow configurations, how to prepare computers to run workflows, what is workflow session configuration and how to customize it. At the end, you will learn how to properly run your Windows PowerShell workflows.

Build Your Demo Environment or a Test Lab with Windows PowerShell Presented by: Aleksandar Nikolic

With Windows PowerShell 3.0 and the new Client Hyper-V available in Windows 8, it is so easy, and fun, to automate creation of your demo environment or a test lab infrastructure. You can easily convert ISO files to VHDs, deploy your VMs and configure networking and storage. Join us for this demo-heavy session to see all the steps.

Is Server Core without Windows PowerShell still remotely manageable? Presented by: Aleksandar Nikolic

In this, some might say blasphemous, session you will learn that uninstallation of Windows PowerShell doesn’t leave your Windows Server 2012 Server Core remotely unmanageable from the command line. We can still use Windows PowerShell on a client computer to access system CIM modules on a Server Core. Even better, we can increase its manageability by deploying our own CIM modules. Join us to see the power of CIM sessions and CIM modules.

Scripting for Scale in the Virtual Datacenter Presented by: Josh Atwell and Jade Lester

The virtual datacenter is growing at a high rate. The increasing size and complexities can make scripting and reporting take too long to complete in a reasonable time period. Attendees will learn a variety of techniques and strategies you can use to speed up your scripting and reporting with PowerCLI and UCSPowerTool from two members of Cisco internal IT.

PowerCLI for the PowerShell Inclined Presented by: Josh Atwell

In this session I highlight many of the built in functionalities of PowerCLI that are extremely powerful but often underutilized. These cmdlets will increase your flexibility with PowerCLI and help increase efficiency.

Managing your Cisco UCS with UCSPowerTool Presented by: Josh Atwell and Jade Lester

Attendees will get a crash course in the unique and powerful cmdlets of the UCSPowerTool, PowerShell for the Cisco Unified Compute System.

Thank you for helping us create this great conference!

Kirk out.

This April is “Learn More About PowerShell” Month with the 2012 Scripting Games, the 2012 Microsoft Management Summit, and the 2012 North American PowerShell Deep Dive!

It’s hard to believe that April is almost here already.  Last week we had record high temperatures reaching 31°C (that’s 87.8°F for those of you living south of the border), and the night before last it was -16°C (or 3.2°F).  What wonderful consistency.  Maybe that’s why I like PowerShell so much, because it provides great consistency that just isn’t apparent in so many other places in life (that’s a swell tagline: “Use PowerShell, because it’s more consistent than the weather” Smile).  Anyway, I digress…back to the topic at hand.

This April is “Learn More About PowerShell” month!  Ok, so it’s not official (it’s not like I’m a mayor or anything), but with all of the opportunities to learn about Windows PowerShell in April, it seems like a fitting title, so I’m declaring it that anyway.  Now, where to begin.

2012 Scripting Games

The first Monday in April (that’s April 2, Monday next week) marks the official opening of the 2012 Scripting Games!  The Scripting Games are a great event, because they provide opportunities for beginner and advanced scripters alike to learn more about Windows PowerShell.  There are beginner and advanced divisions, with 10 events in each division.  You participate by visiting the official 2012 Scripting Games page starting on Monday April 2 to see the events that are published so far, and you have one week to submit a solution by publishing a script to the 2012 Scripting Games page on PoshCode for each event that you want to enter.  Note that at the time of this writing, the 2012 Scripting Games page on PoshCode shows information related to the 2011 Scripting Games, so for now just put a reminder in your calendar to check these two links out on April 2.

Once you submit a solution, you can move on to the next event if it is available.  All solutions will be judged by a great panel of expert judges, and once the events close there will be expert commentaries published so that you can learn how different community experts solve these problems with PowerShell scripts.  Watch for my expert commentary to Beginner Event 3 once that event has closed for submissions.

The 2012 Scripting Games will run until April 13, 2012, although you’ll have 7 days from the day that each event is posted, so there will still be some time to compete and get your entries in.  There are many prizes to be won, including grand prizes of full conference passes for TechEd North America 2012 (another great opportunity to learn more about PowerShell), software licenses for products like PowerWF, and more!  Also, don’t delay in getting your entries in, because you’ll barely have time once you’re done to pack your bags for the 2012 Microsoft Management Summit in Las Vegas if you’re going to that conference!

2012 Microsoft Management Summit

In just 2½ weeks from now, the 2012 Microsoft Management Summit (MMS) will start, and it’s going to be an amazing conference this year.  With the upcoming Microsoft System Center 2012 release, and with Windows 8 currently available as a Consumer Preview in the client and the server varieties (both of which include the pre-release version of PowerShell version 3), there are plenty of new opportunities to scale up your PowerShell prowess and scale out your scripting capabilities while learning how to get the most of these new products and platforms by leveraging PowerShell automation.

At the MMS 2012 conference, there are a total of 13 breakout sessions, 3 instructor led labs, and 5 self-paced labs where you can learn more about Windows PowerShell.  There is also a PowerShell booth that will be staffed by members of the Windows PowerShell team and a few PowerShell MVPs.  I’ll be working the PowerShell booth as will Aleksandar Nikolic, so please come see us and ask questions if you have any.  There will also be other booths for products like the Microsoft System Center 2012 release, which comes with even more PowerShell capabilities than before.  Additionally, there are many companies in the Expo hall that leverage PowerShell in their products and/or provide cmdlets to facilitate automation in their environments, such as NetApp, Veeam, Splunk and Devfarm Software (the company that I work for) to name but a few.  I’ll be working the Devfarm booth when I’m not in the PowerShell booth, so if you look around a little you’ll have a good chance of finding me.

If you’re going to MMS 2012, and you want to learn more about PowerShell, make sure you take advantage of these resources while you’re there.  The knowledge passed on to you through one breakout session, lab, or discussion with someone in the learning center or expo hall takes many, many hours to put together, and getting that knowledge first hand can be a huge timesaver for you in the long run!

PowerShell-related Content at MMS 2012

The following list identifies all of the PowerShell-related sessions and resources that have been announced so far for the MMS 2012 conference for your convenience.  To get the most value out of your conference, make sure you add the sessions, labs, and other items of interest to your schedule so that you don’t miss out on these great learning opportunities.  I have highlighted the sessions most interesting to me in bold in the list below.

Type and Level Title Speaker(s) Coordinates
Instructor-led Lab
300/Advanced
SV-IL306 Introduction to Windows PowerShell Fundamentals Dan Reger Monday, April 16,
12:00 PM to 1:15 PM
Venetian Ballroom A
Breakout Session
300/Advanced
SV-B317 Top 10 Things Every Systems Admin Needs to Know about Windows Server 2008 R2 SP1 Dan Stolts Monday, April 16,
3:00 PM to 4:15 PM
Venetian Ballroom G
Instructor-led Lab
300/Advanced
SV-IL307 What’s New in Windows PowerShell 3.0 Lucio Silveira Monday, April 16,
4:30 PM to 5:45 PM
Venetian Ballroom A
Breakout Session
300/Advanced
CD-B334 Understanding Console Extension for Configuration Manager 2007 and 2012 Matthew Hudson Tuesday, April 17,
10:15 AM to 11:30 AM
Venetian Ballroom G
Breakout Session
400/Expert
CD-B406 Configuration Manager 2012 and PowerShell: Better Together Greg Ramsey Tuesday, April 17,
11:45 AM to 1:00 PM
Venetian Ballroom G
Instructor-led Lab
300/Advanced
SV-IL304 Managing Windows Server “8” with Server Manager and PowerShell 3.0 Michael Leworthy Tuesday, April 17,
11:45 AM to 1:00 PM
Venetian Ballroom A
Instructor-led Lab
300/Advanced
SV-IL307 What’s New in Windows PowerShell 3.0 Lucio Silveira Tuesday, April 17,
2:15PM to 3:30PM
Venetian Ballroom A
Breakout Session
300/Advanced
SV-B319 Windows PowerShell for Beginners Jeffrey Snover,
Travis Jones
Tuesday, April 17,
4:00 PM to 5:15 PM
Murano 3301
Breakout Session
200/Intermediate
SV-B205 Overview of Server Management Technologies in Windows Server “8” Erin Chapple,
Jeffrey Snover
Wednesday, April 18,
10:15 AM to 11:30 AM
Murano 3301
Breakout Session
200/Intermediate
SV-B291 Manage Cisco UCS with System Center 2012 and PowerShell Chakri Avala Wednesday, April 18,
2:15 PM to 3:30 PM
Titian 2203
Instructor-led Lab
300/Advanced
SV-IL306 Introduction to Windows PowerShell Fundamentals Dan Reger Wednesday, April 18,
2:15 PM to 3:30 PM
Venetian Ballroom A
Breakout Session
300/Advanced
SV-B313 Windows Server 2008 R2 Hyper-V FAQs, Tips, and Tricks Janssen Jones Wednesday, April 18,
4:00 PM to 5:15 PM
Murano 3301
Instructor-led Lab
300/Advanced
SV-IL304 Managing Windows Server “8” with Server Manager and PowerShell 3.0 Michael Leworthy Thursday, April 19,
8:30 AM to 9:45 AM
Venetian Ballroom A
Breakout Session
400/Expert
SV-B405 Advanced Automation Using Windows PowerShell 2.0 Jeffrey Snover,
Travis Jones
Thursday, April 19,
10:15 AM to 11:30 AM
Veronese 2401
Breakout Session
300/Advanced
AM-B315 SharePoint as a Workload in a Private Cloud Adam Hall,
Michael Frank
Thursday, April 19,
10:15 AM to 11:30 AM
Titian 2206
Breakout Session
300/Advanced
SV-B312 Don Jones’ Windows PowerShell Crash Course Don Jones Thursday, April 19,
11:45 AM to 1:00 PM
Venetian Ballroom G
Breakout Session
300/Advanced
SV-B315 Managing Group Policy Using PowerShell Darren Mar-Elia Thursday, April 19,
11:45 AM to 1:00 PM
Murano 3301
Breakout Session
300/Advanced
FI-B322 Virtual Machine Manager 2012: PowerShell is your Friend, and Here’s Why Hector Linares,
Susan Hill
Thursday, April 19,
11:45 AM to 1:00 PM
Titian 2206
Breakout Session
400/Expert
SV-B406 PowerShell Remoting in Depth Don Jones Friday, April 20,
8:30 AM to 9:45 AM
Bellini 2001
Hands-on lab
300/Advanced
SV-L302 Active Directory Deployment and Management Enhancements N/A Hands-on lab, available in the HOL area
Hands-on lab
300/Advanced
SV-L304 Managing Windows Server “8” with Server Manager and Windows PowerShell 3.0 N/A Hands-on lab, available in the HOL area
Hands-on lab
300/Advanced
SV-L305 Managing Network Infrastructure with Windows Server “8” N/A Hands-on lab, available in the HOL area
Hands-on lab
300/Advanced
SV-L306 Introduction to Windows PowerShell Fundamentals N/A Hands-on lab, available in the HOL area
Hands-on lab
300/Advanced
SV-L307 What’s New in Windows PowerShell 3.0 N/A Hands-on lab, available in the HOL area

2012 North America PowerShell Deep Dive

As if all of these PowerShell learning opportunities weren’t already enough, there’s even more you can do in “Learn More About PowerShell” month.  At the end of April, a week after MMS is finished, the 2nd annual North American 2012 PowerShell Deep Dive conference will start.  This conference is second to none when it comes to learning more about PowerShell.  The sessions are fantastic, and the conversations perhaps even more so.  What makes this conference unique is the focus on shorter, 35-minute sessions that quickly drill into a specific topic and give you a ton of information on that topic.  There are also short, 5-minute lightning rounds which give speakers an opportunity to quickly show off one of their favorite aspects of PowerShell.  The 35-minute format, 5-minute lightning rounds, and the depth of the content in these sessions are unique to this conference, and you won’t get the same value for PowerShell content anywhere else.  Add to that the evening script club-style events and it’s really an experience that is second to none.  I highly recommend you consider attending if you’re already using PowerShell and want to take your skills to new heights.  You can still register for this great event on the registration page for The Experts Conference (TEC).

This conference takes place in sunny San Diego from April 29th until May 2nd, and it gives you 3 days of 100% PowerShell content.  I’m fortunate enough to be attending this conference as well, and I’ll be giving sessions about proxy functions and about WMI and PowerShell.  If you do attend, please make a point to say hello and introduce yourself if I haven’t met you already.

Here’s a quick look at the content that is being presented at the PowerShell Deep Dive this year:

Title Speaker(s) Date
FIM PowerShell Workshop Craig Martin Sunday, April 29, 2012
Keynote Jeffrey Snover Monday, April 30, 2012
8:00 AM to 10:00 AM
When old API’s save the day (pinvoke and native windows dlls) Tome Tanasovski Monday, April 30, 2012
10:30 AM to 11:05 AM
Get Your Game On! Leveraging Proxy Functions in Windows PowerShell Kirk “Poshoholic” Munro Monday, April 30, 2012
11:10 AM to 11:45 AM
Using Splunk Reskit with PowerShell to revolutionize your script process Brandon Shell Monday, April 30, 2012
1:00 PM to 2:15 PM
Lightning Round Determined at event Monday, April 30, 2012
2:20 PM to 3:05 PM
Remoting Improvement in Windows PowerShell V3 Krishna Vutukuri Monday, April 30, 2012
3:10 PM to 3:45 PM
New Hyper-V PowerShell Module in Windows Server 8 Adam Driscoll Monday, April 30, 2012
4:15 PM to 5:30 PM
Formatting in Windows PowerShell Jim Truher Tuesday, May 1, 2012
8:00 AM to 8:35 AM
PowerShell and WMI: A Love Story Kirk “Poshoholic” Munro Tuesday, May 1, 2012
8:40 AM to 9:15 AM
PowerShell as a Web Language James Brundage Tuesday, May 1, 2012
9:45 AM to 11:00 AM
PowerShell V3 in Production Steve Murawski Tuesday, May 1, 2012
11:15 AM to 11:50 AM
Lightning Round Determined at event Tuesday, May 1, 2012
11:55 AM to 12:30 AM
How Microsoft Uses PowerShell for Testing Automation and Deployment of FIM Kinnon McDonell Tuesday, May 1, 2012
1:45 PM to 3:00 PM
Job Types in Windows PowerShell 3.0 Travis Jones Tuesday, May 1, 2012
3:15 PM to 3:50 PM
Creating a Corporate PowerShell Module Tome Tanasovski Tuesday, May 1, 2012
3:55 PM to 4:30 PM
Cmdlets over Objects (CDXML) Richard Siddaway Wednesday, May 2, 2012
8:00 AM to 8:35 AM
Build your own remoting endpoint with PowerShell V3 Aleksandar Nikolic Wednesday, May 2, 2012
8:40 AM to 9:15 AM
PowerShell Workflows and the Windows Workflow Foundation for the IT Pro Steve Murawski Wednesday, May 2, 2012
9:45 AM to 11:00 AM
Incorporating Microsoft Office into Windows PowerShell Jeffery Hicks Wednesday, May 2, 2012
11:15 AM to 11:50 AM
TBD Bruce Payette Wednesday, May 2, 2012
11:55 AM to 12:30 PM

Wow, that’s a lot of PowerShell!  With all of these opportunities, whether you’re trying to learn PowerShell without incurring a huge expense, or travelling to conferences to learn more about technologies there, there’s definitely something for everyone in what looks to be an awesome “Learn More About PowerShell” month.

Good luck, wherever your learning adventures take you!

Kirk out.

PowerSE 2.7 KB: PowerShell profile does not load on startup

Note: This blog post refers to an issue identified in PowerSE 2.7.0. It has been corrected in PowerSE 2.7.1, which is now available.

With the release we published yesterday, both PowerSE and PowerWF received a new feature: product-specific profiles.  This feature allows you to have profile scripts that you only want run in PowerSE or PowerWF run there so that you don’t have to use if statements to check the host name in your profile scripts.  With this feature we also created the initial PowerSE and PowerWF profile scripts such that they dot-source the native PowerShell profile script by default so that what runs in PowerShell also runs in PowerSE.

Unfortunately there is one small detail that was left out of the PowerSE installer for this feature: the installation of the initial PowerSE-specific profile. As a result, if you download PowerSE 2.7, your PowerShell profile won’t run right away.  Fortunately the fix is simple.  All you need to do is invoke this script from inside PowerSE 2.7:

if (-not (Test-Path -LiteralPath $profile)) {
    Set-Content -Path $profile -Value @’
if (Test-Path -LiteralPath $profile.CurrentUserPowerShellHost) {
    . $profile.CurrentUserPowerShellHost
}
‘@
}

Once you have run that script, your PowerSE profile will exist and it will be defined to load your PowerShell profile.  Restart PowerSE 2.7 and you’ll have your PowerShell profile loaded by default again.

Note that this does not apply to PowerWF users, the profile scripts were added correctly to the installer for that release.

My apologies for the inconvenience.  We hope to have this resolved in the product itself very soon.  In the meantime this short script should work around the issue for you.

Kirk out.

PowerWF and PowerSE 2.7 are now available

This morning PowerWF and PowerSE 2.7 were released to the web and they can now be downloaded from http://www.powerwf.com.  These releases offer a lot of new value to PowerWF and PowerSE users, as follows:

PowerWF 2.7 Highlights

New Start Page with New Workflows

The start page in PowerWF has been completely redesigned to provide immediate value out of the box for PowerWF customers.  The new design highlights the Workflow Library that is included with PowerWF, allowing customers to play workflows in the library without opening a workflow or script document.  Users can also customize the workflows on the start page and add their own groups of workflows for easier runbook automation.  This immediate out of the box value is included for PowerWF customers to allow them to leverage the power of Workflows and PowerShell in their environments without requiring any knowledge of PowerShell or Workflows.

New Management Packs for System Center Service Manager (SCSM)

PowerWF for Service Manager has always included several useful management packs for SCSM in the product.  In this release, even more management packs for SCSM have been added.  Now, with a click of a button you can deploy management packs that automatically close resolved incidents, expire inactive problem announcements, cancel pending activities for closed change requests, identify problems from incident trends, notify incident authors about unresolved incidents, and get SCSM statistics.  These management packs are only available for licensed users of PowerWF for Service Manager.

Improved Toolbox Search

The search engine in the Activity toolbox just got better!  Now you can search using command names or keywords and PowerWF will return the best matches based on the terms you provided.  This includes searching with keywords that are only referenced in activity documentation and not in the command name itself.  For example, if you’re a VMware administrator, simply entering “vMotion” into the search box will reveal the MoveVM activity that is necessary to perform vMotion tasks.

Product-Specific Profile Support

PowerWF now uses its own product-specific profile support, and it updates the $profile variable to include the paths to each of the relevant profiles that you use. By default the PowerWF profile dot-sources the native PowerShell console profile, however you can change this behaviour as required by simply modifying the profile yourself in PowerSE.

PowerSE 2.7 Highlights

Easier Breakpoint Management

Breakpoint management in PowerSE just got a lot easier.  PowerSE now includes a Breakpoints pane to allow you to see all breakpoints you have set in your scripting environment, and you can now manage breakpoints using the breakpoint cmdlets and see the breakpoints you have created in the Breakpoints pane.  This gives you easy creation of line breakpoints using the Toggle Breakpoint feature or command and variable breakpoints using the Set-PSBreakpoint cmdlet (or sbp alias for short).

Breakpoints Preserved Across Sessions

Breakpoints are now automatically preserved across sessions, allowing you to continue debugging your scripts from one session to the next.  They are also preserved when you close a file, so you won’t have to reset breakpoints each time you return to a script you were working on.  You can still remove breakpoints of course, using the Toggle Breakpoint feature or the Remove-PSBreakpoint cmdlet.

Improved Help Search

PowerShell help topic files are now included in the help search pane, allowing you to search for help for integral keywords like if or foreach, or for topics like “Advanced functions”, or you can learn more about remoting by searching for “Remote”.  Also, if no results are found when you search, PowerSE will now include a keyword search in command descriptions to allow for users to discover commands using related terms, such as “vMotion”.

Product-Specific Profile Support

PowerSE now uses its own product-specific profile support, and it updates the $profile variable to include the paths to each of the relevant profiles that you use.  By default the PowerSE profile dot-sources the native PowerShell console profile, however you can change this behaviour as required by simply modifying the profile yourself in PowerSE.

And that’s not all!

This shows you a few of the highlights of this release, but of course there were plenty of bug fixes, some performance improvements, and a few other minor enhancements that were included as well.  Whether you’re a current PowerWF or PowerSE customer, or someone who is looking for great tools for working with PowerShell, Workflow, and Management Packs, I strongly encourage you to give this release a try and let us know what you think.

Kirk out.

Essential PowerShell: To alias, or not to alias, that is the question

Recently there was a discussion between community experts and a product team about a module they are working on.  The topic being discussed was cmdlet aliases: whether or not they should provide aliases for their cmdlets out of the box and if so, how they should be provided.  Aliases are great for ad-hoc PowerShell work, which is what most PowerShell users do at this point, and incredibly useful when you’re trying to put out a fire and managing your infrastructure using PowerShell.  However, there are many important things that module authors need to consider when planning aliases for their cmdlets, as follows:

1. There are many cmdlets out now, and more and more every month.  Coming up with a vsa (very short alias) that is unique is a challenge at best, and the more time goes by the more tla’s (three-letter aliases) will get used up.  The likelihood of an alias conflict is already high, and increasing all the time given the number of commands that are available both from Microsoft and from third party vendors.

2. The land grab with alias names is worse than it is with functions or cmdlets.  With functions or cmdlets, you can have multiple modules loaded with conflicting names and access either command using the fully qualified command name.  With aliases though you are not provided this same capability – there can be only one.  Aliases are simply commands set to a single value and they cannot be qualified using a module name qualifier to disambiguate if a name conflict arises.

3. Depending on how careful (or not) that developers are, it is very easy for a module author to completely take over (overwrite) an existing alias with no warning or message indicating that this has happened, resulting in potential command hijacking between module teams.  A simple call to Set-Alias does this without warning.  On the flipside, if developers don’t hijack aliases, then some of the aliases they would otherwise create may simply not be defined.

4. When aliases are hijacked, unloading a module doesn’t correct the problem because an alias that was overwritten by a module alias will simply become completely unavailable when the alias is removed as the module is unloaded.

As far as I am aware, this situation does not improve with the next version of PowerShell either, so it’s years away from getting better.

Believe it or not, even with these things in mind, I’m actually still pro aliases.  I just think that some extra care/thought needs to be put into their definition.  There is no real standard here that both satisfactorily addresses the issues identified above and that allows for consistency across companies/teams at this time.  Given that is the current state of affairs, if you are considering aliases for your module I recommend one of the following approaches:

1. [SAFEST] Rather than trying to come up with something that can be shipped despite these issues, at this time I think aliases would be best addressed in a "tips and tricks" type of blog post, proposing a short script that defines some useful aliases for the module/snapin in question in order to allow admins to be able to deal with fires quickly using ad-hoc PowerShell commands via some aliases.  Such a script should generate warnings whenever a name conflict is discovered so that users are aware when an alias either cannot be created or is overwritten.

2. [EXPERIMENTAL] Ship aliases with your module, but try to make sure they really are unique.  For example, if you’re a vendor whose company name starts with Q, you could prefix all of your aliases with "q".  This is attractive because there are no verbs that start with "q", so right from the start you’ve dramatically reduced the chance that you’ll have a conflict, setting yourselves up better to have aliases that belong to you.  Then you would only have to coordinate within your company to make sure the aliases used across teams are unique.  This isn’t foolproof though because there may be multiple products/vendors that adopt the same standard, and if the name of your company or product starts with G, the likelihood of a conflict would be much higher (the alias prefix used for "get-*" cmdlets is "g") so you may want to choose a pair of letters instead.  Regardless, you’ve likely reduced the risk, and you could generate a warning whenever you run into a conflict that prevents an alias from being created.

3. [RECOMMENDED] Lots of 1 and a little bit of 2: use unique alias names that work for your product team/company, but don’t ship them with the module.  Instead, push them out as a value add on a blog post, and see how the community responds.  At the same time work with MVPs and Microsoft to get these issues addressed such that a shorthand system for command names does work.  Some MVPs, already proposed a few things to the Microsoft PowerShell team that could help here (aliases for module names for one — think PS\gsv for a core PowerShell version of Get-Service or EX\gu for the Get-User cmdlet that comes with the Microsoft Exchange module or AD\gu for the Get-User cmdlet that comes with the Microsoft Active Directory module, and so on), but more discussions need to happen and this will take more time.

I recommend the third option because given the current issues with alias hijacking and with no support for disambiguation, it seems to be the best solution for now (from my perspective at least).  If you have come up with other alternatives that resolve these issues, please share them with the community so that this improves going forward.

Hope this helps,

Kirk out.

PowerShell MVP for 2012

Every year around Christmas I anxiously await the New Year to see if I receive the Microsoft MVP award again that year.  Well that email came on January 1, 2012, and I’m quite thrilled about this one because it’s a milestone this time (year 5 as a PowerShell MVP).  Thanks to the community for being so great to work with, and thanks to Microsoft both for recognizing individual efforts with the MVP program and for creating such great products like Windows PowerShell!  Work has never been so much fun!

Kirk out.

PowerSE 2.5.3 is now available

A little over a week ago we released PowerSE 2.5.3 to the web.  You can download the latest release here.  This release includes many great improvements to the PowerSE product, many of which were requested by you, so thanks for your feedback and please keep it coming!

No time limit for freeware

With this release, we’ve removed the requirement to re-download this product every 60 days.  This was our number one feature request since we made PowerSE a freeware product.  Now when you download PowerSE 2.5.3, it is truly freeware and you can use it as long as you like!

PowerVI Integration

Since PowerVI has joined the Devfarm family of products, we have now improved the integration between PowerVI and PowerSE and PowerWF. This enables easier authoring and testing of VMware automation scripts and workflows before you publish them to be integrated in the vSphere client, and it highlights one of the greatest values of the Devfarm products – the rich integration between them that make everything much easier.

Tabs to spaces support

We’ve added support for configuring how tabs are used in the PowerSE Script Editor.  If you want spaces inserted when you press the Tab key while editing scripts, all you need to do is to set $psise.Settings.AutoConvertTabsToSpaces to $true in the embedded console.  If you want the tab size to be something other than the default value of 4, you simply set $psise.Settings.TabSize to the number of spaces you want to use for tab characters.  These only need to be set once, so you can simply make the calls in the embedded console and then you’ll always have it configured that way going forward.

Enhanced history pane

The history pane in PowerSE has always been useful, but now it’s much better!  With the history pane in PowerSE 2.5.3, you can identify which commands were successful and which were not, all at a glance by looking at the icon.  You can also tell which commands were allowed to run to completion and which were cancelled.  Most importantly, you can identify the duration of any command that you run, so if you are trying to get the most performance from your scripts, this is an easy way to compare the performance for several related commands so that your scripts run as fast as they can.

Greatly improved support for international environments

In previous releases of PowerSE, there were a number of defects preventing international keyboard layouts (i.e. those other than “US English”) from working properly in the embedded console.  Those defects have been fixed, so now you can use the embedded console with international keyboards just fine.

We also added support for Unicode characters to the embedded console, making it easier for customers to get the output they expect regardless of where they happen to be.

Multi-select support in the File|Open dialog

With PowerSE 2.5.3, you can open multiple files in one folder at once by simply selecting the files you want before you click on the Open button.  This can be a big timesaver when you are working with modules containing many files!

Smarter variable Intellisense

When you enter a variable name in a script, it can be difficult to determine if you are entering the name of an existing variable or if you are creating a new variable.  Previous releases would sometimes complete a variable name incorrectly when you were in fact creating a new variable name.  This shouldn’t be a problem any longer, because we now allow you to enter new variable names and the auto-completion should only happen when you want it to happen.

Proper ps1xml file support

In PowerSE 2.5.3, if you are working with ps1xml files, you will now get proper Intellisense as well as auto-completion of xml elements as you would expect.

Fast clearing of the embedded console window

In today’s era of PowerShell, we all want to do more in less time, so much so that even typing in cls in the embedded console and pressing Enter can be cumbersome when you do it repeatedly.  PowerSE 2.5.3 allows you to clear the embedded console window at any time by simply pressing Ctrl+Del.

And more…

This is just a short list of some of the key changes we have made in this release.  There are others that I want to talk about, but I’m going to save a few for follow-up blog posts.  We’ve been spending a lot of time on PowerSE recently, and between our hard work and your great feedback, we’ve built a fantastic, best-in-class PowerShell script editor!  If you write PowerShell scripts, I encourage you to give this release a try, and be sure to let us know what you think!  Also, if you have any questions, feel free to leave me a note on my blog or pop over to www.devfarm.com and ask us directly in the chat window.  We’re always listening!

Thanks,

Kirk out.