PowerShell에서 파일 버전 가져오기
할 수 있을까요?.dll
★★★★★★★★★★★★★★★★★」.exe
PowerShell은?
는 특히 히심관ed에 이 있습니다.File Version
단, 다른 버전 정보(즉,Company
,Language
,Product Name
등)도 도움이 됩니다.
할 수 있으므로 10에서는 PowerShell 5를 할 수 있습니다.FileVersionRaw
ProductVersionRaw') 의 ( 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
'programing' 카테고리의 다른 글
힌트 텍스트를 WPF 텍스트 상자에 추가하려면 어떻게 해야 합니까? (0) | 2023.04.19 |
---|---|
Scroll Viewer를 자동으로 스크롤하는 방법 - 사용자가 스크롤 위치를 변경하지 않은 경우에만 (0) | 2023.04.14 |
데이터베이스 인덱스는 어떻게 작동합니까? (0) | 2023.04.14 |
#temptable과 #TempTable의 차이점 (0) | 2023.04.14 |
C#에서 문자열을 바이트 배열로 변환하는 중 (0) | 2023.04.14 |