如何获取PowerShell脚本接收的首个CLI参数以实现文件哈希校验功能
错误写法原因分析
你之前尝试的三种写法无法运行的原因如下:
%1是Windows cmd批处理的参数占位符,PowerShell语法不支持该写法- PowerShell中没有内置
$1变量,未声明的情况下该变量为空值 $args是PowerShell存储未绑定参数的自动数组,下标从0开始计数,你传入的第一个文件名存储在$args[0],$args[1]实际指向第二个传入参数,因此取不到目标文件名
最简实现方案
如果只需要实现单文件SHA256校验,sha256sum.ps1可以简化为以下代码:
# 接收第一个传入参数作为目标文件名 param($fileName) # 输出格式与Linux下sha256sum工具对齐 (Get-FileHash -Algorithm SHA256 $fileName).Hash + " " + $fileName
如果不需要对齐Linux工具的输出格式,甚至可以一行完成:
Get-FileHash -Algorithm SHA256 $args[0]
多算法适配版本优化
你后续补充的通过软链接适配不同哈希算法的实现逻辑已经可以正常运行,可以额外增加文件存在性校验提升容错性,优化后代码如下:
#!/usr/bin/env pwsh param( $firstArg ) function calcSignature( $filename ) { # 新增文件存在校验 if (-not (Test-Path $filename -PathType Leaf)) { Write-Error "错误:指定文件不存在 - $filename" exit 1 } $scriptName = Split-Path -Leaf $PSCommandPath switch( $scriptName ) { "md5sum.ps1" { $algo = "MD5"; Break } "sha1sum.ps1" { $algo = "SHA1"; Break } "sha256sum.ps1" { $algo = "SHA256"; Break } "sha384sum.ps1" { $algo = "SHA384"; Break } "sha512sum.ps1" { $algo = "SHA512"; Break } default { Write-Error "未匹配到支持的哈希算法"; exit 1 } } (Get-FileHash -algo $algo $filename).Hash + " " + $filename } calcSignature $firstArg
注:PowerShell中调用函数不需要加括号,calcSignature $firstArg是标准写法,之前的括号写法属于语法兼容但不规范的用法
内容的提问来源于stack exchange,提问作者SebMa
相关产品推荐
相关产品推荐

