Determining Registry Value Data Type

PowerShell can read and write Registry keys and values easily, but there is no a built-in way to check the data type of a given value. To find out the data type of a value, first access the Registry key as usual. Then, use its GetValueKind() method. This example...

Creating Colorized Excel Output (Part 2)

In a previous tip, we illustrated how you can feed HTML data to Excel in order to create formatted Excel sheets. Today, we'll show you an easy way to create color-coded data. Instead of having PowerShell create HTML (via ConvertTo-Html), you can create the HTML...

Creating Readable CSV-and HTML-Output

When you convert PowerShell results to CSV or HTML output, you may have discovered that some properties don't display correctly. PowerShell cannot correctly convert arrays to strings and instead displays the array data type. Here's a sample: # use extension...

Creating Colorized Excel Output

PowerShell can send data to Excel using CSV files easily. Here's a short script creating a list of running services and opening it in Excel (provided you have Excel installed of course): $Path = "$env:temp\tempfile.csv" Get-Service | Export-Csv -Path...

Finding Unused Drive Letter

Here's a simple way of finding unassigned drive letters: If you just want any unused drive letter, pipe the result to Get-Random. This approach uses the fact that PowerShell creates a function for each available drive, so the code tests whether or not there is a...

Using Bitwise Shift Operators

PowerShell 3.0 introduces two new operators to bitwise shift. You can use these, for example, to convert GB to MB or KB to GB: -shr 10 basically does the same as dividing by 1024, whereas -shr 20 divides by 1MB. Likewise, -shl does the opposite. ReTweet this Tip!

Preventing Debugging (Part 2)

In a previous tip we explained how you can tell PowerShell not to debug certain functions by adding a special attribute: function test { [System.Diagnostics.DebuggerHidden()] param($a) Get-Service } So when you step through code using the PowerShell debugger, the...

Adding Suggestions to PowerShell Console

Suggestions are little pieces of text that can appear next to a PowerShell error message to better explain what went wrong. Suggestions only work in the PowerShell console. They do not work in the ISE editor. There are only three suggestions hard-coded into...

Printing from an Android device using FireMonkey

Printing from an Android device using FireMonkey

Printing from an Android device requires a little bit more setup than in iOS where you simply connect to an AirPrint capable printer (like my Epson XP-400). However, Android printing appears to work with any Wifi printer (or PC connected printer), so its more...

Examining Certificates

Here's how you can pick a certificate from your certificate store. This line will return certificates that have "Tobias" in the subject: Next, you can "unfold" all properties and display them as plain text: Or, you can display only selected...

Removing Certificate Plus Private Key

Starting with PowerShell 3.0, the certificate provider has become a lot more powerful. It can now easily delete certificates plus their associated private key (which you should only try if you clearly understand what it means to get rid of a digital certificate). This...

Preventing Flashing Console Window

When you run a console command inside a non-console PowerShell host (like the ISE editor), there will be a flashing window, indicating that the host is launching a temporary console window to host the console command. That's no bad thing, but if you must prevent...

Changing Current Time Zone

In a previous tip you learned how PowerShell can list all available time zone IDs. Today, we show you how to set the time zone using the utility tzutil.exe. First, here's a helper function that returns the correct time zone ID when you submit part of its name:...

Get Time Zone Info

There is a little known utility called tzutil.exe which can both set the current time zone and get all available time zones. Today, let's check out how PowerShell can embrace raw output and help you get what you want. When you dump all available time zones, you...

Finding Office Installation Path

Microsoft Office has many different versions and exists as a 32-bit and 64-bit edition. Finding the installation path with PowerShell can still be surprisingly simple once you understand the power of wildcards. The next line will return the Excel installation path...

Hiding Code from ISE Debugger

Typically, when you set breakpoints in your script and then step through your code using F11 or "Debug/Step Into", the debugger will visit all lines that are executed. Sometimes, however, you may not want to step through some functions, or you want to make...

Exploring PowerShell "Suggestions"

In the PowerShell console, you may have noticed "suggestions" that appear with common errors. Suggestions are designed to help you better understand the error. Suggestions are hard-coded into PowerShell and only appear in the console. They do not appear in...

Analyzing PowerShell Errors

PowerShell logs all errors in $error variable (unless the cmdlet uses -ErrorAction Ignore). $error contains the error records which in turn contain a property named HistoryID that links to the command that produced the error. By looking up the history list, you can...

Using Script Validators with Variables

As pointed out in a previous tip, PowerShell 3.0 now supports the use of validators for variable assignments. This is a great way of ensuring that a variable cannot contain illegal data. One of the most versatile validators is the ValidateScript attribute. This...

Waiting for Service State

Most high-level cmdlets dealing with services have built-in code to wait for state changes. So when you run Restart-Service to restart a service, the cmdlet will pause the script until the service indeed has restarted, and even display a warning message if this takes...