Use Group-Object to group objects based on shared property values, but don’t forget to use –NoElement parameter to discard the actual objects and...
Powershell
Finding Unapproved Verbs
Cmdlets and functions should use only approved verbs to make it easier on user to find commands, and improve consistency. Here is quick audit code...
Most Popular Verbs
Safely Encrypting and Decrypting Text
When you encrypt secret information, the challenge is to find a good secret. One particular safe secret would be your Windows identity, paired with...
Watch Out When Combining -Force and -WhatIf!
The -WhatIf common parameter turns on simulation mode, so a cmdlet won’t change anything and instead report what it “would have”...
Creating File Shares
In Server 2012 R2 and Windows 8.1, there are many useful new modules with cmdlets such as New-SmbShare which creates new file shares easily. If you...
Using Custom Scopes to Discard Any Output
Yesterday we looked at custom scopes to automatically restore variables and clean up behind your code. Custom scopes can also be used to discard any...
Using Custom Scopes
When you change variables, you might need to clean up later and ensure that you reverted them back to some default value – unless you use...
Catching Errors from Native EXEs
Ever wondered how you can catch errors emitted by native console EXEs? PowerShell’s error handlers can only deal with .NET code. Here is the...
Advanced Error Handling: Rethrowing Exceptions
When you handle errors, you may sometimes want to replace the original exception with your own. Here is a sample: function Do-Something { # function...
Launching Applications as Someone Else
Let’s assume you would like to open multiple PowerShell consoles running under different identities – or launch whatever application you...
Shed Light into the PowerShell Version Jungle
Meanwhile, there are five major versions of PowerShell around. Toss in the new minor versions such as PowerShell 5.1 on Windows 10 and Server 2016....
Fixing PowerShell 5 Help Bug
When you download PowerShell help via Update-Help, there was a bug in PowerShell 5 that might be fixed by now: text-based help files had the...
Prohibiting Positional Parameters
When you create PowerShell functions, parameters can be named or positional. Here is an example: If you’d like to detect illegal characters in...
Using Named Parameters in PowerShell Functions
When you create a PowerShell function, all parameters are positional until you start adding the “Position” attribute. Once you start to...
Launching PowerShell Hidden
Sometimes a PowerShell script should just produce something, for example a report, which then opens in Excel or notepad. You don’t want to...
Time Zone Management in PowerShell 5.1
PowerShell 5.1 (available on Windows 10 and Server 2016) comes with some new cmdlets to manage computer time zones. Get-TimeZone returns the current...
Exploring Function Source Code
The only fundamental difference between cmdlets and functions in PowerShell is the way how they are programmed: functions use plain PowerShell code,...
Running 32-bit Code on the Same Machine
If you need to run 32-bit PowerShell code from within a 64-bit script, and provided you are Administrator and use remoting, you can remote against...
Modern Replacement for systeminfo.exe
For ages, systeminfo.exe returned all profiling information for a computer, and could made object-oriented in Powershell – somewhat: PS...
Built-In Support for Local Accounts
Beginning in PowerShell 5.1, there is finally built-in support for local user accounts. PowerShell 5.1 is currently available with Windows 10 and...
Careful with Add-Member!
Frequently, Add-Member is used to create custom objects, for example like this: $o = New-Object -TypeName PSObject $o | Add-Member -MemberType...
How PSCustomObject Really Works
In a previous tip we explained how PSCustomObject can create new objects really fast: $o = [PSCustomObject]@{ Date = Get-Date BIOS = Get-WmiObject...
Fast Approach to Creating New Objects
To wrap up multiple pieces of information, you best store them in custom objects. The easiest and fastest way is to use the PSCustomObject:...