Click here to monitor SSC
  • Av rating:
  • Total votes: 37
  • Total comments: 6
Michael Sorens

PowerShell One-Liners: Help, Syntax, Display and Files

04 April 2014

PowerShell is designed to be used by busy IT professionals who want to get things done, and don't necessarily enjoy programming. PowerShell tackles this paradox by providing its own help and command-line intellisense. We aim to make it a bit easier still by providing a series of collections of general-purpose one-liners to cover most of what you'll need to get useful scripting done.

This series is in four parts: This is part 1

Well, yes, it would be an onerous task indeed to deliver everything. But per the Pareto principle, roughly  eighty percent of what you could want to know about PowerShell is here in this series of articles; possibly more!  You will tend to learn the other twenty percent  as you go, and you may not need  it for quite a ways into your PowerShell explorations.  I feel compelled to confess that some of the entries are not, strictly speaking, on one physical line, but  are written in such a way that, if you really want to run them in one line, you can just remove the line breaks and they will work. (Note that that is not generally true of PowerShell syntax.)

This series of articles evolved out of my own notes on PowerShell as I poked and prodded it to show me more. As my collection  burgeoned, I began to organize them until I had one-line recipes for most any simple PowerShell task. Simple, though, does not mean trivial. You can do quite a lot in one line of PowerShell, such as grabbing the contents of specific elements of a web page or converting a CSV file into a collection of PowerShell objects.

This collection of PowerShell one-liners is organized as follows:

Part 1
begins by showing you how to have PowerShell itself help you figure out what you need to do to accomplish a task, covering the help system as well as its handy command-line intellisense. The next sections deal with locations, files, and paths: the basic currency of any shell. You are introduced to some basic but key syntactic constructs and then ways to cast your output in list, table, grid, or chart form.
Part 2
moves into details on variables, parameters, properties, and objects, providing insight into the richness of the PowerShell programming language. Part 2 is rounded out with a few other vital bits on leveraging the PowerShell environment.
Part 3
covers the two fundamental data structures of PowerShell: the collection (array) and the hash table (dictionary), examining everything from creating, accessing, iterating, ordering, and selecting. Part 3 also covers converting between strings and arrays, and rounds out with techniques for searching, most commonly applicable to files (searching both directory structures as well as file contents).
Part 4
is your information source for a variety of input and output techniques: reading and writing files; writing the various output streams; file housekeeping operations; and various techniques related to CSV, JSON, database, network, and XML.

Each part of this series is available as both an online reference here at, in a wide-form as well, and as a downloadable wallchart (from the link at the head of the article) in PDF format for those who prefer a printed copy near at hand. Please keep in mind though that this is a quick reference, not a tutorial. So while there are a few brief introductory remarks for each section, there is very little explanation for any given incantation. But do not let that scare you off—jump in and try things! You should find more than a few “aha!” moments ahead of you!

