10 Cool Things You Can Do With Windows Powershell 10 Things Techrepublic
10 Cool Things You Can Do With Windows Powershell 10 Things Techrepublic
If PowerShell’s learning curve has kept you from embracing it for daily use, “cool” might not be
a word you’d associate with it. But PowerShell is here to stay. It’s a core part of Exchange 2007,
Windows Server 2008, and SQL Server 2008, and it has immense power we all need to grasp.
I’m going to put some fun into the PowerShell arena and show you a few tricks that will
definitely come in handy. Besides, it is always cooler when you amaze someone with the solution
from the command line. Having someone watch you right-click and fix something doesn’t have
the same appeal.
Yes, this is a tool worthy of the name. PowerShell can easily cause massive configuration
changes, positive or negative — so protect yourself and establish a test environment for your
learning experiences. Also consider using the “-confirm” parameter to test configurations before
execution for certain commands.
PowerShell is Windows Management Instrumentation (WMI) aware. From PowerShell, you can
make a WMI call to retrieve the USB devices installed in a local or remote system:
gwmi Win32_USBControllerDevice -computername SERVER1 |fl Antecedent,Dependent
This will apply a filter to bring back the antecedent and dependent fields from the SERVER1
computer. Should you want the full export, you can omit the pipe and filter statement to have a
comprehensive export of the USB devices on a system. I have found this useful to maintain a
report for servers that have a USB license device installed so that their connectivity is
maintained from the device perspective.
Yes, you can stop using the DOS prompt and start doing all of those same tasks within
PowerShell. This can make learning a little easier and help you become more familiar with the
interface. Unfortunately, from the run prompt, there is no three-letter launcher like cmd. But
powershell will launch it. You can also assign a shortcut key to PowerShell so Ctrl + Shift + P
launches it directly.
Once the Process ID has been identified, you can kill the errant process by entering:
stop-process -id 2792
At that point, the BadThread example will be hard stopped and you can resume your attempt to
start the service. You can do that right here in PowerShell as well.
The PSDrive command lets you view objects of the Windows environment beyond traditional
network, local, or removable drives. One popular view is the HKLM PSDrive to view the
HKEY_LOCAL_MACHINE top-level hive of the registry. To get into the registry, enter the
following command:
PS C:> cd HKLM:
PS HKLM:/>
You are then transported into the registry hive and can view and even delete items, should you
wish.
Managing NTFS permissions is a whole separate matter, but with PowerShell, you can export
the permissions to audit access or take a quick look at access control lists (ACLs) for the security
configuration. This can be a great accountability mechanism to run in a scripted format
periodically — or you can run it on demand to diagnose a particular issue. For example, take the
following iteration:
PS E:>Get-Acl N:Data
This will give you a quick report of your security rights to the specified path (note that it won’t
give the share access). That alone is nothing too exciting, as it will report only the single
specified path, but if you want to include recursion for the entire path, you can use other
strategies. For the same path (N:\Data), you’d use the Get-ChildItem command (cmdlet) within
PowerShell, combined with the Get-Acl command. Consider the following example:
PS E:>Get-ChildItem N:Data -recurse | Get-Acl
This will span the entire N:\Data path and display the ACLs for the contents of the path. What
happens here is that the Get-ChildItem provides an inventory of the file system objects, and
that collection is passed to Get-Acl to provide the results for each item.
blogs.techrepublic.com.com/10things/… 2/6
19/12/2010 10 cool things you can do with Windo…
If you want to archive this to a comma-separated variable (CSV) document, you pass “| export-
csv c:\filename.csv” at the end of the cmdlet. You can also pass the normal “> C:\filename.txt”
to the end of the command to get it exported to a text file. Note that when you use the -recurse
option, it does just that and will traverse the entire path you specify. So be careful when doing it
across a large volume or over the network.
PowerShell 2.0 is in the Community Technology Preview (CTP) stage. It includes a graphical
interface, Graphical PowerShell, and it is cool. The PowerShell scripts are saved as .ps1 files,
making it easy to modify, import, and transfer scripts across systems. Figure A shows our
NTFS permissions example while running in the graphical mode.
Figure A
One note on PowerShell 2.0: You have to configure the execution policy through PowerShell
(nongraphical version) before using the tool. Configure one of the following execution policies:
PS C:>Set-ExecutionPolicy Restricted (check only)
When deciding to evaluate PowerShell 2.0, note that the WS-MAN v1.1 package is required, and
if you want to use the graphical interface, Microsoft .NET Framework 3.0 is required.
If you are familiar with the Microsoft SQL Query Analyzer environment, you will appreciate
some of these keyboard shortcuts. In Graphical PowerShell, you can select a single line or
multiple lines and execute them by pressing the F5 key. Also, if you have modified your script,
the familiar Ctrl + S to save, Ctrl + Z to undo, Ctrl + C to copy, and Ctrl + V to paste are
available to save you time in the editing and testing.
If you have a cmdlet that will take some time to run, you can use PowerShell to send it to the
background to complete. In this way, you can send a series of commands to execute at once and
let them complete on their own schedule. The command to launch a background job leads with
the start-psjob -command parameter. You can query PowerShell on the status of any of the jobs
with the following command:
PS C:>get-psjob
You’ll see a table of results showing the current status of your jobs, with a session identifier that
is unique for each job. Figure B shows one failed job.
Figure B
You can remove the failed job by running the following command:
PS C:>remove-psjob 9
blogs.techrepublic.com.com/10things/… 4/6
19/12/2010 10 cool things you can do with Windo…
For your PowerShell tasks, you can have a timestamp entered in series so you can determine
how long a single step occurs or to use as a logging mechanism for your scripts. I find this handy
in Graphical PowerShell when I’m testing scripts. To insert a timestamp, enter one of the
following commands as a single line within your .ps1 file:
There are many other formats for the Get-Date command, but these three options would
generally suite most applications for timestamp purposes.
Within PowerShell, some commands have results that scroll through the screen very quickly. If
you are not exporting the results to a file, it may be impossible to view the onscreen interaction.
Let’s again use the Get-ChildItem command from previous example. This command can return
many results depending on your path contents. We’ll create a function called EasyView to make
it easy to view the results onscreen by displaying one line every half-second. The EasyView
function would be created as follows:
function EasyView { process { $_; Start-Sleep -seconds .5}}
To make a PowerShell command use the EasyView function, call it with a pipe at the end of the
command and then the function name as shown below:
Get-ChildItem N:Data | EasyView
The EasyView function is configured to display lines at a half-second interval. You can also use
milliseconds for the value.
Have you been experimenting with PowerShell or using it to streamline your tasks? What are
some of your favorite commands?
Get IT tips, news, and reviews delivered directly to your inbox by subscribing to TechRepublic's
free newsletters.
blogs.techrepublic.com.com/10things/… 5/6
19/12/2010 10 cool things you can do with Windo…
RE: 10 cool things you can do with Windows PowerShell chuck_crow@... | 02/13/08
MS did get with the "game" and we all got "gamed" as a result Neon Samurai | 02/13/08
RE: 10 cool things you can do with Windows PowerShell siddharth4mba@... | 02/15/08
RE: 10 cool things you can do with Windows PowerShell palradi602@... | 02/15/08
RE: 10 cool things you can do with Windows PowerShell ramakrishnachunduri | 10/05/09
RE: 10 cool things you can do with Windows PowerShell samanoze | 11/04/09
My Updates
My Contacts
© 2010 CBS Interactive Inc. All rights reserved. | Privacy Policy (updated) | Terms of Use
blogs.techrepublic.com.com/10things/… 6/6