创建一个powershell脚本,将文件夹中的文件版本与哈希表进行比较

创建一个powershell脚本,将文件夹中的文件版本与哈希表进行比较,powershell,hash,fileversioninfo,Powershell,Hash,Fileversioninfo,我想知道是否有人能给我一些关于如何设置脚本的见解,该脚本将查看您计算机上的文件夹(例如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

我想知道是否有人能给我一些关于如何设置脚本的见解,该脚本将查看您计算机上的文件夹(例如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
属性进行比较


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

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

您前面的两个问题和答案包括使用:if/equality testing、gci(get childitem)、使用它获取带有路径的文件名、调用.Net framework函数。这就是您所需要的,它们缺少的只是哈希表和一个循环:

$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)"
    }
}

你怎么不知道如何开始?你有没有试过找一些文件?获取一些文件版本?使用哈希表?比较两件事?我有一个哈希表,但我试图找出如何将表中的值与文件夹参数(如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感谢您的帮助。我仍在试图弄清楚事情的来龙去脉,我认为这篇问题帖子有足够的细节来给出一些方向。我在学习和掌握这些概念方面有困难…所以连接这些点对我来说是一个挑战。但我感谢你的努力;这有帮助!