Я строю массив следующим образом
$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 (а не тем, которое я хочу).
Что я делаю неправильно, ссылаясь на эти элементы массива?