Sunday, May 23, 2010

PowerShell Admin Module

I’ve been playing a bit with a Codeplex project called PowerShell Admin Modules (PSAM). Developed by Richard Siddaway, PSAM is intended to supply a number of PowerShell modules for use by IT Pros. The first of these modules contains 6 functions that work with shares, as follows:

  • Get-Share
  • Get-ShareAccessMask
  • Get-ShareSecurity
  • New-Share
  • Remove-Share

Using this module is easy. First download the zip file from Codeplex and expand the contents into your modules folder. Then import the module using Import-Module. It looks like this:

PSH [C:\foo]: import-module PAMSHARES
PSH [C:\foo]: get-command * -module pamshares

CommandType     Name                                                Definition
-----------     ----                                                ----------
Function        Get-Share                                           ...
Function        Get-ShareAccessMask                                 ...
Function        Get-ShareSecurity                                   ...
Function        New-Share                                           ...
Function        Remove-Share                                        ...
Function        Set-Share                                           ...

PSH [C:\foo]: new-share c:\foo foo2
Share foo2 was created
PSH [C:\foo]: get-share foo2

Name                                    Path                                    Description
----                                    ----                                    -----------
foo2                                    c:\foo

PSH [C:\foo]: remove-share foo2


The module works well enough although get-share does not seem to support wildcards and the order of the parameters in New-Share is different from that of Net Share (for those of us who even remember Net Share!). I’ve posted a fix to the wildcard issue on CodePlex. For the other issue, one could just change the order of the parameters in New Share. This is the joy of open source proejcts like this – you can fix ‘bugs’ and make your own changes as you see fit.

Friday, May 14, 2010

PowerShell Community Extensions (PSCX) 2.0 Released

