Introduction to PowerShell
Microsoft has developed a new command line interface (first called "Monad") and renamed "PowerShell". It was first made available as a stand-alone application for Windows XP (download here). and then for Vista ( available at this site). It is now a standard part of Windows 7. The older command interpreter cmd.exe is still present as well. The new shell is Microsoft's answer to Unix shell scripting. It is quite different from the previous command line interface and is considerably more powerful. It makes use of more sophisticated techniques and objects and requires the .NET Framework 2.0. It has new functions for systems and network administration and is aimed at IT professionals. Because the purpose of this present site is to introduce the command line to home PC users , PowerShell is somewhat beyond the intended scope (and my personal experience). Nonetheless, I believe the home user should be aware of PowerShell's potential and the more experienced may wish to explore it further. I will try to outline very briefly what PowerShell is about.PowerShell features
In the previous Windows command line described elsewhere on this site, commands consist of internal command strings that are interpreted and executed by the command interpreter or of commands that invoke separate executable files. PowerShell has a new approach that makes use of what Microsoft calls "cmdlets". Here is Microsoft's description:A cmdlet (pronounced "command-let") is a single-feature command that manipulates objects in Windows PowerShell. You can recognize cmdlets by their name format -- a verb and noun separated by a dash (-), such as Get-Help, Get-Process, and Start-Service.
Although each cmdlet has a single function, groups of cmdlets can be strung together to carry out a complex task. Also the output of many cmdlets can be used as input (piped) to other cmdlets without additional processing. These capabilities represent a significant advance over the present command line shell.
PowerShell continues to recognize the commands from the older command shell although, in many cases, the command is an alias for a PowerShell cmdlet
List of cmdlets
At this time, PowerShell comes with 129 cmdlets. Since cmdlets are easily written, more can be expected. Table I shows the list of those presently available.Add-Content Add-History Add-Member Add-PSSnapin Clear-Content Clear-Item Clear-ItemProperty Clear-Variable Compare-Object ConvertFrom-SecureString Convert-Path ConvertTo-Html ConvertTo-SecureString Copy-Item Copy-ItemProperty Export-Alias Export-Clixml Export-Console Export-Csv ForEach-Object Format-Custom Format-List Format-Table Format-Wide Get-Acl Get-Alias Get-AuthenticodeSignature Get-ChildItem Get-Command Get-Content Get-Credential Get-Culture |
Get-Date Get-EventLog Get-ExecutionPolicy Get-Help Get-History Get-Host Get-Item Get-ItemProperty Get-Location Get-Member Get-PfxCertificate Get-Process Get-PSDrive Get-PSProvider Get-PSSnapin Get-Service Get-TraceSource Get-UICulture Get-Unique Get-Variable Get-WmiObject Group-Object Import-Alias Import-Clixml Import-Csv Invoke-Expression Invoke-History Invoke-Item Join-Path Measure-Command Measure-Object Move-Item |
Move-ItemProperty New-Alias New-Item New-ItemProperty New-Object New-PSDrive New-Service New-TimeSpan New-Variable Out-Default Out-File Out-Host Out-Null Out-Printer Out-String Pop-Location Push-Location Read-Host Remove-Item Remove-ItemProperty Remove-PSDrive Remove-PSSnapin Remove-Variable Rename-Item Rename-ItemProperty Resolve-Path Restart-Service Resume-Service Select-Object Select-String Set-Acl Set-Alias |
Set-AuthenticodeSignature Set-Content Set-Date Set-ExecutionPolicy Set-Item Set-ItemProperty Set-Location Set-PSDebug Set-Service Set-TraceSource Set-Variable Sort-Object Split-Path Start-Service Start-Sleep Start-Transcript Stop-Process Stop-Service Stop-Transcript Suspend-Service Tee-Object Test-Path Trace-Command Update-FormatData Update-TypeData Where-Object Write-Debug Write-Error Write-Host Write-Output Write-Progress Write-Verbose Write-Warning |
PowerShell Cmdlet syntax
There are a number of parameters possible for cmdlets and a detailed discussion of syntax is beyond our scope. I will try to hint at the range of possibilities by discussing one useful cmdlet that carries out the copying function. It is not limited to copying files and folders but can also copy Registry keys and entries. This one cmdlet, in fact, incorporates the functions of several older commands with greater flexibility. First, here is a simple example where a folder and all its contents are to be copiedCopy-Item C:\Logfiles -destination D:\Backup -recurse
This cmdlet copies all files and sub-folders in the folder
C:\Logfiles to the folder D:\Backup .The parameter "-recurse" is used when sub-folders are to be copied.
Next, here are all the parameters in their full glory: Copy-Item [-path] <string[]> [[-destination] <string>] [-container] [-recurse] [-force]
Naturally, the full set of parameters varies from one cmdlet to the next but one option that is common to many is the intriguing "-whatIf". This setting describes what would happen if you executed the command but without actually executing it .This allows you to see safely what would happen if you did the command. For a table describing the various parameters above, click here.
[-include <string[]>] [-exclude <string[]>] [-filter <string>] [-passThru] [-credential <PSCredential>] [-whatIf] [-confirm] [<CommonParameters>]
PowerShell Scripting
PowerShell is also the basis for a scripting language. This language is intended to make administrative tasks easier and seems likely to supplant VBScript in the future. The extension for PowerShell scripts is .PS1. Many security features are built into the scripting engine and the default setting is to prevent scripts from running. Permission to run scripts is controlled by a feature called "Execution Policy". Information about this feature can be obtained by the PowerShell commandGet-Help about_signing
More about PowerShell scripting can be found at this Microsoft site.