Powershell - реализация цикла для доступа к элементам в хеш-алгоритме
Функция, которую я написал здесь, принимает три обязательных параметра: входной файл, список, содержащий по крайней мере один алгоритм (ы) хеширования, и выходной файл, который сохраняет хеш-значения этого входного файла. Эта функция пытается принять три необходимых параметра: входной файл, список по крайней мере одного хэш-алгоритма и выходной файл, в котором сохраняются хешированные значения этого входного файла. Я пытаюсь завершить функцию, написав код, необходимый для эффективной и действенной реализации этой функции в указанном блоке. Я пытаюсь реализовать некоторую форму цикла для доступа к элементам в $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 ответ
Для доступа к отдельным элементам $hashAlgorithm
в for
цикл, проиндексируйте его с текущим значением $i
:
for ( $i = 0; $i -lt $hashAlgorithm.Length; $i++) {
Get-FileHash $filepath -Algorithm $hashAlgorithm[$i] | ...
}
В качестве альтернативы используйте foreach()
цикл:
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