嘗試撰寫一個簡單的腳本,該腳本將使用傳遞給我的 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]
但他們都沒有作業。
有沒有一種簡單的方法可以做到這一點?
編輯:感謝你們的幫助,這是我腳本的最終版本,伙計們:)
param($filename)
function calcSignature() {
$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
現在我只有一個腳本,其他的都是指向sha256sum.ps1.
uj5u.com熱心網友回復:
我猜你正在尋找"How to pass an argument to your .ps1script"。
這是腳本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(...)塊的概念。
uj5u.com熱心網友回復:
Santiago 的有用答案顯示了如何為腳本正確宣告引數,這通常是可取的。
至于你嘗試了什么:
該自動$args變數包含未系結到任何宣告的引數變數。換句話說:如果您的腳本沒有宣告任何引數,$args則是訪問傳遞的任何引數的唯一方法。
第一個引數在 index0,而不是1。
筆記:
- 這與其他 shell / 編程語言不同,其中 index 處的元素
0反映了被呼叫的腳本 / 程式。- 要在 PowerShell 中獲取封閉腳本的完整路徑,請使用自動
$PSCommandPath變數。
- 要在 PowerShell 中獲取封閉腳本的完整路徑,請使用自動
- 因此,例如,
%1在一個批處理檔案,$1在bash腳本-這兩者都包含第一個引數-相當于$args[0]在PowerShell中。
因此,Get-FileHash -algo SHA256 $args[0]應該作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/348769.html