A new version of the PowerShell Community Extensions (PSCX), version 2.0, has been released and is available from Codeplex (http://pscx.codeplex.com/releases/45101/download/121340). This free set of PowerShell extensions provides a number of very useful enhancements, particularly new/added cmdlets.

The main purpose behind the 2.0 release was to migrate the code from being a snap-in to being a module. As it’s a module, deployment is really simple – just Xcopy the files into your module folder and use Import-Module to load the module (typically you just put the Import-Module into my $profile). You can of course, put the module somewhere else and specify the full path using the Import-Module cmdlet.

PSCX also includes some NEW cmdlets, including:

  • ConvertTo-Metric
  • Get-AlternateDataStream
  • Test-AlternateDataStream
  • Remove-AlternateDataStream
  • Unblock-File
  • Get-LoremIpsum (lorem)
  • Get-TypeName (gtn)
  • Get-Uptime
  • Get-FileTail (tail)

This package is a great set of very useful extensions. Being module based, deployment is much simplified. I commend this release to all PowerShell users!

Wednesday, May 05, 2010

MSDN Webcast: Powershell for Data Professionals Tomorrow (May 5th)

I just got news of an interesting SQL PowerShell web cast coming up tomorrow. In the webcase, Microsoft SQL Server guru Aaron Nelson is going to look at how you perform everyday database administrator tasks using POwerShell. He’ll cover backing up user databases, scripting table objects, and evaluating disk space usage. The idea is to demonstrate how PowerShell scripts can be used to automating SQL Server activities.

Sign up for the web cast here: MSDN Webcast: geekSpeak: Powershell for Data Professionals (Level 200). I’ll try to post details of the recordings after the event for those that can’t make it.

Technorati Tags: ,,

Thursday, April 22, 2010

Digicert - Utility for Managing SSL Certs

Most of the readers of this blog will have used and possibly setup SSL on a web site. If you really, really know what you are doing and do it all the time, managing digital certs is relatively straigtforward. But for over-worked admins who DON'T do this daily, dealing with things like intermediate CAs, keys, etc, etc is just a mind-bending experience. It's also easy to make mistakes (for example, adding a root CA cert to your personal vs computer store).

Digicert, who sell digital certificates, have created a new and free certificate management utility. This utility provides a number of useful features including:

  • See all the SSL certificates installed on a server.
  • View details for all certificates.
  • Import and Export certificates either as a backupo or to copy/move certs between servers.
  • Test a certificate

You can download this utility from Digicert’s site for free – and you run it on the server you wish to test. Here’s what the UI looks like:

image

If you are using services that require digital certs, such as Communications Server (aka OCS), then this tool may well be very useful in helping to resolve certificate issues on your OCS/CS systems.

Wednesday, April 21, 2010

PowerShell Cmdlets Search via Bing

Microsoft this week released a new feature in the Bing search engine – a visual search of PowerShell Cmdlets. This is part of the Visual Search feature of Bing which allows you to search using visual images, versus just text. When you fire up the Visual Search , you will now see a “Visual Search” link.  You can then click through to see the PowerShell Cmdlets. Sadly, this is available currently only in the “en-us’ version of Bing, but it looks like this:

image

 

Along the left, you can see a number of categories (Top 12 Cmdlets, WMI Cmdlets, etc) as well as some ways to narrow down your search. I especially like the ‘Introduced in Version’ and ‘Remoting Uses’  As you can see in the above graphic, when you click on a cmdlet, you get more help information along the right, including basic cmdlet information and several links to more detailed help documentation. Although you can’t see it from the graphic above, this page seems to be generated by using WPF, so you get some pretty neat effects when you click on the left hand pane of this page!

Th PowerShell Cmdlets search feature is available on the US version of Bing only. Unlike Google, there seems no way to invoke country specific versions of Bing. You get what Bing works out to be your local variant. But with a little hacking, you can indeed get to the above page. The rather unfriendly URL is: http://www.bing.com/visualsearch?mkt=en-us&g=powershell_cmdlets&FORM=SGEWEB&qpvt=powershell#remoting=1&r=1. Alternatively, you can start at the Bing US home page and drill down from there (http://www.bing.com/visualsearch?mkt=en-us).

There will also be more cmdlets documented this way. I have no idea what the time table is, either for wider disbribution of this pretty cool feature, or when we’ll see more cmdlets being documented.

Technorati Tags: ,

Saturday, April 17, 2010

PowerShell Profile Files

PowerShell defines some special script files, called Profiles, that you can use to customise and configure a PowerShell Session, whether you are using Powershell.exe, PoweShellISE.exe or a customised version (e.g. Exchange Management Console). The neat thing about the profile is that it runs, at start-up of every PowerShell host, in dot sourced mode. Thus functions and variables defined in the profile persist in your shell.

For each PowerShell Host, you have up to four potential profiles:

  • AllUsersAllHosts
    • C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
  • AllUsersCurrentHost
    • C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShellISE_profile.ps1 (PowerShellISE.exe), or
    • C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1 (PowerShell.exe)
  • CurrentUserAllHosts
    • C:\Users\<username>\Documents\WindowsPowerShell\profile.ps1
  • CurrentUserCurrentHost
    • C:\Users\tfl\Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1 (PowerShellISE.,exe), or
    • C:\Users\tfl\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 (PowerShell.exe).

For both the CurrentHost files – these will vary depending on which host the script is run. Above shows the profile files for both PowerShell and PowerShell ISE. The profile files (obviously one each of the four!) run in the order noted above. This means the admin could, for example define some functions in the AllUsersAllHosts that you can override in your CurrentUser profiles.

As it turns out, there’s a very PowerShell one-liner you can run to return your host’s profile files (and can even tell you if the file exists!) This one-liner looks like this:

$profile | gm *Host* | % { $_.Name } | % { $p = @{}; $p.Name = $_ ;$p.Path = $profile.$_; $p.Exists= (Test-Path $profile.$_); New-Object PSObject -Property $p } | Format-Table –AutoSize

I’ve posted a similar script over on my PowerShell Scripts blog. The script I’ve posted on the PowerShell Scripts blog contains a Format-List (to look a bit better on the blog. You might prefer the Format-Table in the one-liner above.

 

Technorati Tags: ,

Wednesday, March 24, 2010

PowerShell Master Class – More Sessions

I’ve had a gratifying response to my first PowerShell Master Class event. Like all first time runs, you learn some things by running the event.  One of which is that three days is not long enough. So future events are not four days. Not that I neede dto learn it, but the last run shows that, given how vast V2 is,  there is stuff that even with four days, we still can’t cover. So I am planning an advanced seminar for later in the year – watch this space.

In the mean time, we have two more sessions currently planned:

I’m also discussing a further session in Stockholm in September along with a more advanced workshop also in September in Stockholm.

Master Class outline

The class outline is as follows:

Day 1 – The Basics of PowerShell

  • PowerShell Fundaments – the key elements of PowerShell including installation, setup, profiles
  • Discovery – finding your way and learning how to discover more
  • Formatting – how to format output nicely

Day 2 – From the command line to the script

  • Remoting – working with remote systems and PowerShell’s remoting feature.
  • Providers – getting into OS data stores
  • Scripting Concepts – automating everyday tasks including language constructs, error handling and debugging

Day 3 – Practical PowerShell

  • Modules – managing PowerShell in the enterprise
  • .NET/WMI/COM Objects – working with objects of all kinds, including WMI, COM, .NET and your own custom objectw
  • PowerShell and Windows Client/Server – how you can use built in PowerShell cmdlets and providers included with Windows 7 and Windows Server 2008 R2

Day 4 – Applying PowerShell 

  • PowerShell in Key Microsoft Servers - a look at PowerShell today in SQL, Exchange, SharePoint 2010, SCVMM/HyperV and CS 2010.
  • Taking it to the Next Level – stuff to do later!

Monday, March 22, 2010

And now for something quite different

I have a good friend that lives on the Big Island of Hawaii (Kona side). She runs a coffee plantation and a small Mac consultancy in her spare time. I’ve enjoyed her coffee for a long while (if only post was somewhat less expensive!).

She also rents out a room on the coffee estate for you to rent. The rate is US$50/night plus 12%tax). This is a real bargain near some great snorkelling and diving locations. The house is high enough up in the hills for good sleeping (and of course good coffee). And the place is pretty quiet which is good if you just want to get away from it all and chill.

Although the pictures are not the most artistic, Mahi House itself itself is fairly new – with parking!

 YourHouse

The room is also nice:

YourRoom

So if you are heading over to Hawaii and looking for a bargain place to stay, please let her know (MahiHouse@Yahoo.com).

Technorati Tags: ,

Official Microsoft Team Blogs

Over the past few years, Microsoft has gotten big on blogging. A number of employees blog their activities to a personal blog. Additionally, a number of product teams blog, as a team. Some of these, such as You Had Me At EHLO (The Exchange Team Blog) are fantastic, with re rest mostly very good.

Naturally, there's a page to see an Official list of Microsoft Team Blogs / Microsoft Blogs!

There is some great information here -if you have the time to read it all!
Technorati Tags: ,

Saturday, March 20, 2010

Windows PowerShell Cookbook

I see Lee Holmes is updating his Windows PowerShell Cookbook - a nice book that is one of the three I carry around when I train PowerShell. If you head on over to the O'Reiley Labs site, you can view the emerging next edition.

If you sign-up/register (see link at the top of the page), then you can make coments etc.

Wednesday, March 17, 2010

PowerShell Master Class in Stockholm – A Great Success (and now a repeat!)

The PowerShell Master Class in Stockholm last week was three long days of PowerShell Fun. The course went very well and the delegates great.

The training centre, LabCenter.SE is an amazing place to teach. The rooms are well kitted out (killer sound systems), good lighting, great chairs, and very good computers. It’s a very happy environment – lots of nice refreshments, and the people are all wonderful. I think it’s one of the nicest centres I’ve taught at in a long while.

The delegates enjoyed the course they asked more more! So sometime late summer, early Autumn, I’ll go back for 4 more days of PowerShell Applied – lots more in depth labs etc. And given the market, the centre want me to come back to Stockholm to teach another run of the PowerShell Master Class in May (May 25-28) – although the web site is currently showing the wrong dates and length! We are making this a four day class – so even more fun and all the more PowerShell! 

To register for this course, you shoudl go to http://www.labcenter.se/shoppingcart.aspx?t=1 (although I note the price and duration is not yet correct so you might hold off booking for a wee while till I get the site updated).

Tuesday, March 16, 2010

Updating Reskit.Net

In last week’s PowerShell Master Class in Stockholm, I noticed that reskit.net was a tad out of date. I also agreed to put up a references page for the delegates to share all my many book marks. I found an old copy of FrontPage (ancient but it does the business) and have made a start.

Thus far, I’ve tidied up the front page a bit, and have I’ve removed some of the really old contents. I also created and began populating a /PSMC sub folder and made a link to an already existing /PowerShell Folder. There were a bunch of very old Monad and PowerShell scripts that I’ve removed (these will migrate over to http://pshscripts.blogspot.com).

Please take a look and add come comments!

Technorati Tags: ,

Monday, March 15, 2010

SCCM PowerShell Module

The relentless community development on all things PowerShell continues unabated. Today, I found a module for use with System Center Configuration Manager (SCCM). This module contains the following functions:
  • Get-SCCMCommands
  • Connect-SCCMServer
  • Get-SCCMObject
  • Get-SCCMPackage
  • Get-SCCMCollection
  • Get-SCCMAdvertisement
  • Get-SCCMDriver
  • Get-SCCMDriverPackage
  • Get-SCCMTaskSequence
  • Get-SCCMSite
  • Get-SCCMImagePackage
  • Get-SCCMOperatingSystemInstallPackage
  • Get-SCCMBootImagePackage
  • Get-SCCMComputer
  • Get-SCCMUser
  • Get-SCCMCollectionMembers
  • Get-SCCMSubCollections
  • Get-SCCMParentCollection
  • Get-SCCMSiteDefinition
  • Get-SCCMSiteDefinitionProps
  • Get-SCCMIsR2
  • Get-SCCMCollectionRules
  • Get-SCCMInboxes
  • New-SCCMCollection
  • Add-SCCMCollectionRule
  • Add-SCCMDirUserCollectionRule

It looks a great start. And while I like how all the nouns are all prefixed, there is the danger that when the SCCM team eventually deliver native SCCM cmdlets, there is a danger of cmdletname collision down the line.

Monday, March 01, 2010

PowerShell Documentation Community Review

The Microsoft PowerShell doc team is looking for volunteers for the third documentation review cycle. This cycle is focusing on the needs of new and intermediate PowerShell users. And if you speak a language other than American or English, then they’re doubly interested. Shay Levy has some more details over on his site.
If you care about the documentation, particularly non English language material, then contact superstar and writer extraordinaire June Blender (JuneB@Microsoft.Com) or PowerShell community superstar Marco Shaw (Marco.Shaw@Gmail.Com). Please help make the documentation better.

Sunday, February 28, 2010

Discovery In PowerShell – Get-Help vs. Get-Command

Discovery is process by which a user will learn to use any product. The more discoverable any product is, the easier it is for new users to get started. A disoverable product enables any user both to leverage what they already know and to find more. PowerShell was designed to be, and I believe is, a discoverable product.

One example of this came up this week – looking at how you can find cmdlets (and other stuff) that you can run. By using Get-Help, Get-Command and some where clause foo, you can quickly locate and learn about cmdlets in your environment. And, this help information provides examples to illustrate the use of a particular cmdlet and some products (eg SCVMM) add additional About_* files.

Get-Command and Get-Help are similar but different. They both can be used to find cmdlets and other help information. So while sharing a similar usage, they return different information. Get-Help returns information on 4 categories: Alias, Cmdlet, Provider and HelpFile. Get-Command, on the other hand, returns information of 6 different command types: Alias, Application, Function, Cmdlet, ExternalScript and Filter.

Where this helps is knowing which cmdlet to use to search for what. If you are using pure PowerShell Cmdlets, modules and scripts, Get-Help will be your main discovery tool. But if you are also using console applications from, say earlier versions of SharePoint, then Get-Command will help to find the commands you might need.

The trick to getting the most out of these cmdlets is knowing how to search and the key to that is using wildcards. If you want to find out what cmdlets, etc, are available for a PSSession object,

 

PSH [C:\]: Get-Help *PSSEssion*

Name                              Category  Synopsis
----                              --------  --------
Register-PSSessionConfiguration   Cmdlet    Creates and registers a new session configuration.
Unregister-PSSessionConfiguration Cmdlet    Deletes registered session configurations from the computer.
Get-PSSessionConfiguration        Cmdlet    Gets the registered session configurations on the computer.
Set-PSSessionConfiguration        Cmdlet    Changes the properties of a registered session configuration.
Enable-PSSessionConfiguration     Cmdlet    Enables the session configurations on the local computer.
Disable-PSSessionConfiguration    Cmdlet    Denies access to the session configurations on the local computer.
New-PSSession                     Cmdlet    Creates a persistent connection to a local or remote computer.
Get-PSSession                     Cmdlet    Gets the Windows PowerShell sessions (PSSessions) in the current session.
Remove-PSSession                  Cmdlet    Closes one or more Windows PowerShell sessions (PSSessions).
Enter-PSSession                   Cmdlet    Starts an interactive session with a remote computer.
Exit-PSSession                    Cmdlet    Ends an interactive session with a remote computer.
New-PSSessionOption               Cmdlet    Creates an object that contains advanced options for a PSSession.
Export-PSSession                  Cmdlet    Imports commands from another session and saves them in a Windows PowerS...
Import-PSSession                  Cmdlet    Imports commands from another session into the current session.
about_pssessions                  HelpFile  Describes Windows PowerShell sessions (PSSessions) and explains how to
about_pssession_details           HelpFile  Provides detailed information about Windows PowerShell sessions and the

Or try the following:

PSH [C:\]: get-command *PSSession*

CommandType     Name                                                Definition
-----------     ----                                                ----------
Cmdlet          Disable-PSSessionConfiguration                      Disable-PSSessionConfiguration [[-Name] <String[...
Cmdlet          Enable-PSSessionConfiguration                       Enable-PSSessionConfiguration [[-Name] <String[]...
Cmdlet          Enter-PSSession                                     Enter-PSSession [-ComputerName] <String> [-Crede...
Cmdlet          Exit-PSSession                                      Exit-PSSession [-Verbose] [-Debug] [-ErrorAction...
Cmdlet          Export-PSSession                                    Export-PSSession [-Session] <PSSession> [-Output...
Cmdlet          Get-PSSession                                       Get-PSSession [[-ComputerName] <String[]>] [-Ver...
Cmdlet          Get-PSSessionConfiguration                          Get-PSSessionConfiguration [[-Name] <String[]>] ...
Cmdlet          Import-PSSession                                    Import-PSSession [-Session] <PSSession> [[-Comma...
Cmdlet          New-PSSession                                       New-PSSession [[-ComputerName] <String[]>] [-Cre...
Cmdlet          New-PSSessionOption                                 New-PSSessionOption [-MaximumRedirection <Int32>...
Cmdlet          Register-PSSessionConfiguration                     Register-PSSessionConfiguration [-Name] <String>...
Cmdlet          Remove-PSSession                                    Remove-PSSession [-Id] <Int32[]> [-Verbose] [-De...
Cmdlet          Set-PSSessionConfiguration                          Set-PSSessionConfiguration [-Name] <String> [-Ap...
Cmdlet          Unregister-PSSessionConfiguration                   Unregister-PSSessionConfiguration [-Name] <Strin...

If you are looking for more conceptual information about some feature (typically the noun in the cmdlet name – as here “PSSession”) Get-Help will return the ‘About_’ topics, These help you to learn more about the underlying objects, as well as the help information about specific cmdlets. I personally use Get-Help to remind myself of the cmdlets names and spellings.

And finally – if you are using Get-Help on your local machine, you can usually specify the –online parameter. This opens up a browser window into Technet, pointing to the current documentation. If you look at the online help for Enter-PSSession (http://technet.microsoft.com/en-us/library/dd315384.aspx), you can see this page was updated mid December. The PowerShell writers do a fantastic job of fixing the online versions of the help. And they are working on a way to get these updates to you as fast as possible.

Saturday, February 27, 2010

PowerShell Master Class in Stockholm – Filling Up Quickly!

In a recent blog post, I mentioned the PowerShell Master Class I am running in Stockholm on March 9-11 2010 (see Http://Www.PowerShellMasterClass.Com for more details). I’m pleased to say the class is nearly full! I am looking forward to three great days with PowerShell!

NITkon – Day Of PowerShell in Norway

For those in or around Norway next month (well Wednesday March 17th to be precise), NITKon, a Norwegian education conference for IT Pros in Norway, is holding Deep Dive PowerShell – a full day Of PowerShell content. I think this is the first conference to hold a full day just on PowerShell!

The contents of the day look pretty good too:

  • PowerShell Modules – Bruce Payette (superstar member of the development team and outstanding author)
  • Proxy Functions – Dmitry Sotnikov (fellow MVP and the brains behind PowerGui)
  • PowerShell and Wmi – ME!
  • PowerShell and .NET/COM objects – ME again
  • Advanced Features in PowerGui – Dmitry Sotnikov
  • PowerShell Advanced Techniques – Bruce Payette

I can’t wait for this event. I’m always keen to see Bruce and Dmitry – they are awesome speakers. I hope we will be able to post the slides once the event is complete.

Hope to see you there.

Technorati Tags: ,

Tuesday, February 09, 2010

Formatting with PowerShell

PowerShell is an increasingly important tool for the IT Admin. In it’s early version, it didn’t do much, but with products like Exchange, SharePoint 2010, and System Centre being so PowerShell focused, it’s a tool every IT Admin needs to learn and learn how to leverage.

A key aspect of PowerShell is output – getting the output you need. In some cases, that output can be quick and dirty: how many mail boxes are currently on Mailbox-Server-1? Or how many handles has the DNS server used (and has that changed since last week).

But often, output needs to look good as well as being accurate. PowerShell has a wealth of formatting capabilities (and with 3rd party tools like PowerGadgets, you have a bunch more).

I’ve written a two part article for The Scripting Guys to explain some of these options. You can find Part 1 at: http://tinyurl.com/yhmvvul, and Part 2 at: http://tinyurl.com/ykt7wq6.

These articles are the basis for one of the modules in my upcoming PowerShell Master Class that I blogged about last week.  I’ve taken Module 3 of the class and turned it into these articles, although I’ll be adding some more stuff into the Master Class!

I’d be grateful for comments!

Sunday, February 07, 2010

Solarwinds – Free WMI Monitor

I am slowly pulling together my upcoming PowerShell Master Class. One of the modules looks at WMI objects and I’ve been searching for as many cool tools etc as I can find. Thanks to a couple of tweets (Shay and Doug!), I found a pretty cool free tool from Solarwinds, called WMI Monitor. This is a free download that does a number of things, including:

  • monitors the performance on a Windows server
  • leverages pre-built and community generated application templates for monitoring virtually any application
  • enables you to modify or design your own application templates with the built-in WMI browser

This tool is free, but you do have to register. Also – it’s a 60mb download! But if you are doing WMI scripting with PowerShell, it might well be worth the download.

Technorati Tags: ,,