Occasionally, you may see a bunch of processes named "svchost" in your task monitor or Get-Process output. These processes are hosts for Windows...
Powershell
Identifying Services by ProcessID
Group-Object is a great cmdlet to create lookup tables. If you wanted to identify a Windows service by its process ID, here is a way: $serviceList =...
Creating Real Classes
PowerShell introduces class support in PowerShell 5.0, but you can define your own classes in other PowerShell versions as well. Simply use C# code...
Adding Test Hosts to PowerShell ISE
To quickly open new test hosts inside the PowerShell ISE that ships with PowerShell 3.0 and better, here is a small helper function: #requires...
Using PowerShell Tabs in the PowerShell ISE
The PowerShell ISE shipping with PowerShell 3.0 and better is actually a multi-host. It can host multiple separate instances of PowerShell. To add a...
Defining Default Parameters
PowerShell can define defaults for any parameter, so if you wanted to always submit a default value for Get-ChildItem‘s –Path parameter,...
Outputting and Assigning at the Same Time
If you’d like to assign the results of a command to a variable, and at the same time output the results, too, here are two approaches. You can...
Common Parameters and Optional Common Parameters
Cmdlets and advanced PowerShell functions can have their own parameters, but they also always inherit common parameters. To see a list of common...
Displaying Object Properties One per Line
Sometimes you may want to get a good overview of the data contained in an object. For example, if you query the PowerShell process and display it in...
Listing (and Checking) PowerShell Profiles
Profile scripts are PowerShell scripts that launch automatically once PowerShell starts. The path to the primary profile file can be found in...
Creating New Objects – Oneliner
Sometimes you may want to create your own objects to store multiple pieces of information. Here is a pretty dense oneliner that illustrates a quick...
Mapping Network Drives (Part 3)
If you migrated from VBScript to PowerShell, you may remember how VBScript mapped network drives. This option is still available in PowerShell....
Mapping Network Drives (Part 2)
Beginning with PowerShell 3.0, you can use New-PSDrive to map network drives. They will be visible in File Explorer as well. Here is some sample...
Mapping Network Drives (Part 1)
PowerShell supports console commands, so if you need to map a network drive, often the most reliable way is to use good old net.exe like this:...
Executing with Timeout
Start-Process can start processes but does not support a timeout. If you wanted to kill a runaway process after a given timeout, you could use an...
Executing Selected Code as Admin
If you need to run selected parts of your script with Administrator privileges, you could temporarily launch a second PowerShell with Administrator...
Finding Drive Letters
Here is a simple function to find out the reserved drive letters: #requires -Version 3 function Get-DriveLetter { (Get-WmiObject -Class...
Quickly Setting Multiple Environment Variables
To quickly (and permanently) set a bunch of environment variables, here is a nice approach: $hashtable = @{ Name = 'Weltner' ID = 12 Ort =...
Quickly Finding Scripts
To quickly locate a PowerShell script anywhere in your MyDocuments folder, take a look at this Find-Script function: #requires -Version 3 function...
Hiding Variable Content
When you override the ToString() method of an object you control how this object is displayed. The object content stays untouched, though: $a = 123...
Adding Additional Information to Objects
When you retrieve results, you may want to add additional properties to the results so later you know where they came from. Attaching additional...
Appending Extra Information to Primitive Data Types
Maybe you'd like to tag a variable and provide some extra information. In PowerShell, use Add-Member and attach NoteProperties or ScriptProperties...
Simple Replacement for INI Files
If you'd like to keep settings outside of your script and store them in a separate config file, then you can use all kinds of data formats for...
Remove Array Elements
Did you ever need to compare two arrays? Compare-Object might help. Check this out: $array1 = 1..100 $array2 = 2,4,80,98 Compare-Object...