【问题标题】:create a powershell script that compares file versions in a folder against the hash table创建一个 powershell 脚本,将文件夹中的文件版本与哈希表进行比较
【发布时间】:2014-03-21 03:07:23
【问题描述】:

我想知道是否有人可以让我了解如何设置一个脚本来查看您计算机上的文件夹(例如 C:\Windows\System32)并能够查看文件夹中的文件以与预定义的哈希表进行比较。

此哈希表将包含有关在“system32”文件夹中找到的相同文件的信息,然后定位具有错误版本的文件。哈希表将包含文件及其版本。

示例:
advapi32.dll 6.1.7600.16385 comctl32.dll 6.1.7600.16385 comdlg32.dll 6.1.7600.16385 gdi32.dll 6.1.7600.16385

找到版本错误的文件后,输出会以表格的形式列出有问题的文件。

我知道我必须使用 [System.Diagnostics.FileVersionInfo] 来查找有助于获取文件版本信息的方法。我知道我必须使用 .productVersion 属性进行比较。

我不知道如何开始。如果您需要更多信息,请告诉我。

【问题讨论】:

  • 您不确定如何开始?您是否尝试过获取一些文件?获取一些文件版本?使用哈希表?比较两件事?
  • 我有哈希表,但我正试图弄清楚如何将表中的值与 System32 等文件夹参数进行比较。
  • 我不清楚哈希表中有什么。哈希表具有键和值。这种情况下的键和值是什么?
  • 文件和版本。示例:advapi32.dll 6.1.7600.16385 comctl32.dll 6.1.7600.16385 comdlg32.dll 6.1.7600.16385 gdi32.dll 6.1.7600.16385

标签: powershell hash fileversioninfo


【解决方案1】:

我不知道你被困在哪里了。如果您需要文件夹中的文件,并且您没有在谷歌上搜索“powershell 文件夹中的文件”,那么……您在做什么?

您之前的两个问题和答案包括使用:if / 相等测试、gci (get-childitem)、使用它来获取带路径的文件名、调用 .Net 框架函数。这就是你所需要的,它们所缺少的只是哈希表和循环:

$files = @(Get-ChildItem -File "C:\Windows\system32\")    #NB. @() forces a one-item answer to still be an array

foreach ($file in $files) {
    $fileVersion = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($file.FullName).ProductVersion
    $hashVersion = $hash[$file.Name]

    if ($hashVersion -ne $fileVersion) {
        write "$($file.Name) is different (file: $fileVersion, expected: $hashVersion)"
    }
}

【讨论】:

  • 感谢 TessellatingHeckler 的帮助。我仍在努力理解事情,我认为问题帖子有足够的细节来给出一些方向。我在学习和掌握这些概念时遇到了困难……所以连接这些点对我来说是一个挑战。但我感谢你的努力;有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
  • 2019-08-02
  • 2018-08-21
  • 2021-12-02
  • 1970-01-01
相关资源
最近更新 更多