When you select code in the PowerShell ISE and copy it to the clipboard, it is copied in RTF format and preserves all color coding and font...
powertips
Creating WinForms GUIs in PowerShell
While it is recommended to use the modern WPF technology to create PowerShell user interfaces, you might still want to occasionally use the older...
Using “Exit” to Communicate with Linux
When a PowerShell script ends, you can run the command “Exit” and submit a numeric value. This has been good practice in the Windows...
Capturing Linux Output
If you run PowerShell on Linux, you can combine Linux and PowerShell commands. To take the output of a Linux command and assign it to a PowerShell...
Test for File or Folder
Test-Path can check whether a file or folder exists. If you add -PathType and specify Leaf (for files) or Container (for folders), the result can be...
System Memory, Units, and Rounding
Sometimes, you’d like to use different units of measurements. The total system memory is reported in bytes, for example. Here are some...
Creating Time Spans
You can use New-TimeSpan to define “amounts” of time, and then add or subtract them from dates. Here is an example: $1Day = New-TimeSpan...
Waiting for Processes to Exit
Sometimes, a PowerShell script needs to wait for external processes to finish. Here is what some users do: $processNameToWaitForExit =...
Using PowerShell Remoting with PIN-enabled Accounts
If you have set up a PIN to log into your computer, PowerShell remoting against your own machine may fail with a weird error message: PS C:\>...
Separating Results by Property Value
If you use PowerShell remoting to receive information from remote machines, you can use fan-out simply by specifying more than one computer name....
Analyzing Result Frequencies (without Wasting Memory)
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...
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...