2025年7月3日 星期四

[研究]PowerShell 檢查電腦中是否有檔案符合某些 SHA256 的 hash 值

[研究]PowerShell 檢查電腦中是否有檔案符合某些 SHA256 的 hash 值

2025-07-03

環境:Windows Server 2019 +Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 19

********************************************************************************

顯示 PowerShell 版本,為 5.1

PS C:\temp2> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      17763  7434


PS C:\temp2>

C.ps1 內容 (請用「記事本 (Notepad)」存檔 (ANSI 或 UniCode 編碼存檔都可),不要用 Notepad++ 預設編碼存檔,否則執行會亂碼

# 適用 PowerShell 5.1

# 放最前面
$OutputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8

# 定義多個要比對的 SHA256 雜湊值
$targetHashes = @(
    "F6E0A1E2AC41945A9AA7FF8A8AAA0CEBC12A3BCC981A929AD5CF810A090E11AE",
    "CC399D73903F06EE694032AB0538F05634FF7E1CE5E8E50AC330A871484F34CF",
    "3333333333333333333333333333333333333333333333333333333333333333"
)

# 指定起始搜尋路徑
$searchPath = "C:\Temp2"

# 建立 HashSet 結構
$hashSet = New-Object 'System.Collections.Generic.HashSet[string]' ([System.StringComparer]::OrdinalIgnoreCase)
foreach ($h in $targetHashes) {
    $hashSet.Add($h) | Out-Null
}

# 搜尋檔案並計算 SHA256
Get-ChildItem -Path $searchPath -Recurse -File -ErrorAction SilentlyContinue | ForEach-Object {
    try {
        $hash = Get-FileHash -Path $_.FullName -Algorithm SHA256 -ErrorAction Stop
        if ($hashSet.Contains($hash.Hash)) {
            Write-Output "找到檔案: $($_.FullName) ,SHA256: $($hash.Hash)"
        }
    } catch {
        # 忽略權限不足或鎖定錯誤
    }
}

顯示目前輸出訊息邊碼

PS C:\temp2> [Console]::OutputEncoding


BodyName          : big5
EncodingName      : 繁體中文 (Big5)
HeaderName        : big5
WebName           : big5
WindowsCodePage   : 950
IsBrowserDisplay  : True
IsBrowserSave     : True
IsMailNewsDisplay : True
IsMailNewsSave    : True
IsSingleByte      : False
EncoderFallback   : System.Text.InternalEncoderBestFitFallback
DecoderFallback   : System.Text.InternalDecoderBestFitFallback
IsReadOnly        : True
CodePage          : 950



PS C:\temp2> 

執行結果

PS C:\temp2> .\c.ps1
?曉瑼?: C:\Temp2\1.txt 嚗HA256: F6E0A1E2AC41945A9AA7FF8A8AAA0CEBC12A3BCC981A929AD5CF810A090E11AE
?曉瑼?: C:\Temp2\2.txt 嚗HA256: CC399D73903F06EE694032AB0538F05634FF7E1CE5E8E50AC330A871484F34CF

PS C:\temp2> .\C_Ansi.ps1
找到檔案: C:\Temp2\1.txt ,SHA256: F6E0A1E2AC41945A9AA7FF8A8AAA0CEBC12A3BCC981A929AD5CF810A090E11AE
找到檔案: C:\Temp2\2.txt ,SHA256: CC399D73903F06EE694032AB0538F05634FF7E1CE5E8E50AC330A871484F34CF

PS C:\temp2> .\C_Unicode.ps1
找到檔案: C:\Temp2\1.txt ,SHA256: F6E0A1E2AC41945A9AA7FF8A8AAA0CEBC12A3BCC981A929AD5CF810A090E11AE
找到檔案: C:\Temp2\2.txt ,SHA256: CC399D73903F06EE694032AB0538F05634FF7E1CE5E8E50AC330A871484F34CF

PS C:\temp2> 

計算檔案 SHA256 值

PS C:\Users\Administrator> Get-FileHash -Path "C:\Temp2\1.txt" -Algorithm SHA256

Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
SHA256          F6E0A1E2AC41945A9AA7FF8A8AAA0CEBC12A3BCC981A929AD5CF810A090E11AE       C:\Temp2\1.txt


PS C:\Users\Administrator> 


(完)

相關

沒有留言:

張貼留言