Powershell - навигация по массиву в массиве - PullRequest
0 голосов
/ 27 марта 2012

Я строю массив следующим образом

$filelist2 = @()
$e = $null 
foreach ($e in $extBkupArr) {
        $filelist2 += ,(($e[1]),(Get-ChildItem $ToBeZipped"\*" -Recurse -Include $e[2] | Select-Object fullname ))
}

Массив $ filelist2 содержит в себе 4 элемента AA, AA, BB, BB. Каждый из этих элементов (кроме одного) имеет массив имен файлов, собранных в приведенном выше коде. Один из них (первый BB) - пустой массив.

Данные массива выглядят так:

{
{AA, 
{@{FullName=C:\Books1\work\src\book1.def}, 
 @{FullName=C:\Books1\work\src\book2.def}, 
 @{FullName=C:\Books1\work\src\book3.def}, 
 @{FullName=C:\Books1\work\src\man1.def}, 
 @{FullName=C:\Books1\work\src\book4.def}, 
 @{FullName=C:\Books1\work\src\man2.def}}}, 
{AA, 
{@{FullName=C:\Books1\work\src\book5.lst}, 
@{FullName=C:\Books1\work\src\book6.lst}}}, 
{BB, $null}, 
{BB, 
{@{FullName=C:\Books1\work\src\EmptyFolders.txt}, 
@{FullName=C:\Books1\work\src\ExcelWorkbooks.txt}, 
@{FullName=C:\Books1\work\src\table_of_contents.txt}, 
@{FullName=C:\Books1\work\src\WordDocuments.txt}, 
@{FullName=C:\Books1\work\src\ShortcutList.txt}
}}}

Для каждого из 4 элементов в массиве (AA, AA, BB, BB) я хочу (1) убедиться, что значение массива имен файлов не равно нулю, и (2) если они не равны нулю, затем проанализируйте этот вторичный массив, чтобы вытащить поле полного имени.

Эти данные передаются в функцию, вызывающую 7zip, которая принимает значение из AA.FullName и упаковывает этот файл в zip-файл, связанный со значением в строке (AA, BB и т. Д.). Эта функция вызывается следующим образом:

create-7zip "c:\temp\myFolder" "c:\temp\myFolder.zip"

из вышеприведенного, вход «c: \ temp \ myFolder» будет полем полного имени из массива, а «c: \ temp \» будет статической переменной ($ zipFldr) и «myFolder». zip "имя файла будет из другого массива имен файлов, связанных с типом (AA, BB и т. д.).

Итак, функция будет вызвана:

create-7zip ($filelist2.Row(AA,AA,BB,BB).fullname(1 to n)) $zipFldr\$fArray($filelist2.Row)

Я могу проанализировать массив $ filelist2 с помощью foreach.

foreach ($f in $filelist2) {
    if ($fArray.Containskey($f[0])) {
       if ($f(1)) { #null check
          $fArray[$f[0]]   <----- returns the appropriate zip file name
          $zipFldr         <----- returns the correct folder name
          $f[1]            <----- returns the list of fullnames within the array
          }
        else { write-host "Null Encountered for " $fArray[$f[0]] }
    }

Однако я не могу успешно передать эту информацию в функцию. $ f [1] при передаче в функцию является нулевым, а значение $ fArray [$ f [0]] является либо пустым значением, либо именем system.collections.hashtable (а не тем, которое я хочу).

Что я делаю неправильно, ссылаясь на эти элементы массива?

...