আপনি কীভাবে পাওয়ারশেলের কোনও ফাইল .dll
বা সংস্করণ থেকে সংস্করণ তথ্য পেতে পারেন .exe
?
আমি বিশেষভাবে আগ্রহী File Version
, যদিও অন্যান্য সংস্করণ তথ্য (যে Company
, Language
, Product Name
, ইত্যাদি) পাশাপাশি সহায়ক হবে।
আপনি কীভাবে পাওয়ারশেলের কোনও ফাইল .dll
বা সংস্করণ থেকে সংস্করণ তথ্য পেতে পারেন .exe
?
আমি বিশেষভাবে আগ্রহী File Version
, যদিও অন্যান্য সংস্করণ তথ্য (যে Company
, Language
, Product Name
, ইত্যাদি) পাশাপাশি সহায়ক হবে।
উত্তর:
পাওয়ারশেল যেহেতু .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-inifications/
get-item C:\Windows\System32\ubpm.dll | % VersionInfo | fl * -force
ফাইল সংস্করণটির শেষ অংশের সাথে ফাইলপ্রাইভেট পার্টটি দেখুন এবং তুলনা করুন। ফাইলভিশনটি মূলত কী পাঠানো হয়েছে তা দেখায়, এবং প্যাচ করা সংস্করণটি নয়। এই কমান্ডের অন্যদিকে, শো তালি সংস্করণ সংখ্যা: (পেতে-কমান্ড সি: \ উইন্ডোজ \ সিস্টেম 32 \ ubpm.dll) .Version
(Get-Command ... ).Version
ফিরিয়ে দেয় এবং কখনও কখনও এটি গুরুত্বপূর্ণ। সুতরাং এমন একটি সম্পূর্ণ সমাধানের জন্য যা বাস্তবে আপডেট হওয়া ফাইল ভার্সনটি দেয়, নীচে আমার উত্তরে আপডেট-টাইপডেটা উদাহরণটি দেখুন।
আজকাল আপনি গেট-আইটেম বা গেট-চাইল্ড আইটেম থেকে ফাইল ভার্সনআইনফো পেতে পারেন তবে এটি শিপড পণ্য থেকে মূল ফাইল ভার্সনটি প্রদর্শন করবে এবং আপডেট সংস্করণ নয়। এই ক্ষেত্রে:
(Get-Item C:\Windows\System32\Lsasrv.dll).VersionInfo.FileVersion
মজার বিষয় হল আপনি এটি ব্যবহার করে আপডেট (প্যাচযুক্ত) প্রোডাক্ট ভার্সন পেতে পারেন :
(Get-Command C:\Windows\System32\Lsasrv.dll).Version
"আসল" এবং "প্যাচড" এর মধ্যে আমি যে পার্থক্যটি তৈরি করছি তা মূলত ফাইল ভার্সন গণনা করার কারণে ( এখানে ডক্সগুলি দেখুন )। মূলত ভিস্টার পর থেকেই, উইন্ডোজ এপিআই গেটফাইলে ভার্সইনফো ভাষা নিরপেক্ষ ফাইল (উদাহরণ / dll) থেকে সংস্করণ তথ্যের অংশ এবং ভাষা-নির্দিষ্ট মুই ফাইলের অ-স্থির অংশটি অনুসন্ধান করছে (যা প্রতিবার ফাইলগুলি পরিবর্তিত হয় না )।
সুতরাং lsasrv এর মতো ফাইলের সাথে (যা নভেম্বর ২০১৪-এ এসএসএল / টিএলএস / আরডিএসে সুরক্ষার সমস্যার কারণে প্রতিস্থাপন হয়েছিল) এই দুটি কমান্ডের দ্বারা বর্ণিত সংস্করণগুলি (কমপক্ষে সেই তারিখের পরে কিছু সময়ের জন্য) আলাদা ছিল এবং দ্বিতীয়টি হ'ল আরও "সঠিক" সংস্করণ।
তবে এটি এলএসএএসআরভি-তে সঠিক হলেও, প্রোডাক্ট ভার্সন এবং ফাইল ভার্সিয়নের পক্ষে আলাদা হওয়া সম্ভব (বাস্তবে এটি সাধারণ)। সুতরাং অ্যাসেম্বলি ফাইল থেকে সরাসরি আপডেট হওয়া ফাইল রূপান্তর পাওয়ার একমাত্র উপায় হ'ল অংশ থেকে নিজেকে তৈরি করা, এরকম কিছু:
Get-Item C:\Windows\System32\Lsasrv.dll | ft FileName, File*Part
অথবা এ থেকে ডেটা টেনে:
[System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName)
আপনি পাওয়ারশেলের টাইপডাটা আপডেট করে খুব সহজেই সমস্ত ফাইলআইএনফোতে যুক্ত করতে পারেন:
Update-TypeData -TypeName System.IO.FileInfo -MemberName FileVersion -MemberType ScriptProperty -Value {
[System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName) | % {
[Version](($_.FileMajorPart, $_.FileMinorPart, $_.FileBuildPart, $_.FilePrivatePart)-join".")
}
}
এখন প্রতিবার আপনি যখনই করবেন Get-ChildItem
বা Get-Item
আপনার কাছে এমন কোনও FileVersion
সম্পত্তি থাকবে যা আপডেট করা ফাইল সংস্করণ দেখায় ...
(Get-Command C:\Path\YourFile.Dll).FileVersionInfo.FileVersion
Get-Command
একটি dll ফাইল প্রয়োগ সম্পর্কে আগ্রহী । আপনি এর প্রভাব সম্পর্কে বিস্তারিত বলতে পারেন?
(Get-Item C:\Windows\System32\Lsasrv.dll).VersionInfo.ProductVersion
উত্তরে নথিভুক্ত একই প্রোডাক্ট ভার্সন তথ্য পাওয়ার কি আরও সহজ সরল উপায়? মাইক্রোসফ্ট সত্যই এই শব্দটি ProductVersion
ধারাবাহিকভাবে ব্যবহার করতে বিশ্বাস করি না ।
'দির' হ'ল গেট-চাইল্ড আইটেমের একটি উপনাম যা কোনও সিস্টেম হিসাবে ফিরে আসবে O তাই ...
একটি একক ফাইলের সংস্করণ তথ্য পেতে এটি করুন:
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
আমি পাওয়ারশেল সম্প্রদায় এক্সটেনশানগুলি ইনস্টল করতে পছন্দ করি এবং এটি সরবরাহ করে যে get-FileVersionInfo ফাংশনটি ব্যবহার করে।
তাই ভালো:
গেট-ফাইল ভার্সনআইনফো মাইআস্যাবুলেশন.ডিল
আউটপুট যেমন:
প্রোডাক্ট ভার্সন ফাইল ভার্সন ফাইলনাম -------------- ----------- -------- 1.0.2907.18095 1.0.2907.18095 সি: \ পথ \ থেকে \ MyAsorses.dll
আমি এটি দুর্দান্ত সাফল্যের সাথে সমাবেশগুলির একটি সম্পূর্ণ ডিরেক্টরি বিরুদ্ধে ব্যবহার করেছি।
আমি বুঝতে পেরেছি এর জবাব ইতিমধ্যে দেওয়া হয়েছে, তবে কারও যদি কম চরিত্র টাইপ করতে আগ্রহী, আমি বিশ্বাস করি এটি 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
আলাদা ফর্ম্যাটে তথ্য ফেরত দিতে যোগ করতে পারেন। এটি ফলাফলের এক লাইনে পরিবর্তে একটি তালিকায় ফর্ম্যাট থাকলেও এটি আরও বেশি বিবরণ দেয় returns
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
... তবে আমি মনে করি আমার পথটি শীতল এবং কিছুটির পক্ষে মনে রাখা সহজ। (তবে বেশিরভাগ শীতল)
এটি করার আরও একটি উপায় হ'ল বিল্ট-ইন ফাইল অ্যাক্সেস কৌশলটি ব্যবহার করা:
(get-item .\filename.exe).VersionInfo | FL
আপনি ভার্শনআইএনফো থেকে কোনও নির্দিষ্ট সম্পত্তি পেতে পারেন:
(get-item .\filename.exe).VersionInfo.FileVersion
এটি দির কৌশলটির বেশ কাছাকাছি।
এটি অন্যান্য উত্তরের উপর ভিত্তি করে তৈরি হয়েছে তবে আমি ঠিক পরে যা করেছি:
(Get-Command C:\Path\YourFile.Dll).FileVersionInfo.FileVersion
Get-Command
একটি dll ফাইল প্রয়োগ সম্পর্কে আগ্রহী । আপনি কি এর প্রভাব সম্পর্কে বিস্তারিত বলতে পারেন (এমনকি ফাইলভারভিশনআইএনফো সম্পত্তিটি কল করার আগে)?
FileVersionInfo
যেমন এক্স ফাইল থাকে তেমন থাকে । এই কমান্ডটি পথে ব্যবহার করলে ফাইল সংস্করণ সম্পর্কিত তথ্য পাওয়া যাবে!
আমি এটি দরকারী:
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
}
ইবিগ্রিন যেমন বলেছে, [সিস্টেম.ডায়াগনস্টিক্স.ফাইলে সংস্করণআইফোন] :: getVersionInfo (পাথ) কাজ করবে তবে মনে রাখবেন যে আপনি ফাইল ভার্সনআইএনফো-র সমস্ত সদস্যও পেতে পারেন, উদাহরণস্বরূপ:
[System.Diagnostics.FileVersionInfo]::GetVersionInfo(path).CompanyName
আপনার এখানে ডকুমেন্টেড ফাইল ভার্সনআইএনফো-র প্রতিটি সদস্যকে ব্যবহার করতে সক্ষম হওয়া উচিত, যা আপনাকে মূলত ফাইল সম্পর্কে যা চাইবে এমন কিছু পাবেন।
এখানে একটি বিকল্প পদ্ধতি। এটি সংস্করণ নির্বাচন করতে get-WmiObject CIM_DATAFILE ব্যবহার করে।
(Get-WmiObject -Class CIM_DataFile -Filter "Name='C:\\Windows\\explorer.exe'" | Select-Object Version).Version