Конечная рабочая логика решения
Этот сценарий учитывает фактическое расположение структуры versioninfo и работает с одним дополнительным параметром (1 или 2 в конце) для проверки четности входной строки.
$versioninfostate = 0 (Get-Content "hello.exe" -Encoding Unicode) -split {$_ -lt " "} | % { if ($versioninfostate -eq 1) { write-host $_ } if ($versioninfostate -gt 0) { $versioninfostate = $versioninfostate - 1} if ($_ -match "ProductHash$") { $versioninfostate = 2 }}
Разработка пути окончательного решения
- «Последняя команда может получить только некоторые строки версии, но не те, которые я знаю, там есть»
Используйте,
Select *
чтобы получить дополнительные свойства, не показанные толькоFormat-List
- «Получить все строки VersionInfo из файла .exe»
Труба ехе к
% {$_.VersionInfo}
использовать,Foreach-Object
а неWhere-Object
с$_.VersionInfo
нацеливал на только его свойства в одном списке / комплект запись- «Не удается разрешить произвольные имена свойств»
- «В соответствии с вашим последним обновлением показывая вы установили утилиту сторонней рекомендованную кто - то к вам в комментариях, то программное обеспечение, кажется, с 2010 года и разработано специально для Windows 7. В любом случае, это, кажется, добавить дополнительное свойство с именем
ProductHash
в соответствии с ваш последний скриншот обновления. "
Используйте
Get-FileHash
и затем явно получите хеш-значение exe таким образом
Ниже приведена некоторая логика PowerShell., ,
- Использует
%
вместо того,?
чтобы поместить исполняемый файл через Foreach-Object, а неWhere-Object
- Используется
Select *
вместо того,Format-List
чтобы гарантировать, что объект переменной имеетSystem.Object
тип BaseType, а неSystem.Array
какFormat-List
создает - Устанавливает переменную с явным значением свойства, указанным в
VersionInfo
списке - Использует Get-FileHash, чтобы получить значение хеша exe
PowerShell
$t = get-childitem ".\executablename" | % {$_.VersionInfo} | Select * $Hash = (Get-FileHash $Exe).Hash $t.<Property>, $Hash
Пример вывода
Coolest - www.CoolTool.com 30E14E358DD76EC712CCC6B5FD1E79DDEAA653E682E968DA0229BE13BED2B991
VersionInfo List Object
PS C:\WINDOWS\system32> get-childitem ".\executablename" | % {$_.VersionInfo} | Select * FileVersionRaw : 1.80.0.0 ProductVersionRaw : 1.80.0.0 Comments : CompanyName : Coolest - www.CoolTool.com FileBuildPart : 0 FileDescription : Program - Cool memory analyzer FileMajorPart : 1 FileMinorPart : 80 FileName : C:\Users\User\Desktop\Coolio.exe FilePrivatePart : 0 FileVersion : 1.80 InternalName : TooCool IsDebug : False IsPatched : False IsPrivateBuild : False IsPreRelease : False IsSpecialBuild : False Language : English (United States) LegalCopyright : Copyright © 1985-2099 Michael Jordan LegalTrademarks : OriginalFilename : Coolio PrivateBuild : ProductBuildPart : 0 ProductMajorPart : 1 ProductMinorPart : 80 ProductName : TooCool ProductPrivatePart : 0 ProductVersion : 1.80 SpecialBuild :
Поиск двоичного содержимого строки
Примечание. Подобно тому, как команды cygwin
cli string
, grep
и другие выполняют поиск в двоичном файле, чтобы найти совпадение со строкой "ProductHash"
, вы также можете прочитать это из аналогичных команд PowerShell.
$Match = (Get-Content ".\executablename") -replace "`0", "" | % } $Line = (Get-Content ".\executablename") -replace "`0", "" | % } | % } $Line = $Line -replace "[\W]", "`r`n" | % } $MisMatch = $Line.Replace($Match, "") Write-Output "$Match`: $MisMatch"
Пример вывода
ProductHash: Hello_World_abcdefgh2