Problem with a variable - New to this

by Captainu at 2013-02-05 04:05:12

I am looking at PowerShell for the first time and do not have a scripting background.

I am trying to create a small script to search for file types using variables. What I have so far is:

$Folder = N:\Users
$Ext = .doc,.exe
Get-ChildItem $Folder -Recurse -Include $Ext

If I run this I get nothing. If I only have one file extension in $Ext it works. If I type the extensions instead of using a variable it works. How can I put multiple extensions in the variable?

Im not looking for a script, I am doing this to learn more.


by John.A.Mello at 2013-02-05 05:55:13
In order for the variable to know it has multiple entries you’ll need to separate them with either to single or double quotes. So either :
$Ext = “.doc",".exe”
$Ext = ‘.doc’,’.exe’

Single quotes (’ ') means to treat the enclosed information as a string
Double qoutes (" “)does the same thing but will extract values from variables if present. So if you did
$Ext = “.doc",".exe”,”$Folder"
the variable will have the following values :
You can verify that the variable has multiple values be testing if it’s an array
$Ext -is [array]
If True, you have multiple values. If False it has 1 value or is empty.
by ArtB0514 at 2013-02-05 09:30:54
Likewise, you also have to put quote marks around the folder variable for it to work:
$Folder = "N]

A final note: Once you have the quote marks correct, your query will work, but only because you are using the -Recurse switch. If you were searching only a single folder, then you would have to include a wildcard character in order to get results.
Get-ChildItem $Folder* -Include $Ext
The documentation for this is not easy to find – it’s in the examples for Get-Help Get-ChildItem:
[quote]C:\PS>get-childitem c:\windows\logs* -include .txt -exclude A

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.