programing

PowerShell에서 파일 버전 가져오기

elseif 2023. 4. 14. 21:18

PowerShell에서 파일 버전 가져오기

할 수 있을까요?.dll ★★★★★★★★★★★★★★★★★」.exePowerShell은?

는 특히 히심관ed에 이 있습니다.File Version단, 다른 버전 정보(즉,Company,Language,Product Name등)도 도움이 됩니다.

할 수 있으므로 10에서는 PowerShell 5를 할 수 있습니다.FileVersionRawProductVersionRaw') 의 ( ProductVersionRawGet-Item ★★★★★★★★★★★★★★★★★」Get-ChildItem 이렇게요.

(Get-Item C:\Windows\System32\Lsasrv.dll).VersionInfo.FileVersionRaw

똑같아ScriptProperty 내 my my my Update-TypeData아래 답변에 기재되어 있습니다만, 현재는 내장되어 있습니다.

PowerShell 4에서는 FileVersion을 사용할 수 있습니다.Get-Item 또는 Get-ChildItem의 정보입니다.단, 출하된 제품의 원래 FileVersion이 표시되며 업데이트 버전은 표시되지 않습니다.예:

(Get-Item C:\Windows\System32\Lsasrv.dll).VersionInfo.FileVersion

흥미로운 점은 다음을 사용하여 업데이트된(패치된) Product Version을 얻을 수 있다는 것입니다.

(Get-Command C:\Windows\System32\Lsasrv.dll).Version

"original"과 "patched"를 구별하는 것은 기본적으로 FileVersion의 계산 방법에 의한 입니다(여기에 있는 문서를 참조하십시오).기본적으로 Vista 이후 Windows API GetFileVersion은info는 버전 정보의 일부를 언어 중립 파일(exe/dll)에서 쿼리하고 비고정 부분은 언어별 mui 파일에서 쿼리합니다(파일이 변경될 때마다 업데이트되지는 않음).

따라서 lsasrv와 같은 파일(2014년 11월 SSL/TLS/RDS의 보안 문제로 대체됨)에서는 이 두 명령어로 보고된 버전이 서로 달랐습니다(적어도 그 날짜 이후 잠시 동안). 두 번째 버전이 더 "올바른" 버전입니다.

단, LSASrv에서는 맞지만 ProductVersion과 FileVersion은 다를 수 있습니다(실제로 일반적입니다).따라서 어셈블리 파일에서 직접 업데이트된 파일 버전을 얻는 유일한 방법은 다음과 같은 부품에서 직접 빌드하는 것입니다.

Get-Item C:\Windows\System32\Lsasrv.dll | ft FileName, File*Part

또는 여기서 데이터를 꺼내면 다음과 같습니다.

[System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName)

PowerShell의 TypeData를 업데이트하면 모든 FileInfo 개체에 쉽게 추가할 수 있습니다.

Update-TypeData -TypeName System.IO.FileInfo -MemberName FileVersionRaw -MemberType ScriptProperty -Value {
   [System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName) | % {
      [Version](($_.FileMajorPart, $_.FileMinorPart, $_.FileBuildPart, $_.FilePrivatePart)-join".") 
   }
}

Get-ChildItem ★★★★★★★★★★★★★★★★★」Get-Item 하면 '어느 정도'가 나옵니다.FileVersionRaw...

PowerShell은 를 호출할 수 있습니다.NET 클래스는 다음 작업을 수행할 수 있습니다.

[System.Diagnostics.FileVersionInfo]::GetVersionInfo("somefilepath").FileVersion

또는 파일 목록에 기재된 바와 같이

get-childitem * -include *.dll,*.exe | foreach-object { "{0}`t{1}" -f $_.Name, [System.Diagnostics.FileVersionInfo]::GetVersionInfo($_).FileVersion }

또는 스크립트로서 더 좋은 방법: https://jtruher3.wordpress.com/2006/05/14/powershell-and-file-version-information/

'dir'는 시스템을 반환하는 Get-ChildItem의 별칭입니다.버전이 있는 파일 시스템에서 IO.FileInfo 클래스를 호출하는 경우속성으로서의 정보그래서...

단일 파일의 버전 정보를 가져오려면 다음 절차를 수행합니다.

PS C:\Windows> (dir .\write.exe).VersionInfo | fl


OriginalFilename : write
FileDescription  : Windows Write
ProductName      : Microsoft® Windows® Operating System
Comments         :
CompanyName      : Microsoft Corporation
FileName         : C:\Windows\write.exe
FileVersion      : 6.1.7600.16385 (win7_rtm.090713-1255)
ProductVersion   : 6.1.7600.16385
IsDebug          : False
IsPatched        : False
IsPreRelease     : False
IsPrivateBuild   : False
IsSpecialBuild   : False
Language         : English (United States)
LegalCopyright   : © Microsoft Corporation. All rights reserved.
LegalTrademarks  :
PrivateBuild     :
SpecialBuild     :

