Сохранение имен каталогов каталогов в массив Powershell

Я пытаюсь написать сценарий, который будет получать имена всех папок в определенном каталоге, а затем возвращать каждую в виде записи в массиве. Отсюда я собирался использовать каждый элемент массива для запуска большего цикла, который использует каждый элемент в качестве параметра для последующего вызова функции. Все это через PowerShell.

На данный момент у меня есть этот код:

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

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

Строка $path верна и возвращает мне все каталоги, однако цикл foreach является проблемой, когда он на самом деле сохраняет отдельные символы первого каталога вместо полного имени каждого каталога для каждого элемента.

Ответ 1

Здесь другой вариант с использованием конвейера:

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

Ответ 2

Для полноты и удобочитаемости:

Получите все файлы в "некоторой папке", начиная с "F" до массива.

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

Это получает все каталоги текущего каталога:

$FileNames = Get-ChildItem -Path '.\' -Directory

Ответ 3

$array = (dir *.txt).FullName

$array теперь представляет собой список путей для всех текстовых файлов в каталоге.

Ответ 4

# 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

      }
}

Ответ 5

Я считаю, что проблема в том, что ваша переменная цикла foreach $item.name. То, что вы хотите, это переменная цикла с именем $item, и вы получите доступ к свойству name для каждого из них.

т.е.

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

Также обратите внимание, что я оставил $item.name не назначенным. В Powershell, если результат не сохраняется в переменной, перенаправляется в другую команду или иным образом фиксируется, он включается в возвращаемое значение функции.