Powershell - реализация цикла для доступа к элементам в алгоритме ha sh - PullRequest
1 голос
/ 28 апреля 2020

Функция, которую я здесь написал, принимает три обязательных параметра: входной файл, список, содержащий как минимум один алгоритм (ы) ha sh, и выходной файл, который сохраняет значения ha sh этого входного файла. Эта функция пытается принять три необходимых параметра: входной файл, список как минимум одного алгоритма ha sh и выходной файл, в котором сохраняются хешированные значения этого входного файла. Я пытаюсь завершить функцию, написав код, необходимый для эффективной и действенной реализации этой функции в указанном блоке. Я пытаюсь реализовать некоторую форму зацикливания для доступа к элементам в $ hashAlgorithm.

function Return-FileHash { 
param ( 
[Parameter(Position=0,Mandatory=$true,ValueFromPipeline=$true)] 
[ValidateSet("SHA1","SHA256","SHA384","SHA512","MD5")] 
[STRING[]] 
# the array list that contains one or more hash algorithm input for Get-FileHash cmdlet 
$hashAlgorithm, 
[Parameter(Position=1, Mandatory=$true,ValueFromPipeline=$true)] 
# the document or executable input/InputStream for Get-FileHash cmdlet 
$filepath, 
[Parameter(Position=2,Mandatory=$true,ValueFromPipeline=$true)] 
# the output file that contains the hash values of $filepath 
$hashOutput 
) 
#============================ begin ==================== 
# Here, I am trying to use a loop expression to implement this
for( $i = 0; $i -lt $hashAlgorithm.Length; $i++)
{
Get -FileHash $hashAlgorithm -SHA1 | $hashOutput
}

# === end ================= 
Return-FileHash

Я получаю это:

At line:19 char:38
+ Get -FileHash $hashAlgorithm -SHA1 | $hashOutput
+                                      ~~~~~~~~~~~
Expressions are only allowed as the first element of a pipeline.
At line:1 char:26
+ function Return-FileHash {
+                          ~
Missing closing '}' in statement block or type definition.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline

1 Ответ

1 голос
/ 28 апреля 2020

Чтобы получить доступ к отдельным элементам $hashAlgorithm в for l oop, внесите в него индекс с текущим значением $i:

for ( $i = 0; $i -lt $hashAlgorithm.Length; $i++) {
    Get-FileHash $filepath -Algorithm $hashAlgorithm[$i] | ...
}

В качестве альтернативы используйте foreach() l oop:

foreach($algo in $hashAlgorithm.Length) {
    Get-FileHash $filepath -Algorithm $algo | ...
}

Для вывода в файл по пути $hashOutput либо используйте операторы перенаправления файлов:

# `>` means "overwrite"
Get-FileHash $filepath -Algorithm $hashAlgorithm[$i] > $hashOutput
# `>>` means "append"
Get-FileHash $filepath -Algorithm $hashAlgorithm[$i] >> $hashOutput

Или передайте $hashOutput в качестве аргумента для Команда, которая записывает вывод на диск:

Get-FileHash $filepath -Algorithm $hashAlgorithm[$i] | Add-Content -Path $hashOutput
...