Powershell - 实现循环以访问哈希算法中的元素
Powershell - Implementing looping to access elements in a hash algorithm
我在此处编写的函数接受三个强制参数:一个输入文件、一个包含至少一种哈希算法的列表,以及一个保存该输入文件的哈希值的输出文件。此函数尝试接受三个必需的参数:输入文件、至少一种哈希算法的列表以及保存该输入文件的哈希值的输出文件。我试图通过编写在指定块中高效且有效地实现此功能所需的代码来完成该功能。我正在尝试实现某种形式的循环来访问 $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
要在 for
循环中访问 $hashAlgorithm
的各个元素,请使用 $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
我在此处编写的函数接受三个强制参数:一个输入文件、一个包含至少一种哈希算法的列表,以及一个保存该输入文件的哈希值的输出文件。此函数尝试接受三个必需的参数:输入文件、至少一种哈希算法的列表以及保存该输入文件的哈希值的输出文件。我试图通过编写在指定块中高效且有效地实现此功能所需的代码来完成该功能。我正在尝试实现某种形式的循环来访问 $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
要在 for
循环中访问 $hashAlgorithm
的各个元素,请使用 $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