16
votes

I am trying to write a script that will get the names of all the folders in a specific directory and then return each as an entry in an array. From here I was going to use each array element to run a larger loop that uses each element as a parameter for a later function call. All of this is through powershell.

At the moment I have this code:

function Get-Directorys
{
    $path = gci \\QNAP\wpbackup\

    foreach ($item.name in $path)
    {
        $a = $item.name
    }
}   

The $path line is correct and gets me all of the directories, however the foreach loop is the problem where it actually stores the individual chars of the first directory instead of each directories full name to each element.

5

5 Answers

38
votes

Here's another option using a pipeline:

$arr = Get-ChildItem \\QNAP\wpbackup | 
       Where-Object {$_.PSIsContainer} | 
       Foreach-Object {$_.Name}
7
votes

$array = (dir *.txt).FullName

$array is now a list of paths for all text files in the directory.

6
votes

For completeness, and readability:

This get all files in "somefolder" starting with 'F' to an array.

$FileNames = Get-ChildItem -Path '.\somefolder\' -Name 'F*' -File

This gets all directories of current directory:

$FileNames = Get-ChildItem -Path '.\' -Directory
6
votes
# initialize the items variable with the
# contents of a directory

$items = Get-ChildItem -Path "c:\temp"

# enumerate the items array
foreach ($item in $items)
{
      # if the item is a directory, then process it.
      if ($item.Attributes -eq "Directory")
      {
            Write-Host $item.Name//displaying

            $array=$item.Name//storing in array

      }
}
2
votes

I believe the problem is that your foreach loop variable is $item.name. What you want is a loop variable named $item, and you will access the name property on each one.

I.e.,

foreach ($item in $path)
{
    $item.name
}

Also take note that I've left $item.name unassigned. In Powershell, if the result isn't stored in a variable, piped to another command, or otherwise captured, it is included in the function's return value.