Powershell - 实现循环访问哈希算法中的元素。

问题描述 投票:1回答:1

我在这里写的函数接受三个必须的参数:一个输入文件,一个至少包含一个哈希算法的列表,以及一个保存该输入文件哈希值的输出文件。这个函数试图接受三个需要的参数:输入文件,至少包含一个哈希算法的列表,以及保存该输入文件哈希值的输出文件。我正试图通过编写所需的代码来完成这个函数,以便在指定的块中高效地实现这个函数。我试图实现某种形式的循环来访问$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
powershell hash filehash
1个回答
1
投票

要访问单个元素的 $hashAlgorithmfor 循环,用当前值的 $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
© www.soinside.com 2019 - 2024. All rights reserved.