To analyze the content of a script block, you can easily examine the AST, and, for example, create a list of all variables in the code: $code = { $a...
powertips
Running PowerShell Script as a Scheduled Task
If you need to run a PowerShell script in regular intervals, why not run it as a scheduled task? Here are some lines that help you create a new...
Spying on Function Source Code
Here is a quick way how to find the source code of PowerShell functions: ${function:Clear-Host} | clip This would copy the Clear-Host source code to...
Modern Alternative to More
In a PowerShell console, you can continue to pipe to more, just like in cmd.exe, to view results page by page. However, more does not support...
Creating SMB Shares Remotely
Here are a couple of lines that remotely create an SMB share on a server: #requires -Version 3.0 -Modules CimCmdlets, SmbShare -RunAsAdministrator...
Important PowerShell Variables
Here is a list of important PowerShell variables: $pshome is the path to the place where PowerShell lives. $home is the path to your personal...
Read-Host Blocks Automation
Using Read-Host to ask for user information can be problematic because it prevents scripts from running unattended. A better way could be to wrap...
Force Client Time Resync
If your client does not sync time correctly with your domain controller, try the code below. It does require Admin privileges: w32tm.exe /resync...
Mapping Network Drives
PowerShell offers numerous ways to connect to SMB file shares. Here are three different approaches: # adjust path to point to your file share...
Safely Deleting Data
To safely delete files, folders, or entire drives, PowerShell can use the built-in cipher.exe tool. This line would safely delete the old user...
Finding Organizational Units
Get-OrganizationalUnit (from Microsofts free RSAT tools) can search for organizational units based on fully distinguished name or GUID, or you can...
Testing Organizational Unit
Provided you have installed the free Microsoft RSAT tools, here is a simple way to check whether an OU exists: $OUPath =...
Validating Variables
Variables and function parameters can be automatically validated through validation attributes. Here is a simple example making sure $test1 can only...
Cloning DHCP Server Settings
Beginning with Windows Server 2012, you can easily export and re-import DHCP settings. Cloning or migrating DHCP servers is a snap. The example...
Searching for ADUsers
The free Microsoft RSAT tools come with the PowerShell “ActiveDirectory” module: plenty of cmdlets help you administer Active Directory...
ToString() Masquerade
In the previous tip we explained that ToString() is a fuzzy way of describing an object, and that the object author can decide what ToString()...
Careful with ToString()
Any .NET object has a method ToString() that returns a text representation. This is also what you get when you output an object in a string....
Validating Integer Variables
You can easily assign the [Int] type to a variable to make sure it can contain only digits. But did you know that you can also apply a regex...
Creating Random MAC Addresses
If you just need a bunch of randomly generated MAC addresses, and you don’t care much about whether these addresses are actually valid, then...
Bitwise Shift
PowerShell contains some binary operators that are not so commonly used, for example bitwise shifting. The -shl operator shifts bits to the left:...
Converting Binary String to Integer
Here is how you convert a binary text string into the corresponding integer value: $binary = "110110110" $int =...
Using Clipboard to Transfer Data and Results
Finally in PowerShell 5, there is support for sending results to the clipboard, and receiving results from the clipboard: PS> Get-Command -Noun...
Installing MSI on Remote System
How .Replace() and -replace differ
There are two ways of replacing text in a string: the Replace() method, and the –replace operator. They work fundamentally different....