Notes on using the tables:

  • A command will typically use full names of cmdlets but the examples will often use aliases for brevity. Example: Get-Help has aliases man and help. This has the side benefit of showing you both long and short names to invoke many commands.
  • Most tables contain either 3 or 4 columns: a description of an action; the generic command syntax to perform that action; an example invocation of that command; and optionally an output column showing the result of that example where feasible.
  • For clarity, embedded newlines (`n) and embedded return/newline combinations (`r`n) are highlighted as shown.
  • Many actions in PowerShell can be performed in more than one way. The goal here is to show just the simplest which may mean displaying more than one command if they are about equally straightforward. In such cases the different commands are numbered with square brackets (e.g. "[1]"). Multiple commands generally mean multiple examples, which are similarly numbered.
  • Most commands will work with PowerShell version 2 and above, though some require at least version 3. So if you are still running v2 and encounter an issue that is likely your culprit.
  • The vast majority of commands are built-in, i.e. supplied by Microsoft. There are a few sprinkled about that require loading an additional module or script, but their usefulness makes them worth including in this compendium. These "add-ins" will be demarcated with angle brackets, e.g. <<pscx>> denotes the popular PowerShell Community Extensions (
  • There are many links included for further reading; these are active hyperlinks that you may select if you are working online, but the URLs themselves are also explicitly provided (as in the previous bullet) in case you have a paper copy.

Note: Out of necessity, the version of the tables in the articles is somewhat compressed. If you find them hard to read, then there is a wide version of the article available here, and a PDF version is available fron the link at the top of the article

What's What and What's Where

This is your starting point when you are staring at a PowerShell prompt, knowing not what to do. Find out what commands are available, read help on PowerShell concepts, learn about auto-completion of cmdlets and parameters, see what command an alias refers to, and more.  Before even going to the first entry, though, it is useful to learn one thing: PowerShell has help available on both commands and concepts. You can look up a command simply with, for example, Get-Help Get-ChildItem (# 1 below). Or you can search for a command with a substring, e.g. Get-Help file (#3). But as with any programming language you have to know syntax, semantics, structures, … in short all those conceptual items that let you work with commands. If you want to know about variables, for example, you have merely to say Get-Help about_variables. All conceptual topics begin with the “about_” prefix (#11).

Not at first, but in short order, you will want to be able to find meta-details about commands as well. By that, I mean to answer questions like: What type of objects does a cmdlet return? Does a cmdlet have one or multiple sets of parameters available?  Where does a cmdlet come from? All of those meta-details can be seen from entry 20 below.

Basic help for xGet-Help cmd (cmd is a full name)help Get-ChildItem
Help in separate windowShow-Command cmd; then select the help iconShow-Command Get-ChildItem
List help topics containing xGet-Help string (string is a prefix or uses wildcards)[1a] help Get
[1b] help Get-*
Help for parameter y of cmdlet xGet-Help cmd -parameter yhelp Get-Date -param month
Help for multiple parametersGet-Help cmd -parameter y* (i.e. use wildcards)help Get-Date -param m*
List allowed values for parameter y of cmdlet xGet-Help cmd -parameter yhelp Out-File -parameter Encoding
Intellisense for parameter names [in ISE]cmdlet -paramNamePrefixOut-File -enc
Intellisense for parameter values [in ISE]cmdlet -paramName<space> paramValuePrefixOut-File -enc<space>
Auto-completion for parameter namescmdlet - paramNamePrefix <tab>[1a] Out-File -<tab>
[1b] Out-File -enc<tab>
Auto-completion for parameter valuescmdlet -paramName<space> paramValuePrefix <tab>[1a] Out-File -enc<space><tab>
[1b] Out-File -enc<space>u<tab>
List all ‘conceptual’ topics (see text above)Get-Help about_*same
Filter help output by regexGet-Help topic | Out-String -stream | sls -pattern regexhelp ls | Out-String -Stream | Select-String recurse
Filter help output by constantGet-Help topic | Out-String -stream | sls -simple texthelp ls | Out-String -Stream | sls -SimpleMatch "[-recurse]"
Send help text to a file[1] Get-Help topic| Out-String | Set-Content file
[2] Get-Help topic > file
[1] help Get-ChildItem | Out-String | sc help.txt
[2] help Get-ChildItem > help.txt
List all cmdlets and functionsGet-Commandsame
List all cmdlets/functions beginning with charactersGet-Command string*gcm wr*
List all cmdlets/functions filtered by nounGet-Command -noun string*gcm -noun type*
List all exported items from module xGet-Command -Module moduleGet-Command -Module BitLocker
List properties and methods of cmdletcmdlet | Get-MemberGet-ChildItem | gm
List meta-details of cmdlet (see text above)Get-Command cmdlet | Select-Object *gcm Get-ChildItem | select *
Display module containing cmdlet(Get-Command cmdlet).ModuleName(gcm Get-ChildItem).ModuleName
Display assembly containing cmdlet (for compiled cmdlets)( Get-Command cmdlet ).dll(gcm Get-ChildItem).dll
Display underlying command for alias xGet-Alias -name xGet-Alias -name gci
Display aliases for command xGet-Alias -definition xGet-Alias -def Get-ChildItem
Get general help for PS Community ExtensionsImport-Module pscx; Get-Help pscx <<pscx>>same
List all functions in PSCXGet-Command -Module Pscx* -CommandType Function <<pscx>>same

Location, Location, Location

See where you are or where you have been and navigate to where you want to be; understand the difference between your PowerShell current location and your Windows working directory; get relative or absolute paths for files or directories.

Display current location (non-UNC paths)[1] Get-Location
[2] $pwd
[3] $pwd.Path
[1] cd c:\foo; pwd
[2] cd c:\foo; $pwd
[3] cd c:\foo; $pwd.Path
Display current location (UNC paths)$pwd.ProviderPathcd \\localhost\c$; $pwd.ProviderPath
Change current location (to drive or folder or data store)Set-Location target[1a] cd variable:
[1b] sl c:\documents\me
[1c] chdir foo\bar
Get absolute path of file in current locationResolve-Path fileResolve-Path myfile.txt
Get name without path for file or directory[1] (Get-Item filespec).Name
[2] Split-Path filespec -Leaf
[1] (Get-Item \users\me\myfile.txt).Name
[2] Split-Path \users\me -Leaf
Get parent path for file(Get-Item filespec).DirectoryName(Get-Item \users\me\myfile.txt).DirectoryName
Get parent path for directory(Get-Item filespec).Parent(Get-Item \users\me).Parent
Get parent path for file or directorySplit-Path filespec –Parent[1a] Split-Path \users\me\myfile.txt -Parent
[1b] Split-Path \users\me -Parent
Get parent name without path for file(Get-Item filespec).Directory.Name(Get-Item \users\me\myfile.txt).Directory.Name
Get parent name without path for file or directory[1] (Get-Item (Split-Path filespec -Parent)).Name

[2] Split-Path (Split-Path filespec -Parent) -Leaf
[3] "filespec".split("\")[-2]
[1] (Get-Item (Split-Path \users\me\myfile.txt -Parent)).Name
[2] Split-Path (Split-Path \users\me -Parent) -Leaf
[3a] "\users\me\myfile.txt".split("\")[-2]
[3b] "\users\me".split("\")[-2]
Display working directory (see[Environment]::CurrentDirectorysame
Change current location and stack itPush-Location pathpushd \projects\stuff
Return to last stacked locationPop-Locationpopd
View directory stackGet-Location –stacksame
View directory stack depth(Get-Location -stack).Countsame

Files and Paths and Things

You can list contents of disk folders with Get-ChildItem just as you could use dir from DOS. But Get-ChildItem also lets you examine environment variables, local variables, aliases, registry paths, even database objects with the same syntax! See about_providers ( and PS Provider Help ( for more details.

List contents of location
(location may be on any supported PSDrive—see list datastores below).
[1] Get-ChildItem path

[2] Get-ChildItem psdrive:path

[3] Get-ChildItem psdrive:
[1a] Get-ChildItem
[1b] Get-ChildItem .
[2a] gci c:\users\me\documents
[2b] ls SQLSERVER:\SQL­\localhost­\SQLEXPRESS\­Databases
[3a] dir env:
[3b] dir variable:
[3c] ls alias:
List names of files in current directory[1] Get-ChildItem | select -ExpandProperty name
[2] dir | % { $_.Name }
[3] (dir).Name
List names of files recursively[1] dir -Recurse | select -ExpandProperty Name
[2] (dir -Recurse).Name
List full paths of files recursively[1] dir -Recurse | select -ExpandProperty FullName
[2] (dir -Recurse).FullName
List full paths of files recursively with directory markerdir -r | % { $_.FullName + $(if ($_.PsIsContainer) {'\'}) }same
List relative paths of files recursively with directory markerdir -r | % { $_.FullName.substring($pwd.Path.length+1) + $(if ($_.PsIsContainer) {'\'}) }same
List file and directory sizes
dir | % { New-Object PSObject -Property @{ Name = $_.Name; Size = if($_.PSIsContainer) { (gci $_.FullName -Recurse | Measure Length -Sum).Sum } else {$_.Length}; Type = if($_.PSIsContainer) {'Directory'} else {'File'} } }same
List datastores (regular filesystem drives plus drives from other providers)[1] Get-PSDrive
[2] Get-PSDrive -PSProvider provider
[1] Get-PSDrive
[2] gdr -PSProvider FileSystem
List providers (suppliers of datastores)[1] Get-PSProvider
[2] Get-PSProvider -PSProvider provider
[1] Get-PSProvider
[2] Get-PSProvider -PSProvider registry
List processesGet-Processsame

Basic Syntactic Elements

Like with learning most things, you need to learn to crawl before you can learn to run. This section shows you how to do some of the most basic but important things, things that will soon become second nature: knowing what is true and what is false; adding comments; continuing a command across multiple lines or, contrariwise, combining multiple commands on one line; and so forth. Arguably there should be one other important group of items included here: PowerShell operators. But I already published a wallchart on a set of common operators for strings and string arrays. See Harnessing PowerShell's String Comparison and List-Filtering Features ( for details on -eq, -like, -match, and -contains operators and their variations.

End-of-line comment# (octothorp)52 # number of weeks in a year52
Block comment or documentation comment<# … #><# multi-line
comment here #>
Continue command on multiple lines (required unless break after pipe or curly bracket)` (backquote as last character on line)"hello " + `
hello world
Combine commands on a single line; (semicolon)$a = 25; $b = -9; "$a, $b"25, -9
Escape next character` (backquote)$a = 25; "value of `$a is $a"value of $a is 25
Non-printable characters (newline, tab, etc.)`n, `t"line one`n line two"line one
line two
Boolean constant TRUE
(see here
[1] $TRUE
[2] Any string of length > 0
[3] Any number not equal to 0
[4] Array of length > 1
[5] Array of length 1 whose element is true
[6] A reference to any object
[1] if ($TRUE) { "true" } else { "not true" }
[2] if ("abc") { "true" } else { "not true" }
[3] if (-99.5) { "true" } else { "not true" }
[4] if ((1, 2)) { "true" } else { "not true" }
[5] if ((1)) { "true" } else { "not true" }
[6] $a = 25; if ([ref]$a) { "true" } else { "not true" }
Boolean constant FALSE
(see here)
[1] $FALSE
[2] Empty string
[3] Any number = 0 (e.g. 0, 0.0, 0x0, 0mb, 0D, …)
[4] Array of length 0
[5] Array of length 1 whose element is false
[6] $NULL
[1] if ($FALSE) { "true" } else { "not true" }
[2] if ("") { "true" } else { "not true" }
[3] if (0x0) { "true" } else { "not true" }

[4] if (@()) { "true" } else { "not true" }
[5] if (("")) { "true" } else { "not true" }
[6] if ($NULL) { "true" } else { "not true" }
not true
not true
not true
not true
not true
not true
Iterate each element in a listForEach-Object1..3 | % { $_ * 2 }2
Ternary operator, scalar
(e.g. result = a > b ? x : y; )
[1] $result = switch (boolExpr) { $true { $x } $false { $y } }
[2] $result = if (boolExpr) { $x } else { $y }
[3] $result = ?: {boolExpr} {$x} {$y} <<pscx>>
[1] $result = switch (25 -gt 10) { $true { "yes" } $false { "no" } }
[2] $result = if (25 -gt 10) { "yes" } else { "no" }
Coalesce (evaluate 2nd block if 1st block is null)
Define Coalesce-Args as:
function Coalesce-Args  { (@($args | ?{$_}) + $null)[0] }; Set-Alias ?? Coalesce-Args
[1] Invoke-NullCoalescing block1 block2 <<pscx>>

[2] Coalesce-Args block1 block2
<<code from>>
[1a] Invoke-NullCoalescing {$env:dummy} {"\usr\tmp"}
[1b] ?? {$env:dummy} {"\usr\tmp"}
[2a] Coalesce-Args $env:dummy "\usr\tmp"
[2b] ?? $env:dummy "\usr\tmp"

Display Options

According to Using Format Commands to Change Output View ( each format cmdlet (i.e. Format-Table and Format-List) has default properties that will be used if you do not specify specific properties to display. But the documentation does not reveal what those defaults are or how they vary depending on the type of input object. Also, the default properties differ between Format-Table and Format-List. Finally, keep in mind that if Select-Object is the last cmdlet in your command sequence, it implicitly uses Format-Table or Format-List selecting one or the other based on the number and width of output fields. (And while the included images were not designed for you to make out the actual text, you can discern the representation of the data from those thumbnails.)

Format list of objects with each field on a separate lineany | Format-Listls C:\Windows\temp | select name,length | Format-List
Format list of objects with all fields on one lineany | Format-Tablels C:\Windows\temp | select name,length | Format-Table
Format list of objects in an interactive gridany | Out-GridViewls C:\Windows\temp | select name,length | Out-GridView
Format list as console graphany | Out-ConsoleGraph -property quantityPropertyName <<code from>>ls C:\Windows\temp | select name,length | Out-ConsoleGraph -property length
Format list as gridview graphany | Out-ConsoleGraph -GridView -property quantityPropertyName
<<code from>>
ls C:\Windows\temp | select name,length | Out-ConsoleGraph -property length –grid
Send table-formatted output to file[1] any | Format-Table -AutoSize |
Out-File file -Encoding ascii
[2] any | Format-Table -AutoSize |
Out-String | Set-Content file
[1] ps | ft -auto |Out-File process.txt -enc ascii

[2] ps | ft -auto |Out-String | sc process.txt
Send trimmed table-formatted output to file (removes trailing spaces on fields as well as blank lines)any | Format-Table -AutoSize | Out-String -Stream | ForEach { $_.TrimEnd() } |where { $PSItem } |
Set-Content file
ps | ft -auto| Out-String -Stream | %{ $_.TrimEnd() } | ? { $_ } | sc file

Prompts and Pauses

Some basic interactivity entries, showing how to get input from a user, how to pause and resume, and how to clear the window contents.

Prompt user for inputRead-Host prompt$userValue = Read-Host "Enter name"
Pause for a specific time periodStart-Sleep seconds"before"; Start-Sleep 5; "after"
Pause a script and resume with Enter keyRead-Host -Prompt promptString Read-Host -Prompt "Press enter to continue..."
Pause a script and resume with any key
(does not work in PowerShell ISE)
Write-Host "Press any key to continue ...";
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Clear screenClear-Host
Display progress barWrite-Progress -Activity title -status event -percentComplete percentagefor ($i = 0; $i -lt $stuff.Count; $i++)
# primary code here
Write-Progress -Activity $title -status $label[$i] -percent (($i + 1) / $stuff.Count*100)

Casts, Type Accelerators, and .NET Classes

You are no doubt familiar with type casting in .NET languages. PowerShell provides the same casting capability but enhances it with a new concept, type accelerators. Type accelerators are simply aliases for .NET framework classes. Note that in PowerShell you can always omit the “System.” prefix of a class if it has one to save typing, so you could use, say, DateTime rather than System.DateTime. But with type accelerators you can get a lot more concise than that. For example, you can just use [wmi] instead of System.Management.ManagementObject. As far as casting, in PowerShell you can cast to any .NET type that has either a cast operator or a constructor that accepts the source type (see the Net.IpAddress entry below). Finally, you can use .NET type names to access static members of .NET classes (see the DateTime.Now entry below).

List all type accelerators (see here)[1] [accelerators]::get <<pscx>>
[2] [psobject].assembly.gettype( "System.Management.Automation.TypeAccelerators")::Get
Cast string to IPAddress object[System.Net.IpAddress]"ip-address”[Net.IpAddress]''Address : 16777408
AddressFamily : InterNetwork
. . .
IsIPv4MappedToIPv6 : False
IPAddressToString :
Create new DateTime object with constructorNew-Object -TypeName DateTime
-ArgumentList constructor-argument-list
New-Object -TypeName DateTime
-ArgumentList 2014,10,10
Friday, October 10, 2014 12:00:00 AM
Cast string to a DateTime object[DateTime]"date-time value"[DateTime]"10/10/2014" |
select Year, DayOfWeek, Ticks
Year DayOfWeek Ticks
----    ---------         -----
2014 Friday 635484960000000000
Cast string to XML without accelerator[System.Xml.XmlDocument] "XML text"[System.Xml.XmlDocument] "<root>text</root>"root
Cast string to XML with accelerator[xml] "XML text"[xml] "<root>text</root>"root
Access static member of .NET class[class]::member$currentTime = [datetime]::Now
Cast integer to Boolean # [bool]2 yields True; [bool]0 yields False


That’s it for part 1; keep an eye out for more in the near future! While I have been over the recipes presented numerous times to weed out errors and inaccuracies, I think I may have missed one. If you locate it, please share your findings in the comments below!

Michael Sorens

Author profile:

Michael Sorens is passionate about software to be more productive, evidenced by his open source libraries in several languages (see his API bookshelf) as well as SqlDiffFramework (a DB comparison tool for heterogeneous systems including SQL Server, Oracle, and MySql). With degrees in computer science and engineering he has worked the gamut of companies from Fortune 500 firms to Silicon Valley startups over the last 25 years or so. Current passions include PowerShell, .NET, SQL, and XML technologies (see his full brand page). Spreading the seeds of good design wherever possible, he enjoys sharing knowledge via writing (see his full list of articles), teaching, and StackOverflow. Like what you have read? Connect with Michael on LinkedIn and Google +

Search for other articles by Michael Sorens

Rate this article:   Avg rating: from a total of 37 votes.





Must read
Have Your Say
Do you have an opinion on this article? Then add your comment below:
You must be logged in to post to this forum

Click here to log in.

Subject: Excellent work
Posted by: Anonymous (not signed in)
Posted on: Sunday, April 13, 2014 at 10:54 PM
Message: Excellent Work!!!

Subject: PowerShell One-Liners
Posted by: Anonymous (not signed in)
Posted on: Monday, April 14, 2014 at 4:14 PM
Message: OK - this is going to help! I can hardly wait for parts 2+.

Subject: PowerShell One-Liners
Posted by: gregsoc (view profile)
Posted on: Friday, April 25, 2014 at 10:29 AM
Message: Always looking for good PS info.
This is a great resource!!!

As it always seems to be the case, there's always some PS functionality embedded in an example of what is being shown, and that embedded function is never explained!!
For instance.. for the "ForEach-Object" basic syntax example...
It shows the following example text... "1..3 | % { $_ * 2 }"
But nowhere do I see an explanation of the "%{...}" construct. I looked thru the entire doc to see if you explain %{....}.
I know what it is, but I also know that a newcomer trying to understand PS stuff will be frustrated and confused.
That seems to the way with PS. Whenever someone tries to explain a concept or piece of functionality in PS they invariably use some other piece of PS functionality that is not yet explained or previously defined. Most of us just jump down the rabbit hole and begin to look elsewhere for the definition, but you can't ignore the fact that it does add to the overall perception that PS is difficult to learn (efficiently)

Subject: Finding the Easter eggs
Posted by: msorens (view profile)
Posted on: Wednesday, April 30, 2014 at 3:19 PM
Message: I definitely appreciate your comment, @gregsoc, though I stated up front that "...this is a quick reference, *not* a tutorial." So yes, there is a certain minimal proficiency that newcomers will need to have to get the most out of this series. This is designed for tinkering. Try it out. See what happens when you poke this or prod that. Skip the things that do not make obvious sense. The next time you come back to it you may just say, "Oh, that's what that means!"

But, to refute you just a bit, I actually did plant some Easter eggs: often (when space allows) I used the non-abbreviated form in the Command column, and the abbreviated form in the Example column. Specifically, if you look at the last entry in the "Display Options" section you will see it uses "ForEach" and "%" respectively, so one can infer what the percent sign means. In that very same entry you can infer that "?" abbreviates "Where" and "$_" abbreviates $PSItem. Hope that helps!

Subject: It's all good!!!
Posted by: gregsoc (view profile)
Posted on: Wednesday, April 30, 2014 at 3:43 PM
Message: No worries Michael... Your content is great and I like it a lot. Just commenting on the intrinsic problem I see with all PS 'reference' material. PS is so big and deep that there always seems to be some new 'thing' that catches me.
As a rule, I don't like to 'infer' too much when it comes to programming syntax. (have been burned to many times with Microsoft's sometimes weird but wonderful implementation of the .net family of languages). Really looking forward to your subsequent PS posts!!

Subject: Good Articles & Agree With Gregsoc
Posted by: dmacsimple (view profile)
Posted on: Sunday, June 21, 2015 at 6:09 AM
Message: Mr. Sorens, many thanks for providing this PS Series of information. As I am not a developer and not familiar with any programming languages, I am often handed scripts to conduct some processes in SharePoint; but it would be great to know what the syntax objects' mean, i.e, ($ %, etc). However, I am going to use your material to the best of my ability; and if through my research I discover some document that explains and provides definition of syntax and variables I would like to share with this community. Again, many thanks.


Top Rated

Ins and Outs of the PowerShell Pipeline
 For many developers, understanding pipelining in PowerShell is like understanding reductive... Read more...

The Poster of the Plethora of PowerShell Pitfalls
 One of the downsides of learning a new computer language is that transfer of training doesn't always... Read more...

Getting Data Into and Out of PowerShell Objects
 You can execute PowerShell code that creates the data of an object, but there is no cmdlet to generate... Read more...

Migrating to Microsoft BPOS - Part II
 In his last article, Johan gave us a crystal clear guide to preparing to migrate from an on-premises... Read more...

Emulating the Exchange 2003 RUS for Out-of-Band Mailbox Provisioning in Exchange 2007
 Exchange's Recipient Update Service was important in Exchange 2000 or 2003 in order to complete the... Read more...

Most Viewed

Upgrade Exchange 2003 to Exchange 2010
  In this article, the first of two in which Jaap describes how to move from Exchange Server 2003... Read more...

Upgrade Exchange 2003 to Exchange 2010 - Part II
 In Jaap's second article on upgrading straight from Exchange Server 2003 to 2010, he explains how to... Read more...

Goodbye Exchange ExMerge, Hello Export-Mailbox
 ExMerge was a great way of exporting a mailbox to an Exchange PST file, or for removing all occurences... Read more...

Exchange E-mail Addresses and the Outlook Address Cache
 Because Exchange auto-complete cache uses X.500 addresses for e-mail sent to addresses within the... Read more...

Introduction to Exchange Server 2010
 What’s new in Exchange Server 2010 and what features from Exchange Server 2007 have been deprecated?... Read more...

Why Join

Over 400,000 Microsoft professionals subscribe to the Simple-Talk technical journal. Join today, it's fast, simple, free and secure.