WindowsUpdateファイルの整合性を確認する



Check Windows Update File Integrity



解決:

すべてのWindowsUpdateファイル(.exe、.msi、.msu、.cab)は、Authenticodeを使用して署名されています。データハッシュとデジタル署名がファイルに埋め込まれているため、Windowsが独自に検証できます。

  • PowerShellを介して:



    Get-AuthenticodeSignature foo.cab |フォーマットリスト
  • Cmd経由(Windows 10 SDKがインストールされている場合のみ):

    signtool verify / v / pa foo.msi
  • GUIを介して:



    1. ファイルを右クリックし、[プロパティ]→[デジタル署名]を選択します。
    2. リストから署名を選択し、[詳細]をクリックします。

3つのケースすべてで、署名が有効であり、「Microsoftコード署名PCA」(Microsoftルート認証局にチェーンされている)からのものであることを確認してください。

MD5またはSHA1ハッシュ自体は署名ではないことに注意してください。署名は、ハッシュと秘密鍵(Authenticode署名証明書など)の組み合わせによって作成されます。


Microsoft Updateカタログから更新ファイルをダウンロードした場合:



ここに画像の説明を入力してください

MSUパッケージのSHA1がファイル名に表示されます。

ここに画像の説明を入力してください

青で強調表示されている文字列は、SHA-1(Secure Hash Algorithm-1)値であり、常に40文字の長さです。この値は、ファイルの内容が変更されると変更されます。

このメソッドを使用して、ファイルが本物かどうかを確認できます。PowerShellを使用してこれを行うことができます。

まず、PowerShellを開くには:

Win + R >> typePowerShell >> Ctrl + Shift + Enter

次に、ファイルのフルパスとファイル名が必要です。この例では、ファイルはデフォルトのダウンロードフォルダーにダウンロードされます。C: Users USERNAME Downloadsフォルダー。PowerShellでは、次の変数を使用できます。表す$ homeC: Users Username(ユーザープロファイル)フォルダー。

あなたが使用することができますGet-Filehashコマンドレットを使用してファイルのハッシュを取得し、を使用してファイル名のハッシュと照合します。-eq演算子、結果がtrueの場合、ファイルは良好です。戻ってきたらfalseの場合、ファイルは破損しています。

この方法をよりよく説明するために、この例を示します。

(get-filehash -path '$ home  downloads  windows10.0-kb4592438-x86_95758bd6e2c3a4a98a19efaa4056213531f84f5c.msu' -algorithm SHA1).hash -eq'windows10.0-kb4592438-x86_95758bd6e2c3a4a98a19 ] .substring(0,40)

戻りますtrueは、ファイルが破損していないことを意味します。

使用するときは、ファイル名とファイルパスを確認したいファイルの本名とパスに置き換えるだけです。そして、あなたは行ってもいいです。


Суомынонаの答えは正解です。コードを関数でラップできることを追加したいと思います。

function Check-Update {Param([Parameter(Mandatory = $ True、Valuefrompipeline = $ True)] [Validatenotnullorempty()] [String] $ Path)$ IsGood = $ false if($(Test-Path $ Path)-and $ Path.EndsWith( '。msu')){$ SHA1 = [System.IO.Path] :: GetFileNameWithoutExtension($ Path).Split( '_')[1] $ Hash =(Get-FileHash -Path $ path-アルゴリズムSHA1).Hash $ IsGood = $($ SHA1 -eq $ Hash)Switch($ IsGood){$ true {Write-Host '更新ファイル:$ pathは破損していません'} $ false {Write-Host '更新ファイル:$ pathが破損しています '}}} else {書き込みエラー-メッセージ'更新ファイル:$ pathが有効な更新ファイルとして存在しません '}}

関数を作業中のPowerShellセッションに貼り付けると、関数を呼び出して更新ファイルの整合性を確認できます。例:

チェック-更新 '$ home  downloads  windows10.0-kb4592438-x86_95758bd6e2c3a4a98a19efaa4056213531f84f5c.msu'

すべてが大丈夫なら、それは戻ります:

更新ファイル:C: Users  Estranger  downloads  windows10.0-kb4592438-x86_95758bd6e2c3a4a98a19efaa4056213531f84f5c.msuは破損していません

私の答えがお役に立てば幸いです。よろしく。