여러 파일의 경우:

PS C:\Windows> dir *.exe | %{ $_.VersionInfo }

ProductVersion   FileVersion      FileName
--------------   -----------      --------
6.1.7600.16385   6.1.7600.1638... C:\Windows\bfsvc.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\explorer.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\fveupdate.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\HelpPane.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\hh.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\notepad.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\regedit.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\splwow64.exe
1,7,0,0          1,7,0,0          C:\Windows\twunk_16.exe
1,7,1,0          1,7,1,0          C:\Windows\twunk_32.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\winhlp32.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\write.exe

이미 답변이 끝난 것은 알고 있습니다만, 타이핑하는 글자의 수를 줄이는 것에 관심이 있는 분은, 이것이 PS v3+에 쓰는 가장 간단한 방법이라고 생각합니다.

ls application.exe | % versioninfo
  • ls입니다.Get-ChildItem
  • %입니다.ForEach-Object
  • versioninfo 쓰는 .{$_.VersionInfo}

「 」를 사용하는 ls이렇게 하면 하위 폴더 내에서 지정된 파일을 찾도록 쉽게 조정할 수 있습니다.예를 들어, 다음 명령어는 호출된 모든 파일의 버전 정보를 반환합니다.application.exe「 」 「 」 :

ls application.exe -r | % versioninfo
  • -r입니다.-Recurse

을 더 할 수 있습니다.-ea silentlycontinue검색할 수 없는 폴더의 권한 오류와 같은 항목을 무시하려면:

ls application.exe -r -ea silentlycontinue | % versioninfo
  • -ea입니다.-ErrorAction

이 '(...)', '타원(...)'을 수 있습니다.| fl하다이렇게 하면 결과당 한 줄에 훨씬 더 많은 세부 정보가 반환됩니다.

ls application.exe -r -ea silentlycontinue | % versioninfo | fl
  • fl입니다.Format-List

과 매우 .ls ★★★★★★★★★★★★★★★★★」dir 다 입니다.Get-ChildItem하지만 저는 저의 "가장 짧은" 방법이 누군가에게 도움이 되기를 바랍니다.

마지막 예는 다음과 같은 방법으로 손으로 쓸 수 있습니다.

Get-ChildItem -Filter application.exe -Recurse -ErrorAction SilentlyContinue | ForEach-Object {$_.VersionInfo} | Format-List

하지만 제 방식이 더 멋있고 기억하기 쉬운 것 같아요. (하지만 대부분 멋있어요)

PowerShell Community Extensions를 설치하고 Get-FileVersion만 사용하는 것이 좋습니다.제공하는 정보 기능.

다음과 같은 경우:

Get-FileVersion(파일버전 취득)MyAssembly.dll 정보

다음과 같은 출력이 있습니다.

제품 버전 파일 버전 파일 이름--------------   -----------      --------1.0.2907.18095 1.0.2907.18095 C:\Path\To\MyAssembly.dll

모든 조립품 디렉토리와 대조해 봤는데 아주 성공적이었어요.

또 다른 방법은 내장 파일 액세스 기술을 사용하는 것입니다.

(get-item .\filename.exe).VersionInfo | FL

또한 Version에서 특정 속성을 가져올 수도 있습니다.다음과 같은 정보:

(get-item .\filename.exe).VersionInfo.FileVersion

이것은 dir 기법에 매우 가깝습니다.

이것은 다른 답변에 근거하고 있지만, 제가 찾고 있던 것이 바로 이것입니다.

(Get-Command C:\Path\YourFile.Dll).FileVersionInfo.FileVersion
[System.Diagnostics.FileVersionInfo]::GetVersionInfo("Path\To\File.dll")

이것은 도움이 됩니다.

function Get-Version($filePath)
{
   $name = @{Name="Name";Expression= {split-path -leaf $_.FileName}}
   $path = @{Name="Path";Expression= {split-path $_.FileName}}
   dir -recurse -path $filePath | % { if ($_.Name -match "(.*dll|.*exe)$") {$_.VersionInfo}} | select FileVersion, $name, $path
}

EBGreen이 말했듯이 [시스템]진단.파일 버전정보]: GetVersionInfo(패스)는 동작하지만 FileVersion의 모든 멤버를 가져올 수도 있습니다.정보(예:

[System.Diagnostics.FileVersionInfo]::GetVersionInfo(path).CompanyName

FileVersion의 모든 멤버를 사용할 수 있어야 합니다.여기에 기재되어 있는 정보는 기본적으로 파일에 대해 필요한 모든 정보를 얻을 수 있습니다.

여기 다른 방법이 있습니다.Get-WmiObject CIM_DATAFILE을 사용하여 버전을 선택합니다.

(Get-WmiObject -Class CIM_DataFile -Filter "Name='C:\\Windows\\explorer.exe'" | Select-Object Version).Version

언급URL : https://stackoverflow.com/questions/30686/get-file-version-in-powershell