WMI is a powerful technique to find out information about local or remote computers, and you may have used Get-WmiObject before to do so (if not,...
ps1
Using .NET Types Directly
Cmdlets contain pure .NET code, so thanks to cmdlets, you do not need to directly touch .NET code. You can, however. Here are a number of sample...
Using Workflows to Parallelize Code
If you want to execute more than one thing at once, there are many ways to implement this in PowerShell. One may be the use of workflows. They were...
Decorate Scripts with #requires Statements
PowerShell supports a number of #requires statements. Technically they are comments but PowerShell checks the requirements, and if they are not met,...
Do Not Mix Different Objects!
If you do output completely different objects, you may lose information. Take a look at this example: #requires -Version 2 $hash = @{ Name =...
Getting an Excuse
Here is a quick way of getting a good excuse - provided you have Internet access: #requires -Version 3 function Get-Excuse { $url =...
Who is Listening? (Part 2)
If you run at least Windows 8 or Windows Server 2012, you can use Get-NetTcpConnection to find out which network ports are in use, and who is...
Who Is Listening? (Part 1)
The good oldfashioned netstat.exe can tell you the ports that applications listen on. The result is plain-text, though. PowerShell can use regular...
Sending Objects to Notepad
In a previous tip we showed how you can send text to a fresh Notepad instance. Today, you get an enhanced version of Out-Notepad: you can pipe...
Send Text to Notepad
Notepad can be used to display text results. Typically, you would need to save text results to file, then have Notepad open that file. There is a...
Magic Underscore Variable
Here is a very special (and very underdocumented) way to use PowerShell parameters. Have a look at this function: #requires -Version 2 function...
Converting Currencies
PowerShell is an extremely powerful language and can access web services and web pages. If you combine that with dynamic parameters, you get a...
Counting Pages in a Word Document
Let's assume you have a bunch of Word files and would like to know how much pages they contain. Here is a function that takes the path to one...
Bringing Window in the Foreground
PowerShell can use Add-Type to access internal Windows API functions. This way, it is easy to bring any process window into the foreground. Here is...
Process Data (Part 3)
In parts 1 and 2, you learned how a PowerShell function can process information that was submitted to parameters or piped via the pipeline. In our...
Process Data (Part 2)
In part 1 we showed how a PowerShell function can receive input both from a parameter and via the pipeline, and process it in real-time. This is the...
Processing Data (Part 1)
This is the first of the three tips showing you how a PowerShell function can accept data via pipeline or parameter. In part 1, the function...
Get UI Information for Processes
PowerShell can use UIAutomation calls to find out useful UI information about any process. You can find out whether a process accepts keyboard...
Compressing to ZIP Files
In PowerShell 5.0, Compress-Archive can easily compress files and folders to a ZIP file: PS C:\> Compress-Archive -Path c:\sourcefolder...
Quickly Scanning for Malware
If you have Windows Defender installed on your machine, you can use this PowerShell command to run a quick scan on a drive of your choice: PS>...
Enabling Telnet Client and Watching Star Wars
By default, the Telnet client is disabled on Windows systems. You can easily enable it with a one liner in PowerShell, though. Just launch a...
Enabling PowerShell Remoting with NTLM
By default, PowerShell remoting uses Kerberos authentication and works only in domain environments, and only when you specify computer names, not IP...
Validate Read-Host Input
Beginning in PowerShell 4.0, you can use validators for variable assignments. This gives you a quick and easy way of validating user input, too. The...
Restore PowerShell ISE Defaults
To restore custom settings in PowerShell ISE to factory defaults, try running these lines: $PSise.Options.RestoreDefaults()...