Author Posts

April 20, 2014 at 2:59 am

Hi There,

I'm currently going through Don's great book 'Powershell in a month of lunches' and really digging into the basics to solidify my understanding of the fundamentals.

So I was digging around testing the help menu examples for Get-ChildItem and was hoping for some clarification.

————————– EXAMPLE 7 ————————–
C:\PS>get-childitem c:\windows\logs\* -include *.txt -exclude A*

Description

———–

This command gets the .txt files in the Logs subdirectory, except for those whose names start with the letter A. It uses the wildcard character (*) to indicate the contents of the Logs subdirectory, not the directory container. Because the command does not include the Recurse parameter, Get-ChildItem does not include the contents of the current directory automatically; you need to specify it.

Now on my machine (windows 7, PS ver.3) the C:\Windows\Log\ directory contains a number of subdirectories and files, but using the wildcard or excluding it make no difference to the results I receive.

get-childitem c:\windows\logs\* 
get-childitem c:\windows\logs\ 

Directory: C:\Windows\Logs

Mode LastWriteTime Length Name
—- ————- —— —-
d—- 20/04/2014 12:12 AM CBS
d—- 19/04/2014 7:48 PM DISM
d—- 19/04/2014 6:56 PM DPX
d—- 14/07/2009 1:32 PM HomeGroup
d—- 20/04/2014 1:11 PM SystemRestore
-a— 19/04/2014 7:52 PM 2831 IE9_NR_Setup.log

Both returns the same results, namely the first level files and folders in the C:\Windows\Logs directory, i.e. all of it's childitems. So I looked at the help more closely

-Path
Specifies a path to one or more locations. Wildcards are permitted. The default location is the current directory (.).

Required? false
Position? 1
Default value Current directory
Accept pipeline input? true (ByValue, ByPropertyName)
Accept wildcard characters? true

So to me the use of a wildcard in the path string seems to be just a short hand way of filtering results and the explanation attached to 'example 7' is either outdated or just plain wrong.

Am I missing something here?

April 20, 2014 at 5:55 am

The explanation in the help file might be confusing. It's example 3 online (http://technet.microsoft.com/en-us/library/hh849800.aspx).

The -Path parameter specifies the child items you want to get. In this case, it's specifying a folder path, so you want the child items of that folder. Including a wildcard or not doesn't matter – you're not getting the item (the directory) either way. So in that regard, the explanation is, at the very least, confusing.

You CAN use a wildcard as a shorthand means of filtering – although that isn't what this example is doing.

However... this example deals with the filesystem. Get-ChildItem might behave slightly differently in a different provider.

Consider bugging the doc at connect.microsoft.com so Microsoft can clarify it.