PowerShell'de Dosya Sürümü Nasıl Alınır?


Son zamanlarda dosya sürümünü PowerShell'de alma gereksinimi duydum. Bu özellikle yazılım güncellemelerini yönetirken, yüklü uygulama sürümlerini doğrularken veya yazılım dağıtım süreçleri sırasında yararlı olabilir. Bu blog yazısında PowerShell kullanarak dosya sürümünü almanın farklı yöntemlerini inceleyeceğiz.

PowerShell'de dosya sürümünü almak için Get-Item cmdlet'ini kullanabilir ve dosya nesnesinin VersionInfo özelliğine erişebilirsiniz. Örneğin:

$filePath = "C:\MyFolder\File.exe"
$fileVersion = (Get-Item $filePath).VersionInfo.FileVersion

Bu komut, $filePath konumunda bulunan belirtilen dosyanın sürüm bilgilerini alır.

PowerShell'de Dosya Sürümünü Alın

Burada PowerShell'de dosya sürümünü kontrol etmek için 5 farklı yöntem göreceğiz. Burada örnek bir .exe dosyası aldım ve bu dosyanın versiyonunu kontrol edeceğiz.

Yöntem 1: Get-Command'ı Kullanma

PowerShell'deki Get-Command cmdlet'i genellikle bilgisayarda yüklü olan tüm komutları almak için kullanılır. Ancak yürütülebilir dosyalar için dosya sürümü bilgilerini almak için de kullanılabilir.

İşte tam komut dosyası.

$filePath = "C:\MyFolder\FirefoxInstaller.exe"
$fileVersion = (Get-Command $filePath).FileVersionInfo.FileVersion
Write-Host "The file version is $fileVersion"

Yukarıdaki scriptte öncelikle versiyon bilgisini almak istediğimiz çalıştırılabilir dosyanın yolunu tanımlıyoruz. Daha sonra dosyanın sürüm ayrıntılarını içeren FileVersionInfo özelliğini almak için Get-Command'ı kullanırız. Son olarak Write-Host kullanarak sürümün çıktısını alıyoruz.

Betiği VS kodunu kullanarak çalıştırdıktan sonra çıktıyı burada görebilirsiniz ve bu size dosya sürümünü gösteriyor.

Yöntem 2: Get-Item'ı Kullanma

Dosya sürümü bilgilerini almak için PowerShell Get-Item cmdlet'ini de kullanabilirsiniz. Bu cmdlet, öğeyi belirtilen konuma getirmek için kullanılır.

$filePath = "C:\MyFolder\FirefoxInstaller.exe"
$fileVersion = (Get-Item $filePath).VersionInfo.FileVersion
Write-Host "The file version is $fileVersion"

Burada, verilen yoldaki öğeyi (dosyayı) almak için Get-Item'i kullanıyoruz ve ardından dosya sürümünü almak için VersionInfo özelliğine erişiyoruz.

Yöntem 3: Get-ItemProperty'yi Kullanma

Get-ItemProperty, belirtilen bir öğenin özelliklerini alan başka bir PowerShell cmdlet'idir. Sürüm bilgisini çıkarmak için de kullanılabilir.

$filePath = "C:\MyFolder\File.exe"
$fileVersion = (Get-ItemProperty $filePath).VersionInfo.FileVersion
Write-Host "The file version is $fileVersion"

Get-Item'e benzer şekilde, dosyanın özelliklerini almak ve ardından VersionInfo özelliğine erişmek için Get-ItemProperty'yi kullanırız.

Yöntem 4: Get-WmiObject'i kullanma

Bir dosyanın sürümünü seçmek için Get-WmiObject'i CIM_DataFile sınıfıyla birlikte de kullanabilirsiniz. Bu daha gelişmiş bir yöntemdir ve sistemdeki dosyalar hakkında birçok bilgiyi sorgulamak için kullanılabilir.

$filePath = "C:\\Path\\To\\Your\\File.exe"
$fileVersion = (Get-WmiObject -Class CIM_DataFile -Filter "Name='$filePath'").Version
Write-Host "The file version is $fileVersion"

Bu scriptte, belirtilen yoldaki dosya için CIM_DataFile sınıfını sorgulamak için Get-WmiObject kullanıyoruz. Daha sonra sonuçları, dosya yolumuzla eşleştirmek için Ad özelliğine göre filtreleriz ve Sürüm özelliğini alırız.

Yöntem 5: System.Diagnostics.FileVersionInfo'yu kullanma

.Net sınıflarını PowerShell ile de kullanabilirsiniz. Sürüm bilgisini almak için System.Diagnostics.FileVersionInfo sınıfını kullanabilirsiniz.

$filePath = "C:\MyFolder\File.exe"
$fileVersionInfo = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($filePath)
Write-Host "The file version is $($fileVersionInfo.FileVersion)"

Bu yöntem, dosyanın sürüm bilgisini almak için doğrudan .NET Framework FileVersionInfo sınıfından yararlanır.

Gelişmiş - Yeniden Kullanılabilir İşlev

PowerShell'de dosya sürümünü kontrol etmek için özel bir işlev de yazabilirsiniz.

İşte tam bir komut dosyası örneği:

function Get-FileVersion {
    param (
        [string]$filePath
    )

    try {
        if (Test-Path $filePath) {
            $fileVersionInfo = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($filePath)
            return $fileVersionInfo.FileVersion
        } else {
            Write-Error "File does not exist: $filePath"
        }
    } catch {
        Write-Error "An error occurred: $_"
    }
}

# Example usage:
$filesToCheck = @(
    "C:\Windows\notepad.exe",
    "C:\Windows\system32\calc.exe"
)

foreach ($file in $filesToCheck) {
    $version = Get-FileVersion -filePath $file
    Write-Host "$file version is $version"
}

Bu komut dosyası, giriş olarak bir dosya yolunu alan, dosyanın var olup olmadığını kontrol eden ve ardından .NET FileVersionInfo sınıfını kullanarak dosya sürümünü alan bir Get-FileVersion işlevini tanımlar. Daha sonra bir dizi dosya yolu üzerinde yinelenir, bunların sürümlerini alır ve bunları yazdırır.

Çözüm

PowerShell, dosya sürümü bilgilerini almak için birden fazla yol sunar. Get-Command, Get-Item veya Get-ItemProperty gibi çeşitli PowerShell cmdlet'lerini kullanabilir veya Get'i kullanmak isteyebilirsiniz. Dosya sürümünü almak için -WmiObject veya .NET FileVersionInfo sınıfı.

Umarım artık PowerShell'de dosya sürümünü nasıl alacağınıza ilişkin tam bir fikriniz vardır.

İlgili makaleler