Happy Birthday Pluralsight

Pluralsight is celebrating its 10th birthday today. As part of their celebration they are running a quick contest with a cool prize. They also asked authors for a birthday greeting or message. Since all of my courses are PowerShell related it seemed only fitting to do something like this:

Sure, hardly a practical use of PowerShell but it sure was fun to put together. Here is the script I ran.

No puppies were harmed in the making of this video. Enjoy and Happy Birthday!

Get Remote PowerShell Session Connections

magnifying-glass During a recent PowerShell training class we naturally covered PowerShell remoting. During the discussion I explained that a remote PSSession is essentially transparent to any currently logged on user. Unless of course you reboot the computer! One way you can identify a remote session is by the presence of the wsmprovhost process. You should see this process whenever there is a remote PSSession to the computer. So then the discussion turned to tracking who might have sessions across multiple computers which is especially helpful when dealing with disconnected sessions since you can only see your own sessions. I don’t have a perfect solution, but let’s see if this helps. Here is Get-PSRemoteSession.

This function takes a computername as a parameter. It does a quick ping to verify the computer is running. I probably should have made that optional, but I needed it at the time. The function then queries the computer using Get-CimInstance for all instances of the wsmprovhost.exe process. I’m using CIM because datetime values are automatically formatted which makes it much easier to add a custom property indicating how long the process, and presumably the remote session, have been running. I also add a custom property to get the process Owner. Due to a quirk (bug?) in the CIM cmdlets, I can even query a remote computer running PowerShell 2.0. When using a filter, the CIM cmdlets work with a v2 computer. I won’t question it but will take advantage of it.

By default, the function writes a summary object to the pipeline.

get-psremotesession-1

The one thing I have yet to figure out is a way to show what computer each session is connected from. Although even if I could make the correlation with an active network connection, I’m not sure that would help in the event of a disconnected session. Nor can I tell the state of the session from the process.

I included an option to get the full process object so you could run commands like this:

get-psremotesession-2

But I suspect for many of you the summary will suffice. Here are some examples.

get-psremotesession-3

get-psremotesession-4

get-psremotesession-5

If you kill the wsmprovhost process, that will break the PSSession so be careful. But at least now you have a way of identifying what sessions might be open. I hope you’ll let me know what you think. Enjoy!

Remove All but Most Recent PowerShell job

I like sending little PowerShell tweet tips, but this one is a bit too long for Twitter. Here is a one-liner to remove all but the most recent job result for each job name.

This assumes you have no jobs running and that you have multiple results for each job name which you might if you are running scheduled PowerShell jobs. In fact, I will be talking about scheduled jobs at the PowerShell Summit next week.

Advice, solutions, tips and more for the lonely Windows administrator with too much to do and not enough time.

%d bloggers like this: