首页 > 解决方案 > 将第一个参数传递给 cli

问题描述

尝试编写一个简单的脚本,该脚本将使用传递给我的 ps1 脚本的文件名返回文件的 SHA256 签名:

脚本名称是sha256sum.ps1.

第一个参数将是任何文件,例如:

sha256sum.ps1 dummy.exe

我在里面试过这些sha256sum.ps1

Get-FileHash -algo SHA256 %1
Get-FileHash -algo SHA256 $1
Get-FileHash -algo SHA256 $args[1]

但他们都没有工作。

有没有一种简单的方法可以做到这一点?

编辑:感谢您的帮助,这是我的脚本的最终版本,伙计们:)

#!/usr/bin/env pwsh
param( $firstArg )

function calcSignature( $filename ) {
    $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 }
    }
    (Get-FileHash -algo $algo $filename).Hash + "  " + $filename
}

calcSignature( $firstArg )

现在我只有一个脚本,其他的都是指向sha256sum.ps1.

标签: powershellargumentscommand-line-interface

解决方案


我猜您正在寻找“如何将参数传递给您的.ps1脚本”

这是脚本sha256sum.ps1外观的示例:

param(
    [parameter(mandatory)]
    [validatescript({
        Test-Path $_ -PathType Leaf
    })]
    [system.io.fileinfo]$File
)

(Get-FileHash $File -Algorithm SHA256).Hash

现在,如果我们调用这个脚本,例如:

PS \> .\sha256sum.ps1 .\test.html
1B24ED8C7929739D296DE3C5D6695CA40D8324FBF2F0E981CF03A8A6ED778C9C

注意:当前目录是脚本和 html 文件所在的位置,如果不是这样,您应该使用绝对路径。


我建议您阅读官方文档以了解有关函数和param(...)块的概念。


推荐阅读